Controlar el sobreajuste es uno de los desafíos más frecuentes al entrenar redes neuronales. Existen tres estrategias prácticas que permiten mejorar la capacidad de generalización de un modelo: reducir la arquitectura, aplicar regularización L2 y agregar capas de dropout. A continuación se explica cómo implementar cada una en Keras, partiendo de un modelo de clasificación binaria con un 87 % de accuracy.
¿Cómo afecta el tamaño de la red al overfitting?
El primer experimento consiste en comparar dos arquitecturas entrenadas durante veinte épocas sobre el mismo conjunto de datos. El modelo original posee dieciséis neuronas por capa oculta, mientras que el modelo reducido utiliza solo cuatro neuronas por capa [0:47].
Al graficar la función de pérdida en el set de validación (validation loss), se observa que:
- El modelo grande (bigger) comienza a hacer overfitting mucho más temprano y de forma escalonada.
- El modelo pequeño (small) tarda más en sobreajustarse e itera de manera más estable [2:11].
Esto demuestra que arquitecturas más pequeñas generalizan mejor, porque tienen menos parámetros libres que puedan memorizar el ruido del conjunto de entrenamiento.
¿Qué es la regularización L2 y cómo se aplica en Keras?
La regularización penaliza los pesos grandes de la red añadiendo un término extra a la función de pérdida. En la variante L2 se suma el cuadrado de los pesos multiplicado por un factor llamado lambda (o delta). Esto obliga a la red a mantener pesos pequeños, lo que reduce su complejidad efectiva.
Para implementarla basta con importar regularizers desde Keras y añadir el parámetro kernel_regularizer en cada capa densa [3:17]:
python
from keras import regularizers
model.add(Dense(16, activation='relu',
kernel_regularizer=regularizers.L2(0.001)))
¿Qué diferencia hay entre L1, L2 y la combinación de ambas?
- L1 penaliza la suma de los valores absolutos de los pesos, lo que tiende a producir pesos exactamente iguales a cero (selección de características).
- L2 penaliza la suma de los cuadrados, distribuyendo los pesos de forma más uniforme.
- L1-L2 combina ambas penalizaciones separando cada lambda de manera independiente [5:07].
Al graficar el modelo con regularización L2 frente al original, se comprueba que el error de validación no escala tan rápido, aun manteniendo la misma arquitectura de tres capas con dieciséis neuronas [4:42].
¿Cómo funciona dropout para evitar el sobreajuste?
Dropout es una técnica que desactiva aleatoriamente un porcentaje de neuronas en cada iteración de entrenamiento. Al hacerlo, rompe la co-dependencia entre neuronas —a veces llamada "conspiración"— y fuerza a la red a aprender representaciones más robustas [6:30].
En Keras, dropout se agrega como una capa adicional entre las capas densas:
python
model.add(Dropout(0.5))
Un valor de 0.5 significa que el 50 % de las neuronas se inactivan en cada paso de entrenamiento. Al comparar la curva de pérdida en validación, el modelo con dropout muestra un crecimiento mucho más plano que el modelo original [7:09].
¿Cuándo usar cada técnica?
- Modelo menor: cuando la arquitectura actual es claramente sobredimensionada para la cantidad de datos disponibles.
- Regularización L2 (o L1): cuando se quiere conservar la arquitectura pero limitar la magnitud de los pesos.
- Dropout: cuando se busca reducir la dependencia excesiva entre neuronas sin modificar el número de unidades.
Las tres estrategias pueden combinarse: una red más pequeña con regularización L1-L2 y capas de dropout suele ofrecer los mejores resultados de generalización.
Si ya probaste alguna de estas técnicas, comparte qué accuracy obtuviste, qué tipo de regularización elegiste y cuántas neuronas usaste. La experimentación con distintas configuraciones es la mejor forma de encontrar el equilibrio entre capacidad y generalización.