Descenso de gradiente

aprendizaje profundo
matemáticas
descenso de gradientes
Descenso de gradiente cover image

Introducción

Imaginemos que tenemos una función f(x)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)=0f'(x) = 0

La cuestión es que encontrar la fórmula de ff' 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 ff'.

Construyamos algo de intuición

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

Graph 1

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

  • ¿En qué dirección debemos mover el punto xx? 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 x0x_{0} está a la derecha del punto óptimo xx* su recta tangente sube.

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

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

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

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

Tenga en cuenta que: \

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

tangent(x0):g(x)=f(x0).(xx0)+f(x0)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 x0x_{0}?":

  • f(x0)<0f'(x_{0}) < 0     \implies x0x_{0} a la derecha de xx*     \implies Necesitamos mover x0x_{0} hacia la izquierda.

  • f(x0)>0f'(x_{0}) > 0     \implies x0x_{0} a la izquierda de xx*     \implies Necesitamos mover x0x_{0} hacia la derecha.

Los pasos

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

Eche un vistazo a los siguientes ejemplos:

Graph 4

Graph 5

Podemos concluir que:

  • x0x_{0} está cerca de xx* => La pendiente de la tangente es pequeña => f(x0)f'(x_{0}) es pequeña.

  • x0x_{0} está distante de xx* => La pendiente de la tangente es grande => f(x0)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 x0x_{0} puede darnos mucha información sobre la dirección y la distancia del punto óptimo x0x_{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 xx* de la función a partir de un punto inicial aleatorio x0x_{0}. El algoritmo se establece de la siguiente manera:

xn+1=xnlr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

dónde:

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

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

Darse cuenta de:

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

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

  • xnx_{n} cerca de xx* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} cerca de 00 => Pequeña actualización a xnx_{ n}.

Prueba

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

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

  • Cuando xnx_{n} está cerca de x0x_{0}.

  • Cuando dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

  • ¿Cómo elegimos x0x_{0}:

  • Lo elegimos al azar. XXX

  • Lo tomamos en el entorno de xnx{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.


Career Services background pattern

Servicios profesionales

Contact Section background image

Mantengámonos en contacto

Code Labs Academy © 2025 Todos los derechos reservados.