¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Descenso del gradiente

Después de esta lección: Puedo minimizar una función dando pasos de descenso del gradiente y decir cuándo parar.

Lección de 60 min2 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

El descenso baja un paso cada vez

El descenso del gradiente es un método para encontrar el mínimo de una función dando pasos cuesta abajo. En cada paso mides la pendiente y avanzas un poco en sentido contrario.

Muchos modelos de aprendizaje automático aprenden así: buscan los números que dejan su error lo más pequeño posible.

Al final de esta lección

Nota

Puedo minimizar una función dando pasos de descenso del gradiente y decir cuándo parar.

Palabras clave

PalabraQué significaEjemplo
Mínimoel punto más bajo de una función
Descenso del gradienterepetir pasos en contra de la pendiente
Tasa de aprendizajeel tamaño de cada paso (learning rate en inglés)tasa = 0.1
Convergeracercarse cada vez más a un número
Criterio de paradala regla que dice cuándo dejar de dar pasos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada paso resta la pendiente por la tasa

Empieza en un punto cualquiera y calcula la pendiente allí. Si es positiva, la función sube hacia la derecha, así que baja hacia la izquierda.

El punto nuevo es el anterior menos la tasa de aprendizaje por la pendiente. Con la función (x - 3) ** 2, la pendiente es 2 * (x - 3) y el mínimo está en 3.

Ejemplo resuelto: cinco pasos con tasa 0,1

Pasox antesPendientex nuevo
10-60,6
20,6-4,81,08
31,08-3,841,464
41,464-3,0721,771
51,771-2,4582,017

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La tasa de aprendizaje decide si llegas

Una tasa pequeña llega muy despacio. Una tasa grande puede pasarse del mínimo y rebotar cada vez más lejos.

Con tasa 1,1 la posición salta a 6,6, luego a -1,32 y luego a 8,18. Se aleja del mínimo en lugar de acercarse. Eso es divergir.

Ejemplo resuelto: cuatro tasas, cinco pasos

Tasax tras 5 pasosQué pasa
0,010,288Va muy despacio
0,12,017Se acerca bien
0,53Llega en un solo paso
1,110,465Diverge: se aleja

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cinco pasos con tasa 0,1

Comando
docker exec jupyter python3 -c "exec('x=0.0\nfor k in range(5):\n    x=x-0.1*2*(x-3)\n    print(k+1,round(x,3))')"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cinco pasos con tasa 1,1

Comando
docker exec jupyter python3 -c "exec('x=0.0\nfor k in range(5):\n    x=x-1.1*2*(x-3)\n    print(k+1,round(x,3))')"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe tu primer descenso

Código: python
# Descenso del gradiente: la función es (x - 3) ** 2.
def pendiente(x):
    return 2 * (x - 3)

x = 0.0
tasa = 0.1
for paso in range(1, 6):
    x = x - tasa * pendiente(x)
    print("paso", paso, "x =", round(x, 3))
# Cambia tasa a 1.1 y ejecuta otra vez.
# Después prueba con 0.5.

Un error muy común

Advertencia

Mucha gente cree que una tasa mayor siempre llega antes. No es así: pasada cierta tasa, los pasos se pasan del mínimo y la posición se aleja. Empieza con una tasa pequeña y súbela poco a poco.

Se para cuando la pendiente es casi cero

No sabes de antemano cuántos pasos hacen falta. El criterio de parada más común es dejar de moverte cuando el valor absoluto de la pendiente baja de un número pequeño, la tolerancia.

Añade también un máximo de pasos, para no dar vueltas para siempre si la tasa es mala. Con tasa 0,1 y tolerancia 0,01 se necesitan 29 pasos.

Para ir más lejos: busca tu tasa

En el código del descenso, prueba las tasas 0.3, 0.9 y 1.0. Antes de ejecutar, escribe si esperas llegar, rebotar o divergir.

Con 1.0 verás que x salta entre dos valores sin acercarse nunca. Explica por qué en una frase.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.