El descenso del gradiente corrige los pesos
El descenso del gradiente (gradient descent en inglés) es el método con el que una red neuronal aprende. Mide su error y mueve sus pesos un poco hacia donde el error baja.
Repetido miles de veces, este paso pequeño es todo el aprendizaje. Hoy lo haces a mano con un solo peso.
Al final de esta lección
Nota
Puedo explicar cómo aprende una red de sus errores.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Pérdida | un número que mide cuánto se equivoca la red (loss en inglés) | |
| Gradiente | hacia dónde sube la pérdida si subes el peso | |
| Tasa de aprendizaje | el tamaño de cada corrección (learning rate en inglés) | tasa = 0.1 |
| Descenso del gradiente | repetir pasos que bajan la pérdida | |
| Época | una vuelta completa por todos los datos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La pérdida mide cuánto se equivoca la red
Imagina un modelo con un solo peso: predice peso × x. Hoy x vale 2, la temperatura de un día, y debería salir 6, los cientos de alquileres.
Con el peso 1 predice 2. El error es predicción menos objetivo: 2 - 6 = -4. La pérdida es ese error al cuadrado, 16, para que nunca sea negativa.
Ejemplo resuelto: la pérdida con tres pesos
| Peso | Predicción (peso × 2) | Error | Pérdida (error al cuadrado) |
|---|---|---|---|
| 1 | 2 | -4 | 16 |
| 2 | 4 | -2 | 4 |
| 3 | 6 | 0 | 0 |
| 4 | 8 | 2 | 4 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La pérdida del peso 1 en el laboratorio
docker exec jupyter python3 -c "print((2 * 1 - 6) ** 2)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El gradiente dice hacia dónde mover el peso
El gradiente dice cuánto cambia la pérdida si subes el peso un poco. Para este modelo vale 2 × error × x.
Con el peso 1: 2 × -4 × 2 = -16. Es negativo: subir el peso baja la pérdida. Por eso el paso resta el gradiente: peso nuevo = peso - tasa × gradiente.
Ejemplo resuelto: tres pasos con tasa 0,1
| Paso | Peso | Pérdida | Gradiente | Peso nuevo |
|---|---|---|---|---|
| 1 | 1 | 16 | -16 | 1 + 0,1 × 16 = 2,6 |
| 2 | 2,6 | 0,64 | -3,2 | 2,6 + 0,32 = 2,92 |
| 3 | 2,92 | 0,0256 | -0,64 | 2,92 + 0,064 = 2,984 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuatro pasos del descenso en Python
# Un solo peso w. El modelo predice w * x y debería acertar y.
x = 2
y = 6
w = 1.0
tasa = 0.1
for paso in range(1, 5):
prediccion = w * x
perdida = (prediccion - y) ** 2
gradiente = 2 * (prediccion - y) * x
w = w - tasa * gradiente
print("paso", paso, "pérdida", round(perdida, 4), "peso nuevo", round(w, 4))
# Cambia tasa a 0.3 y ejecuta otra vez. ¿Qué le pasa al peso?
La tasa fija el tamaño del paso
Una tasa pequeña da pasos pequeños y seguros, pero lentos. Una tasa grande da pasos largos.
Si es demasiado grande, el peso salta de un lado al otro del valor bueno, y cada salto es mayor que el anterior. La pérdida sube en vez de bajar.
En una red grande el cálculo del gradiente se encadena capa por capa. Ese método se llama retropropagación.
Ejemplo resuelto: dos tasas desde el peso 1
| Paso | Tasa 0,1 | Tasa 0,3 |
|---|---|---|
| 1 | 2,6 | 5,8 |
| 2 | 2,92 | -0,92 |
| 3 | 2,984 | 8,488 |
| 4 | 2,9968 | -4,6832 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error muy común
Advertencia
Mucha gente cree que una tasa más alta aprende más rápido. Solo ocurre mientras el paso no se pase del valor bueno. Con la tasa 0,3 de la tabla el peso se aleja del 3 cada vez más. Empieza con una tasa pequeña y súbela con cuidado.
El gradiente del peso 1
docker exec jupyter python3 -c "print(2 * (2 * 1 - 6) * 2)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El primer paso con tasa 0,1
docker exec jupyter python3 -c "print(round(1 - 0.1 * -16, 2))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: una tasa exacta
En el código de arriba, cambia la tasa a 0.125 y ejecuta otra vez. Mira el peso del primer paso.
Después prueba 0.25. Explica con la tabla qué le pasa al peso y por qué una tasa de 0,25 no lo deja quieto en 3.