- El descenso de gradiente es esencialmente un algoritmo de optimización, que no tiene nada que ver con el aprendizaje automático per se. Debido a que gran parte del aprendizaje automático implica la optimización, se utiliza bastante en el aprendizaje automático.
- Para problemas convexos, converge al óptimo global; para problemas no convexos, converge a un óptimo local.
- La distinción de las variantes por lotes y estocásticas entra en escena en el aprendizaje automático cuando la función objetivo es una función de puntos de datos [matemáticos] m [/ matemáticos], pero puede ser aproximada por datos [matemáticos] n < 1 [/ matemática], normalmente se conoce como SGD de mini lotes.
- Al implementar el descenso de gradiente para una función no trivial, debe escribir un verificador de gradiente que compare la salida de su cálculo de gradiente con una aproximación de diferencia finita.
- Normalice sus datos para una mejor convergencia.
Descenso de gradiente por lotes
- Analiza todos los datos de entrenamiento para cada paso. Entonces calcula el gradiente exacto, pero es lento.
- No tiene que preocuparse mucho por el tamaño del paso. Un tamaño de paso constante en toda la optimización funciona en la mayoría de los casos. Esto se debe a que para funciones objetivas con buen comportamiento, el gradiente es cero en el óptimo y pequeño cerca de él.
Descenso de gradiente estocástico
- Mira un subconjunto de los datos de entrenamiento en cada paso. Entonces calcula un gradiente aproximado. Pero el cálculo del gradiente es muy rápido en comparación con la versión por lotes para grandes conjuntos de datos.
- Aleatorice sus datos después de cada época para una convergencia más rápida.
- Al implementar SGD, tenga un parámetro [math] n [/ math] que determine el número de puntos tomados en cada iteración para el cálculo del gradiente. Establezca [math] n [/ math] en un valor grande (cercano o igual a [math] m [/ math]) para verificar la cordura de su código; debe converger al óptimo.
- Elegir el tamaño de paso correcto es crucial aquí, porque el gradiente aproximado no es cero en el óptimo. Por lo tanto, debe bajar manualmente el gradiente. Bajarlo demasiado lentamente hará que la convergencia sea lenta, bajarlo demasiado rápido hará que el algoritmo se detenga antes de acercarse al óptimo.
- Use un subconjunto de los datos de entrenamiento para optimizar el tamaño del paso. Debido a que SGD es principalmente independiente del tamaño del conjunto de datos, puede tomar un pequeño subconjunto de datos para obtener un buen tamaño de paso.
Finalmente, aunque el descenso de gradiente es una de las técnicas más comunes utilizadas para la optimización en la práctica, no es la mejor técnica. Existe todo un espectro de técnicas de optimización iterativa. En un extremo, tiene técnicas como SGD que calculan una estimación ruidosa de la dirección y la magnitud del paso y toman muchas iteraciones para converger, y en el otro extremo, tiene técnicas como el método de Newton que calculan una estimación muy precisa de la dirección y la magnitud de paso y por lo tanto, tomar muchos menos pasos para converger. En el medio tienes técnicas como el algoritmo Levenberg-Marquardt.
- ¿Cuáles son algunos buenos libros para el análisis de datos con R?
- En Machine Learning, ¿pueden dos variables con alta correlación tener signos de coeficientes (pesos) diferentes y por qué?
- ¿Es obligatorio para un aspirante a científico de datos conocer las técnicas de manejo de Big Data?
- ¿Cuáles son algunas revisiones en el curso de ciencias de datos en el aula por EduPristine en Bangalore?
- ¿Puedo trabajar como contratista / consultor independiente en el campo de la ciencia de datos?
Aquí hay un buen artículo que discute algunos consejos prácticos para SGD: Trucos de descenso de gradiente estocástico