Regularización L2 en red neuronal convolucional

Autor: | Última modificación: 30 de agosto de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

La regularización L2 en red neuronal convolucional forma parte de los tipos de regularización para el manejo de las redes neuronales profundas convolucionales dentro del campo del Deep Learning; de hecho, este es el tipo más común de regularización.

De manera que, si te encuentras trabajando con estas redes, debes considerar primero esta alternativa para la generalización de datasets. Por ello, en este post, te compartimos qué es la Regularización L2 en red neuronal convolucional.

¿Qué es la regulación en una red neuronal convolucional?

Antes de abordar la regularización L2 en red neuronal convolucional resulta necesario que recuerdes en qué consiste la regularización dentro del Deep Learning. Lo que consigue la regularización es penalizar las predicciones que realiza nuestra red durante el entrenamiento para que no piense que el training set es la verdad absoluta del estudio y, además, sepa generalizar mejor con otros datasets futuros.

Por otra parte, existen muchos métodos de regularización. En la siguiente lista, te mostramos cuáles son los más comunes:

  • Regularización L2 (Lasso regularization): L2 es la regularización más común y, en este artículo, abordaremos el porqué.
  • Regularización L1 (Ridge regularization): esta es la segunda alternativa más común para la regularización de redes convolucionales.
  • Regularización por restricción (Max norm constraints): este es un tipo de regularización que se basa en las restricciones.
  • Regularización por Dropout: esta es una regularización desarrollada por Srivastava que complementa los otros tipos de generalización, es decir, L1, L2 y maxnorm.

Regularización L2 en red neuronal convolucional

La regularización L2 en red neuronal convolucional es, muy seguramente, la más utilizada y común dentro del campo del Deep Learning para la generalización de redes. Esto se debe a que la regularización L2 en red neuronal convolucional consiste en penalizar la función de pérdidas añadiendo el término 12λw2 para cada peso, lo que resulta en 12λ∑i∑jwi,j2.

Es decir, el 12 es simplemente por términos de comodidad cuando calculamos las derivadas, ya que, de esta forma, nos queda λw en vez de 2λw. Lo que quiere decir esto es que penalizamos los pesos muy altos o dispares y preferimos que sean todos ellos de magnitudes parecidas.

Ahora, has de recordar que lo que implican los pesos es la importancia de cada neurona en el cómputo final de la predicción. Por lo tanto, haciendo esto conseguimos que todas las neuronas importen más o menos por igual, es decir, que la red usará todas sus neuronas para hacer la predicción.

Por el contrario, si existiesen pesos muy altos para determinadas neuronas, el cálculo de la predicción tendría mucho más en cuenta a estas, por lo que acabaríamos con una red con neuronas muertas que no sirven para nada.

Además, en la regularización L2 en red neuronal convolucional introducir el término 12λw2 en nuestra función de pérdidas hace que durante el descenso del gradiente se intente aproximar los pesos a cero, decayendo linealmente: W+=−λ⋅W.

Vamos a ver si conseguimos mejorar nuestra red aplicando la regularización L2:

# Regularización L2 en red neuronal convolucional

# importamos la capa regularización
from tensorflow.keras.regularizers import l2

# Inizializamos el modelo
model = Sequential()

# Definimos una capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))

# Definimos la segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos la tercera capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Añadimos nuestro clasificador
model.add(Flatten())
model.add(Dense(1024, activation='relu', kernel_regularizer=l2(0.01)))
model.add(Dense(10, activation='softmax'))

# Compilamos el modelo
model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.0001, decay=1e-6),
              metrics=['accuracy'])

# Entrenamos el modelo
model.fit(X_train_norm, to_categorical(Y_train),
          batch_size=128,
          shuffle=True,
          epochs=10,
          validation_data=(X_test_norm, to_categorical(Y_test))) # aquí deberíamos usar un conjunto distinto al de test!!!

# Evaluamos el modelo
scores = model.evaluate(X_test_norm, to_categorical(Y_test))

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])
Regularización L2 en red neuronal convolucional

Sigue aprendiendo Big Data

En el desarrollo de este post, te hemos compartido qué es y cómo funciona la regularización L2 en red neuronal convolucional, así que ahora solo queda llevarlo a la práctica. De hecho, si planeas continuar aprendiendo sobre el Big Data, desde KeepCodging te traemos el Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning.

Por medio de esta formación, podrás aprender mucho más sobre los sistemas y herramientas más importantes en el universo del Big Data. De la mano de profesionales y en menos de nueve meses, te convertirás en todo un experto y serás capaz de conocer e identificar las alternativas de gestión de datos más apropiadas para los estudios de los macrodatos. ¡No dudes en solicitar más información e inscríbete ahora!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado