Descenso de gradiente

Actualizado en September 24, 2024 4 minutos leer

Descenso de gradiente cover image

Introducción

Imaginemos que tenemos una función $f(x)$ y nos gustaría encontrar su mínimo. Qué harías ?

Sencillo ¿verdad? Sólo necesitamos resolver la siguiente ecuación:

$$f’(x) = 0$$

La cuestión es que encontrar la fórmula de $f’$ no siempre es fácil, ya que tienden a ser extremadamente complicadas, especialmente en el aprendizaje profundo donde tratamos con funciones complejas. Entonces necesitamos encontrar otro método que pueda proporcionarnos el mínimo de una función sin la necesidad de encontrar la fórmula de la derivada $f’$.

Construyamos algo de intuición

Supongamos que tenemos una función f con la gráfica correspondiente:

Graph 1

Comencemos con un punto aleatorio $x_{0}$. El objetivo es mover este punto y acercarlo cada vez más a $x*$ de modo que $f’($x*$) = 0$. Entonces el problema se puede dividir en dos partes:

  • ¿En qué dirección debemos mover el punto $x$? Izquierda o derecha ?

  • ¿Cuánto debemos moverlo?

La dirección

Construyamos algo de intuición para responder la primera pregunta. Fíjate en el siguiente punto:

Graph 2

Graph 3

Tenga en cuenta que:

  • cuando el punto $x_{0}$ está a la derecha del punto óptimo $x*$ su recta tangente sube.

  • cuando el punto $x_{0}$ está a la derecha del punto óptimo $x*$ su recta tangente desciende.

La dirección de una recta está determinada por el signo de su pendiente:

  • Una recta sube $\implica$ que la pendiente $a$ es positiva.

  • Una recta desciende $\implica$ que la pendiente $a$ es negativa.

Tenga en cuenta que: \

La pendiente de la recta tangente de una función en un determinado punto $x_{0}$ no es más que la derivada en ese punto $f’(x_{0})$:

$$ tangent(x*{0}): g(x) = f’(x*{0}).(x-x*{0}) + f(x*{0}) $$

Entonces, como respuesta a la pregunta “¿Dónde deberíamos mover $x_{0}$?”:

  • $f’(x_{0}) < 0$ $\implies$ $x_{0}$ a la derecha de $x*$ $\implies$ Necesitamos mover $x_{0}$ hacia la izquierda.

  • $f’(x_{0}) > 0$ $\implies$ $x_{0}$ a la izquierda de $x*$ $\implies$ Necesitamos mover $x_{0}$ hacia la derecha.

Los pasos

Ahora, para la segunda pregunta, ¿Cuánto deberíamos mover $x_{0}$?

Eche un vistazo a los siguientes ejemplos:

Graph 4

Graph 5

Podemos concluir que:

  • $x_{0}$ está cerca de $x*$ => La pendiente de la tangente es pequeña => $f’(x_{0})$ es pequeña.

  • $x_{0}$ está distante de $x*$ => La pendiente de la tangente es grande => $f’(x_{0})$ es grande.

Al responder ambas preguntas, llegamos a la conclusión de que solo el conocimiento de la derivada en el punto $x_{0}$ puede darnos mucha información sobre la dirección y la distancia del punto óptimo $x_{0}$.

Descenso de gradiente

El descenso de gradiente es la formulación de las respuestas de las dos preguntas anteriores. Es un algoritmo iterativo de optimización que se aproxima al mínimo $x*$ de la función a partir de un punto inicial aleatorio $x_{0}$. El algoritmo se establece de la siguiente manera:

$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$

dónde:

  • $ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ no es más que la derivada de $f$ en el punto $x*{n}$.

  • $lr$ es una constante positiva que determina qué tan grandes serán los pasos.

Darse cuenta de:

  • $x_{n}$ está a la derecha de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - positivo $ => $x_{n}$ se mueve hacia la izquierda.

  • $x_{n}$ está a la izquierda de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0$ => $ x*{n +1} = x*{n} + positivo $ => $x_{n}$ se mueve hacia la derecha.

  • $x_{n}$ cerca de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ cerca de $0$ => Pequeña actualización a $x_{ n}$.

Prueba

  • ¿Cuándo deja de iterarse el descenso de gradiente?

  • Cuando $x_{n}$ es lo suficientemente pequeño.

  • Cuando $x_{n}$ está cerca de $x_{0}$.

  • Cuando $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. XXX

  • ¿Cómo elegimos $x_{0}$:

  • Lo elegimos al azar. XXX

  • Lo tomamos en el entorno de $x{n}$.

  • Depende del problema.

  • ¿Por qué necesitamos el descenso de gradiente?

  • Porque los ordenadores no son lo suficientemente potentes para calcular derivadas.

  • Porque es extremadamente difícil encontrar fórmulas derivadas de modelos de aprendizaje profundo. XXX

  • Porque las funciones tienen más de un mínimo local.