La regularización L1 y L2 (weight decay) en la pérdida
Índice de contenidos
- Puntos clave
- ¿Qué es la regularización?
- Regularización L2 (weight decay)
- Regularización L1 y la dispersión
- El término lambda
- Efecto sobre el sobreajuste
- Preguntas frecuentes
- ¿Cuál es la diferencia entre la regularización L1 y L2?
- ¿Qué es exactamente el weight decay?
- ¿Cómo elijo el valor de lambda?
- Conclusión
- Fuentes
La regularización L1 y L2 añade a la función de pérdida un término que penaliza los pesos grandes. La L2, o weight decay, encoge los pesos de forma suave hacia cero; la L1 los lleva exactamente a cero y produce modelos dispersos. Ambas reducen el sobreajuste y mejoran la capacidad de generalización de una red neuronal.
La regularización L1 y L2 es la forma más directa de evitar que una red neuronal memorice sus datos de entrenamiento. La idea es sencilla: se añade a la función de pérdida un término extra que castiga los pesos grandes, de modo que la red prefiera soluciones simples. La L2, conocida como weight decay, encoge los pesos poco a poco; la L1 fuerza a muchos a valer exactamente cero. Entender ambas aclara por qué un modelo generaliza bien o se queda atascado repitiendo el conjunto de entrenamiento. La misma explicación está disponible en inglés.
Puntos clave
- La regularización L1 y L2 modifica la pérdida: en lugar de minimizar solo el error $L$, la red minimiza $L_{\text{total}} = L + \lambda \lVert \mathbf{w} \rVert^2$ (para la L2) o $L + \lambda \lVert \mathbf{w} \rVert_1$ (para la L1).
- La regularización L2 (ridge o weight decay) suma el cuadrado de la norma de los pesos y los encoge de forma suave hacia cero, sin llegar a anularlos.
- La regularización L1 (lasso) suma el valor absoluto de los pesos y tiende a ponerlos exactamente en cero, lo que produce modelos dispersos y sirve para seleccionar variables.
- El coeficiente $\lambda$ (lambda) controla la fuerza del castigo: valores típicos van de 0,00001 a 0,1, y se ajusta por validación cruzada.
- Ambas técnicas reducen el sobreajuste al frenar la varianza del modelo, a costa de un pequeño aumento del sesgo.
¿Qué es la regularización?
Regularizar es cualquier cambio que hacemos a un modelo con el objetivo de reducir su error de generalización sin reducir necesariamente su error de entrenamiento. Dicho de otro modo, buscamos que la red acierte con datos que nunca ha visto, no solo con los que ya conoce.
El sobreajuste aparece cuando la red tiene tanta libertad que aprende hasta el ruido de los ejemplos de entrenamiento. Una señal típica es que el error de entrenamiento baja hasta casi 0 mientras el error de validación empieza a subir. La regularización más habitual en redes neuronales ataca ese problema por la vía de los pesos: añade a la pérdida un término que crece cuando los pesos crecen. Así, la fórmula que la red intenta minimizar deja de ser solo $L$ y pasa a ser $L_{\text{total}} = L + \lambda R(\mathbf{w})$, donde $R(\mathbf{w})$ mide el tamaño de los pesos. El texto de referencia Deep Learning[1] dedica su capítulo 7 entero a estas estrategias.
Regularización L2 (weight decay)
La regularización L2 usa como penalización el cuadrado de la norma L2 de los pesos: $R(\mathbf{w}) = \lVert \mathbf{w} \rVert^2 = \sum_i wi^2$. La pérdida completa queda $L{\text{total}} = L + \lambda \sum_i w_i^2$, que es justo la fórmula del hero de este artículo.
Su apodo, weight decay (decaimiento de pesos), viene del efecto que produce en el entrenamiento. Al derivar el término $\lambda \sum_i w_i^2$ aparece un gradiente $2\lambda w$, y el paso de descenso resta $\eta \cdot 2\lambda w$ a cada peso en cada actualización. En la práctica, cada peso se multiplica por un factor algo menor que 1 antes de aplicar el gradiente del error, de forma que decae hacia cero de manera continua. Esta variante se conoce también como regresión ridge o regularización de Tikhonov, y Krogh y Hertz ya mostraron en 1991 que este simple decaimiento mejora la generalización. Casi todos los optimizadores modernos la traen incorporada: en PyTorch es el parámetro weight_decay y en scikit-learn[2] es la clase Ridge. Como penaliza más los valores grandes, reparte el peso entre muchas conexiones en lugar de concentrarlo en unas pocas.
Ver la derivación
Partimos de la penalización $R(\mathbf{w}) = \sum_i w_i^2$. Su gradiente respecto a un peso es $\dfrac{\partial R}{\partial w_i} = 2 w_i$, de modo que el gradiente del término completo es $\nabla_{\mathbf{w}}\,\lambda R = 2\lambda\mathbf{w}$. El paso de descenso con tasa de aprendizaje $\eta$ actualiza $w_i \leftarrow w_i-\eta(\partial L/\partial w_i)-\eta\,2\lambda w_i = (1-2\eta\lambda)\,w_i-\eta\,\partial L/\partial w_i$. El factor $(1-2\eta\lambda)$, algo menor que 1, es el que encoge cada peso en cada actualización: eso es el decaimiento de pesos.
Regularización L1 y la dispersión
La regularización L1 cambia la penalización por la suma de valores absolutos: $R(\mathbf{w}) = \lVert \mathbf{w} \rVert_1 = \sum_i |wi|$. La pérdida pasa a ser $L{\text{total}} = L + \lambda \sum_i |w_i|$, y esa diferencia aparentemente pequeña cambia mucho el resultado.
La clave está en el gradiente: la L2 empuja cada peso con una fuerza proporcional a su valor ($2\lambda w$), que se desvanece cerca de cero, mientras que la L1 lo empuja con una fuerza constante ($\pm\lambda$) que no afloja. Por eso la L1 llega a fijar pesos en cero exacto y la L2 no.
El motivo está en el gradiente. La derivada del valor absoluto es constante (vale $+\lambda$ o $-\lambda$ según el signo del peso), así que la L1 empuja cada peso hacia cero con la misma fuerza sin importar lo pequeño que ya sea. La L2, en cambio, empuja con una fuerza proporcional al peso, que se debilita según el peso se acerca a cero. El resultado es que la L1 acaba dejando muchos pesos en cero exacto, produciendo un modelo disperso donde solo sobreviven las conexiones útiles. Esta variante se llama lasso. Como resumen Goodfellow, Bengio y Courville en Deep Learning[1], «en comparación con la regularización L2, la regularización L1 da lugar a una solución más dispersa». Esa dispersión convierte a la L1 en una herramienta de selección de variables: descarta entradas enteras poniendo su peso a cero.
El término lambda
El coeficiente $\lambda$ es un hiperparámetro que decide cuánto pesa el castigo frente al error original. Con $\lambda = 0$ no hay regularización y la red puede sobreajustar sin freno; con un $\lambda$ muy alto, el término de penalización domina y todos los pesos se acercan tanto a cero que la red pierde capacidad y cae en el infraajuste.
El equilibrio está en un rango intermedio. En problemas reales, $\lambda$ suele moverse entre 0,00001 y 0,1, y multiplicar su valor por 10 tiene un efecto notable, así que se explora en escala logarítmica. No existe un valor universal: se elige probando varios y midiendo el error de validación, normalmente con validación cruzada de 5 o 10 particiones. Conviene tener cuidado con la nomenclatura, porque cada biblioteca usa la suya: en scikit-learn el parámetro se llama alpha, mientras que en la regresión logística se controla con C, que equivale a $1/\lambda$, de manera que un C pequeño implica una regularización fuerte.
Efecto sobre el sobreajuste
El fondo de todo esto es el compromiso entre sesgo y varianza. Un modelo sin regularizar tiene poco sesgo pero mucha varianza: se ajusta demasiado a cada muestra y cambia mucho de un conjunto de datos a otro. Al penalizar los pesos grandes, la regularización reduce esa varianza y suaviza la función que la red representa, a cambio de introducir algo de sesgo. El punto óptimo minimiza la suma de ambos.
En la práctica esto se traduce en una brecha más pequeña entre el error de entrenamiento y el de validación. Si una red alcanza un 99 % de acierto en entrenamiento y solo un 80 % en validación, esos 19 puntos de diferencia son la firma clásica del sobreajuste, y subir $\lambda$ suele acercar ambas cifras. Cuando interesa combinar lo mejor de las dos técnicas se usa la red elástica (elastic net), que suma un término L1 y otro L2 con sus propios coeficientes. Todo esto encaja dentro del mapa general que recorre las matemáticas de las redes neuronales.
Preguntas frecuentes
¿Cuál es la diferencia entre la regularización L1 y L2?
La L1 penaliza la suma de valores absolutos de los pesos y tiende a ponerlos en cero exacto, lo que da modelos dispersos y sirve para seleccionar variables. La L2 penaliza la suma de cuadrados y encoge los pesos de forma suave sin anularlos, repartiendo la importancia entre muchas conexiones. En resumen, la L1 selecciona y la L2 modera.
¿Qué es exactamente el weight decay?
Es otro nombre de la regularización L2 visto desde el entrenamiento. Como el gradiente del término $\lambda \lVert \mathbf{w} \rVert^2$ es proporcional al peso, cada actualización multiplica el peso por un factor algo menor que 1 antes de aplicar el gradiente del error. Ese encogimiento continuo hacia cero es lo que se llama decaimiento de pesos, y es el parámetro weight_decay de la mayoría de optimizadores.
¿Cómo elijo el valor de lambda?
No hay un valor único: se prueba una rejilla de candidatos en escala logarítmica, por ejemplo 0,0001, 0,001, 0,01 y 0,1, y se escoge el que da menor error de validación. La validación cruzada de 5 o 10 particiones es el método estándar para hacer esa comparación de forma fiable.
Conclusión
La regularización L1 y L2 no cambia la arquitectura de la red, solo la meta que persigue: en vez de bajar el error a cualquier precio, busca el error más bajo posible con pesos pequeños. La L2 los encoge con suavidad y reparte el trabajo; la L1 los recorta a cero y deja un modelo disperso; el coeficiente $\lambda$ gradúa la dosis. Con esas tres ideas se entiende por qué casi ningún entrenamiento serio prescinde de la regularización. El siguiente paso natural es repasar las normas de vectores L1 y L2, que son la base geométrica de todo esto.