20.6. Construyendo redes neuronales con Keras y TensorFlow: aplicando técnicas de regularización y normalización
Al construir redes neuronales utilizando Keras y TensorFlow, los científicos de datos y los desarrolladores de aprendizaje automático enfrentan desafíos comunes como el sobreajuste, donde el modelo aprende patrones específicos del conjunto de datos de entrenamiento pero no logra generalizar a datos invisibles. Para combatir esto, las técnicas de regularización y normalización son clave. En este capítulo, exploraremos cómo se pueden aplicar estas técnicas para mejorar la generalización de los modelos de redes neuronales.
Comprensión del sobreajuste y el desajuste
Antes de sumergirnos en las técnicas de regularización y normalización, es importante comprender qué son el sobreajuste y el desajuste. El sobreajuste ocurre cuando un modelo es tan complejo que aprende no solo características útiles de los datos de entrenamiento, sino también ruido o fluctuaciones aleatorias. Por otro lado, el desajuste ocurre cuando el modelo es demasiado simple para capturar la estructura subyacente de los datos.
Regularización
La regularización es una técnica para evitar el sobreajuste agregando una penalización a la función de costos del modelo. El objetivo es limitar la complejidad del modelo obligándolo a aprender sólo los patrones más destacados de los datos. Existen diferentes tipos de regularización, como L1 (Lasso), L2 (Ridge) y Elastic Net, que combinan L1 y L2.
- Regularización L1: Agrega el valor absoluto de los pesos como penalización a la función de costo. Esto puede dar lugar a ponderaciones de valor cero, lo que da como resultado un modelo más disperso.
- Regularización L2: Agrega el cuadrado de los pesos como penalización a la función de costo. Esto tiende a distribuir la penalización entre todas las ponderaciones, lo que da como resultado ponderaciones más pequeñas, pero rara vez nulas.
En Keras, la regularización se puede agregar fácilmente a las capas de la red neuronal usando los argumentos kernel_regularizer
, bias_regularizer
y activity_regularizer
. Por ejemplo:
de keras.regularizers importan l2 model.add(Denso(unidades=64, kernel_regularizer=l2(0.01)))
Abandono
El abandono es una técnica de regularización en la que, durante el entrenamiento, las unidades aleatorias se ignoran (o se "apagan") en cada paso hacia adelante y hacia atrás. Esto ayuda a evitar que unidades/neuronas específicas se ajusten demasiado al entrenamiento. En Keras, Dropout se agrega como una capa:
desde keras.layers importar Abandono model.add(Abandono(tasa=0.5))
Normalización por lotes
La normalización por lotes es una técnica para normalizar las activaciones de las capas internas de una red neuronal. Esto ayuda a estabilizar el proceso de aprendizaje y reducir la cantidad de épocas de entrenamiento necesarias para entrenar redes profundas. En Keras, la normalización por lotes se puede aplicar utilizando la capa BatchNormalization
:
de keras.layers importar BatchNormalization model.add(Normalización por lotes())
Aplicación de la regularización y estandarización en la práctica
Al construir un modelo de red neuronal, es común combinar varias técnicas de regularización y normalización para lograr el mejor rendimiento. A continuación se muestra un ejemplo de cómo se puede hacer esto en Keras:
desde keras.models importar secuencial desde keras.layers importe Denso, Abandono, Normalización por lotes de keras.regularizers importar l1_l2 # Inicializando el modelo modelo = Secuencial() # Agregar la primera capa densa con regularización L1 y L2 model.add(Dense(64, activación='relu', input_shape=(input_shape,), kernel_regularizer=l1_l2(l1=0.01, l2=0.01))) model.add(Normalización por lotes()) # Agregar abandono para regularización adicional model.add(Abandono(0.5)) # Agregar la capa de salida model.add(Dense(num_classes, activación='softmax')) # Compilando el modelo model.compile(optimizador='adam', pérdida='categorical_crossentropy', métricas=['exactitud'])
Este ejemplo muestra un modelo que utiliza la regularización L1 y L2 en la primera capa densa, seguida de la normalización por lotes y de abandono. La capa de salida utiliza la función de activación softmax, adecuada para problemas de clasificación de clases múltiples.
Consideraciones finales
Al aplicar la regularización y la normalización, es importante monitorear tanto el rendimiento del modelo en el conjunto de entrenamiento como en el conjunto de validación. Esto le ayudará a identificar si el modelo está empezando a ajustarse demasiado o mal y le permitirá ajustar las técnicas de regularización y normalización según sea necesario. Además, se recomienda experimentar con diferentes configuraciones e hiperparámetros para encontrar la combinación ideal para su caso específico.
En resumen, construir redes neuronales efectivas con Keras y TensorFlow implica nNo se trata solo de la selección de la arquitectura y los hiperparámetros apropiados, sino también de la aplicación cuidadosa de técnicas de regularización y normalización para garantizar que el modelo se generalice bien a nuevos datos.