Cómo entender Gradient Descent, el algoritmo ML más popular

Gradient Descent es uno de los algoritmos más populares y ampliamente utilizados para entrenar modelos de aprendizaje automático.

Los modelos de aprendizaje automático suelen tener parámetros (ponderaciones y sesgos) y una función de costo para evaluar qué tan bueno es un conjunto particular de parámetros. Muchos problemas de aprendizaje automático se reducen a encontrar un conjunto de pesos para el modelo que minimiza la función de costo.

Por ejemplo, si la predicción es p , el objetivo es t y nuestra métrica de error es el error al cuadrado, entonces la función de costo J (W) = (p - t) ² .

Tenga en cuenta que el valor predicho p depende de la entrada X valores (actuales) de los parámetros, así como el modelo de aprendizaje de máquina y W . Durante el entrenamiento, nuestro objetivo es encontrar un conjunto de valores para W tal que (p - t) ² sea ​​pequeño. Esto significa que nuestra predicción p estará cerca del objetivo t .

El descenso de gradientes es un método iterativo. Comenzamos con un conjunto de valores para los parámetros de nuestro modelo (ponderaciones y sesgos) y los mejoramos lentamente.

Para mejorar un conjunto dado de ponderaciones, intentamos tener una idea del valor de la función de costo para ponderaciones similares a las ponderaciones actuales (calculando el gradiente). Luego nos movemos en la dirección que reduce la función de costos.

Al repetir este paso miles de veces, minimizaremos continuamente nuestra función de costos.

Pseudocódigo para pendiente descendente

Descenso de gradiente se utiliza para minimizar una función de coste J (W) con parámetros por un parámetros del modelo W .

El gradiente (o derivada) nos dice la inclinación o pendiente de la función de costo. Por lo tanto, para minimizar la función de costo, nos movemos en la dirección opuesta al gradiente.

  1. Inicialice los pesos W al azar.
  2. Calcule los gradientes G de la función de costo con los parámetros. Esto se hace usando diferenciación parcial: G = ∂J (W) / ∂W. El valor del gradiente G depende de las entradas, los valores actuales de los parámetros del modelo y la función de costo. Es posible que deba volver a examinar el tema de la diferenciación si está calculando el gradiente a mano.
  3. Actualice los pesos en una cantidad proporcional a G, es decir, W = W - ηG
  4. Repita hasta que el costo J ( w ) deje de reducirse o se cumpla algún otro criterio de terminación predefinido .

En el paso 3, η es la tasa de aprendizaje que determina el tamaño de los pasos que damos para alcanzar un mínimo. Debemos tener mucho cuidado con este parámetro. Los valores altos de η pueden sobrepasar el mínimo, y los valores muy bajos alcanzarán el mínimo muy lentamente.

Una opción popular para los criterios de terminación es que el costo J ( w ) deja de reducirse en un conjunto de datos de validación.

Intuición para el descenso de gradientes

Imagina que tienes los ojos vendadosen terreno accidentado, y su objetivo es alcanzar la altitud más baja.

Una de las estrategias más sencillas que puede utilizar es sentir el suelo en todas las direcciones y dar un paso en la dirección donde el suelo desciende más rápido.

Si sigues repitiendo este proceso, podrías terminar en el lago, o mejor aún, en algún lugar del enorme valle.

El terreno accidentado es análogo a la función de costo, y minimizar la función de costo es análogo a tratar de alcanzar altitudes más bajas.

Está con los ojos vendados, ya que no tenemos el lujo de evaluar (o 'ver') el valor de la función para cada posible conjunto de parámetros.

Sentir la pendiente del terreno a tu alrededor es análogo a calcular la pendiente, y dar un paso es análogo a una iteración de actualización de los parámetros.

Por cierto, como un pequeño aparte, este tutorial es parte del curso gratuito de ciencia de datos y del curso gratuito de aprendizaje automático en Commonlounge. Los cursos incluyen muchas tareas y proyectos prácticos. Si está interesado en aprender ciencia de datos / aprendizaje automático, definitivamente recomiende echarle un vistazo.

Variantes de pendiente descendente

Existen múltiples variantes de descenso de gradiente, según la cantidad de datos que se utilicen para calcular el gradiente.

La principal razón de estas variaciones es la eficiencia computacional. Un conjunto de datos puede tener millones de puntos de datos, y calcular el gradiente en todo el conjunto de datos puede resultar computacionalmente costoso.

  • El descenso de gradiente por lotes calcula el gradiente de la función de costo wrt al parámetro W para todos los datos de entrenamiento . Dado que necesitamos calcular los gradientes para todo el conjunto de datos para realizar una actualización de parámetro, el descenso del gradiente por lotes puede ser muy lento.
  • El descenso de gradiente estocástico (SGD) calcula el gradiente para cada actualización utilizando un único punto de datos de entrenamiento x_i (elegido al azar). La idea es que el gradiente calculado de esta manera sea una aproximación estocástica al gradiente calculado utilizando todos los datos de entrenamiento. Cada actualización es ahora mucho más rápida de calcular que en el descenso de gradientes por lotes, y después de muchas actualizaciones, nos dirigiremos en la misma dirección general.
  • En el descenso de gradiente de mini lotes , calculamos el gradiente para cada pequeño mini lote de datos de entrenamiento. Es decir, primero dividimos los datos de entrenamiento en pequeños lotes (digamos M muestras por lote). Realizamos una actualización por mini-lote. M suele estar en el rango de 30 a 500, según el problema. Por lo general, se utiliza GD por mini lotes porque la infraestructura informática (compiladores, CPU, GPU) a menudo se optimizan para realizar sumas y multiplicaciones vectoriales.

De estos, SGD y GD por mini lotes son los más populares.

En un escenario típico, hacemos varias pasadas sobre los datos de entrenamiento antes de que se cumplan los criterios de terminación. Cada pase se llama época . Además, tenga en cuenta que, dado que el paso de actualización es mucho más eficiente desde el punto de vista computacional en SGD y GD de mini lotes, normalmente realizamos cientos o miles de actualizaciones entre las comprobaciones para comprobar si se cumplen los criterios de terminación.

Elegir la tasa de aprendizaje

Normalmente, el valor de la tasa de aprendizaje se elige manualmente. Por lo general, comenzamos con un valor pequeño como 0.1, 0.01 o 0.001 y lo adaptamos en función de si la función de costo se está reduciendo muy lentamente (aumenta la tasa de aprendizaje) o está explotando / siendo errática (disminuye la tasa de aprendizaje).

Aunque la elección manual de una tasa de aprendizaje sigue siendo la práctica más común, se han propuesto varios métodos, como Adam optimizer, AdaGrad y RMSProp, para elegir automáticamente una tasa de aprendizaje adecuada.

Escrito en coautoría por Keshav Dhandhania y Savan Visalpara.

Publicado originalmente como parte del curso gratuito de aprendizaje automático y el curso gratuito de ciencia de datos en www.commonlounge.com.