Gradiente Descendiente para aprendizaje automático

El gradiente descendiente es la base de aprendizaje en muchas técnicas de machine learning. Por ejemplo, es fundamental en deep learning para entrenar redes neuronales. También es necesario para la regresión logística. Y en muchos casos, al hacer regresión lineal o polinómica es mejor usar el método del gradiente descendiente que el de los mínimos cuadrados.

Repasemos el Error Cuadrático Medio

Como vimos, el error cuadrático medio es un forma de medir el error de un modelo de aprendizaje automático para problemas de regresión. La fórmula intuitiva es:

error \ cuadr\acute{a}tico = (real\ - \ estimado)^2

y matemáticamente podemos expresarlo así:

MSE = \frac{1}{M}\sum_{i=1}^{M}(real_i\ - \ estimado_i)^2

MSE significa Mean Squared Error – Error Cuadrático Medio en inglés.

Cuando estamos resolviendo problemas con una sola variable, el error cuadrático medio tiene forma de parábola. Con dos variables, de bol o de cuenco. Y con tres o más variables … es difícil de saber qué forma tiene porque necesitaríamos 4 dimensiones para visualizarlo.

La función de coste basada en el error cuadrático medio tiene forma de parábola en 2D y de bol o cuenco en 3D

Función de Coste

La función de coste J es la función de lo que queremos optimizar. En el caso más simple, es igual al error que queremos minimizar.

J = MSE

Ya veremos que no siempre es tan simple. En algunos casos nos interesará introducir términos de regularización, pero eso lo dejaremos para otro artículo.

¿Qué es el Gradiente?

Creo que la mejor forma de explicar lo que es el gradiente, es diciendo que es una generalización de la derivada. Seguramente ya sabéis lo que es una derivada. Aquí tenéis un pequeño recordatorio.

En matemáticas, la derivada de una función mide la rapidez con la que cambia el valor de dicha función matemática, según cambie el valor de su variable independiente. La derivada de una función es un concepto local, es decir, se calcula como el límite de la rapidez de cambio media de la función en cierto intervalo, cuando el intervalo considerado para la variable independiente se torna cada vez más pequeño. Por ello se habla del valor de la derivada de una función en un punto dado.

Fuente: wikipedia

El gradiente es el conjunto de todas las derivadas parciales de una función. En el caso de machine learning, estamos interesados en el gradiente de la función de coste.

Método del Gradiente Descendiente

En muchas de las técnicas de aprendizaje automático, el «aprendizaje» consiste en encontrar qué parámetros W minimizan la función de coste. Esto es así para la regresión lineal y polinómica, la regresión logística, el deep learning, etc. El gradiente descendiente es un método de optimización numérica para estimar  los mejores coeficientes.

Ejemplo intuitivo

¿Te acuerdas cuando eras pequeño y en el colegio había que hacer alguna cuenta? Y en vez de hacerla como te habían enseñado la hacías por tanteo … o como decimos en España «por la cuenta de la vieja». Pues justo así funciona el gradiente descendiente. Sorprendente! Sabías lo que era aunque todavía no supieses como se llamaba.

Pongamos por ejemplo que tenemos una función f que es una línea pero no sabemos cuáles son sus parámetros. Tenemos los datos para la x, tenemos los datos para la y … pero no sabemos los parámetros de la función f en la expresión

y = f(x) = wx + b

En este ejemplo, para hacerlo más simple, vamos a suponer que b=0.

Haciendo el gradiente descendiente por tanteo

Podemos ir probando. Por ejemplo, para w = 1, tendríamos un error cuadrático medio (mse) de 758.37. Podemos probar con otro w para ver si aumentamos w o lo disminuimos. Si probamos con w = 2, el mse sería 265.82. Parece que aumentar el valor para w es una buena idea. Si lo seguimos aumentado a = 3, el mse es de 30.02. ¡Vamos por el buen camino! vamos ahora a aumentarlo hasta w = 4 … para 4, el mse es 50.97. Claramente nos hemos pasado, podemos echar para atrás y probar w = 3.5 que nos da un mse de 8.40.

Regresión Lineal por tanteo

En esta lista resumimos los intentos que hemos hecho hasta que dar con la solución. ¿Que cómo sabemos que w = 3.5 es la solución? Porque es la fórmula que he usado para generar los datos de este ejemplo. Ya veremos cómo hacerlo cuando no sepamos la solución correcta.

  1. w = 1.00, mse = 758.37
  2. w = 2.00, mse = 265.82
  3. w = 3.00, mse = 30.02
  4. w = 4.00, mse = 50.97
  5. w = 3.50, mse = 8.40

Las matemáticas del Gradiente Descendiente

El método del gradiente descendiente nos permite automatizar de forma más eficiente el ir probando coeficientes de los modelos de machine learning. Se puede usar tanto con modelos simples (como el que hemos visto en el ejemplo) como en modelos complejos (por ejemplo, redes neuronales con muchas variables).

Lo que vamos buscando es encontrar el conjunto de parámetros que minimizan la función de coste (error cuadrático medio). Como vemos en el gráfico, el gradiente representa la pendiente en el punto que nos encontremos de la función de coste. Cuanto más «empinada» sea la pendiente, más queremos ir en sentido contrario (para abajo), para minimizar el error.

Intuición gráfica del Gradiente Desdenciente

El gradiente lo podemos calcular con derivadas parciales:

\frac{\partial MSE}{\partial W}

Así que podemos actualizar los coeficientes W usando esta regla:

W \leftarrow W \ -\ \alpha \frac{\partial MSE}{\partial W}

Podemos ver varias cosas interesantes:

  • Usamos ‘-‘ (resta), para ir en la dirección opuesta al gradiente
  • La actualización de W es proporcional al gradiente (a mayor pendiente [más empinado], mayor es el cambio)
  • α, también llamado ‘ratio de aprendizaje’, controla el tamaño de la actualización

La importancia de elegir un buen ratio de aprendizaje

El ratio de aprendizaje (learning rate en inglés) es necesario para asegurarnos que no vamos dando tumbos. Me explico: si el ratio de aprendizaje es demasiado grande, los cambios en W serán también muy grandes y será difícil encontrar los coeficientes que minimicen la función de coste.

Si el ratio de aprendizaje es demasiado alto, el gradiente descendiente irá dando tumbos

Por otra parte, si el ratio de aprendizaje es demasiado pequeño, el gradiente descendiente tardará mucho en encontrar la solución adecuada.

¿Y si el gradiente descendiente se queda atrapado en un mínimo local?

El gradiente descendiente puede quedarse atascado en mínimos locales si hay pocos atributos

Cuando usamos el gradiente descendiente nos arriesgamos a caer en un mínimo local. Cuando caemos en un mínimo local, distintos valores de W’ cercanos a W tendrán un valor de la función de coste mayor que en el punto W. El gradiente descendiente nos devolverá pues a W una y otra vez. Así que creeremos que hemos encontrado la mejor solución. Sin embargo, el mínimo global bien pudiera estar en otra parte.

Durante un tiempo, esto trajo de cabeza a muchos científicos de datos en la era del data mining. Se usaron varias estrategias para mitigar el efecto de caer en un mínimo local. Una estrategia muy popular por su simplicidad era la de empezar el gradiente descendiente en distintos puntos al azar y elegir la mejor solución.

En la práctica, no debemos preocuparnos

Actualmente se ha comprobado que, en la práctica, el riesgo de caer en un mínimo local es muy muy bajo. Esto se debe que ahora los problemas que resolvemos con machine learning tienen muchas variables. Esto resulta en un gran número de dimensiones si lo interpretamos geométricamente. Así que lo que antes era un mínimo local ahora se denomina punto de silla (saddle point en inglés).

Un punto de silla o punto de ensilladura es el punto sobre una superficie en el que la pendiente es cero pero no se trata de un extremo local (máximo o mínimo). Es el punto sobre una superficie en el que la elevación es máxima en una dirección y mínima en la dirección perpendicular.

Fuente: wikipedia

En los puntos de silla, el gradiente disminuye hasta cero en algunas dimensiones, pero sigue habiendo gradiente relevante en otras dimensiones.

Información adicional

Hemos visto el uso del gradiente descendiente para un problema de regresión donde la función de coste es el error cuadrático medio. El gradiente descendiente también puede usarse para problemas de clasificación. En estos casos, las función de coste suele ser la entropía cruzada. También podemos usar otras funciones de coste o incluso diseñar las nuestras.

La versión del gradiente descendiente que hemos visto es la más básica y fácil de entender. Hay varias mejoras que se han ido realizando a lo largo de los años que ya veremos en otros artículos. Si quieres profundizar puedes leer acerca del gradiente descendiente estocástico, momentum, AdaGrad, RMSProp, Adam, etc. Algunas de estas mejoras hace que el elegir el ratio de aprendizaje adecuado no sea tan relevante ya que lo van adaptando sobre la marcha.

La importancia de escalar los datos al usar el Gradiente Descendiente

El gradiente descendiente funciona mucho mejor cuando los datos tienen una escala similar. Esto se debe a la forma geométrica de la función de coste. Cuando todas las dimensiones tiene una escala similar, podemos esperar la forma de cuenco multidimensional. Sin embargo, si distintas dimensiones tienen una escala diferente, la forma geométrica será muy diferente. Esto hace que el gradiente descendiente tarde mucho en converger.

Debemos escalar los atributos de entrada para que el gradiente descendiente funcione correctamente

Como vemos en la siguiente figura, el atributo que está entre [-100, 100] tiene mucha más influencia en la función de coste que el atributo que está el rango [-5, 5]. La consecuencia es que la derivada parcial de algunos atributos es mucho mayor que la derivada parcial de los otros. Esta diferencia provoca que se sobre-optimicen algunos coeficientes en detrimento de otros. Al final, posiblemente, todos los coeficientes acabarán optimizados; eso sí, a costa de un número muy superior de iteraciones.

Este es un caso muy frecuente. La mayoría de los problemas que queremos resolver tienen atributos relevantes en escalas diferentes. Por ejemplo, si queremos estimar el valor de una propiedad inmobiliaria, los atributos «número de dormitorios» y «metros cuadrados» estarán en dos escalas muy diferentes.

Hay varias estrategias para escalar los datos. Las más comunes son:

  • Estandarizado de datos:  transformación de los datos para que cada atributo tenga una media de 0 y una desviación típica de 1
  • Escala mínimo máximo: después del escalado, cada atributo estará en el rango [0, 1]
  • Escala logarítmica: transformación de los datos aplicando el operador logaritmo

¿Gradiente Descendiente o Mínimos Cuadrados para la Regresión Lineal?

Cuando estemos resolviendo una regresión lineal o polinómica, ¿nos interesa más el método del gradiente descendiente o el método de los mínimos cuadrados? La respuesta es: depende.

Con el método de los mínimos cuadrados obtenemos una solución exacta. Está matemáticamente demostrado que la estimación de los coeficientes W es la que minimiza el error cuadrático medio. Con el método del gradiente descendiente obtenemos una solución aproximada y no hay garantías. Aunque normalmente encontramos una solución que está muy cerca del mínimo teórico siempre que usamo un ratio de aprendizaje adecuado y un número suficiente de iteraciones.

Entonces, ¿por qué vamos a usar un método aproximado cuando podemos usar uno exacto? La respuesta es que el método del gradiente descendiente tiene otras ventajas con respecto al método de los mínimos cuadrados.

El método de los mínimos cuadrados es más complejo computacionalmente. Si repasamos la fórmula podemos ver que tiene una transposición de matrices, varias multiplicaciones de matrices y una inversión de matrices.

\hat{W} = (X^T X)^{-1} X^T y

Las operaciones de transponer, multiplicar e invertir matrices son atómicas. Es decir, las podemos hacer o no, pero no hay forma de transponer un poco, o invertir una matriz un 20%.

El método del gradiente descendiente sí que permite optimizar «un poco». Así que podemos usarlo para resolver problemas del tipo «tienes 2 minuto para estimar W«. Además, el gradiente descendiente puede encontrar soluciones casi óptimas en mucho menos tiempo que el método de los mínimos cuadrados para problemas con muchos datos. Cuando hablamos de muchos datos nos referimos tanto al número de muestras como al número de atributos.

Resumen

En este post hemos hablamos del gradiente descendiente. El método del gradiente descendiente es muy usado para entrenar redes neuronales y también en aprendizaje profundo (deep learning). En particular, nos interesa utilizar el gradiente descendiente para estimar los parámetros W que minimizan la función de coste. También hemos visto por qué es tan importante escalar los datos antes de utilizar este método de optimización numérica. Por último, hemos vistos que para un conjunto de datos muy amplio, el gradiente descendiente nos puede interesar más que el uso del método de los mínimos cuadrados.

Recursos

  • [vídeo] donde explico cómo funciona el gradiente descendiente para resolver regresiones lineales (en inglés)

5 comentarios en «Gradiente Descendiente para aprendizaje automático»

  1. Buenas tardes, apreciados expertos.
    Me encanta su contenido, sin embargo he revisado su pagina y no se pueden observar las formulas, parece que están dañadas, nos gustaría observarlas, por lo que les sugiero que arreglen estos problemas que tienen con la codificación de las formulas de sus publicaciones.

    Responder
    • Hola Rey, hemos investigado el problema y nos hemos dado cuenta que en algunos dispositivos no se ven las fórmulas. Lo hemos subsanado y ahora deberían funcionar en la mayoría de dispositivos.

      Responder
  2. Hola,
    Gracias por el contenido, en muy interesante poder entender las cosas, gracias a su articulo
    Una pregunta sobre el escalados de los datos:
    La estrategia de minimo máximo:
    Escala mínimo máximo: después del escalado, cada atributo estará en el rango [0, 1]
    Podrías comentarlo con un poco más de detalle o indicarme algun sitio donde puede ver este detalle para entenderlo mejor. Los otros dos que mencionas están claros
    Y este escalados los hariamos sobre las variables continuas incluidas en tu modelo y que sepas que tienen un magnitud muy diferente, verdad?

    Responder
  3. Sí, el escalado típico estaría en el rango [0, 1] para escala mínimo máximo.

    Tienes razón también cuando dices que el escalado se haría en variables continuas con magnitud muy diferente. Mucha gente (yo incluido) hace la misma estrategia de escalado para todas las variables continuas.

    Tengo pendiente un artículo sobre normalización, escalado, etc. El escalado mínimo máximo tiene también sus problemas, por ejemplo, si hay algún valor extremo (outlier) hace que el resto de los datos tenga muy poca variabilidad comparadas con el resto de las variables escaladas. Estandarizando los datos conseguimos el mismo efecto con menos riesgo.

    Responder
  4. Antes que nada los artículos son una gran fuente de informacion, se agradece el esfuerzo para la comunidad habla hispana.
    por otra parte noto que en varios de los post las formulas matemáticas no se leen correctamente, ojala que puedan resolverlos, muchas gracias y saludos!!

    Responder

Deja un comentario