Regularización L1 en red neuronal convolucional

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

Regularización L1 en red neuronal convolucional es una de las diferentes alternativas con las que podrás contar para el desarrollo Deep Learning en un procesamiento del Big Data. En suma, este tipo de regularización es la más utilizada, por lo que conocerla es de suma importancia para un buen data scientist.

Por esta razón, en este post, te explicamos qué es y cómo funciona la regularización L1 en red neuronal convolucional.

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

Antes de abordar la regularización L1 en red neuronal convolucional resulta necesario recordar, en general, en qué consiste la regularización. Pues bien, esta penaliza las predicciones que hace nuestra red durante el entrenamiento, de manera que no piense que el training set es la verdad absoluta y sepa generalizar mejor con otros datasets.

Por otra parte, existen muchos métodos de regularización, los más comunes son:

  • Regularización L2 (Lasso regularization): la regularización L2 es la más común.
  • Regularización L1 (Ridge regularization): la L1 también es la segunda alternativa más común.
  • Regularización por restricción (Max norm constraints): otro tipo de regularización, sin embargo, esta se basa en restricciones.
  • Regularización por Dropout: esta es una técnica desarrollada por Srivastava que complementa los otros tipos de normalización (L1, L2, maxnorm).

Regularización L1 en red neuronal convolucional

La regularización L1 en red neuronal convolucional es bastante común, de hecho, es una de las más utilizadas. En esta ocasión, añadimos el término λ|w| a nuestra función de pérdidas.

También podemos combinar la regularización L1 en red neuronal convolucional con la L2 en lo que se conoce como Elastic net regularization: λ1|w|+12λ2w2.

La regularización L1 en red neuronal convolucional consigue convertir la matriz de pesos W en una matriz de pesos dispersa o sparse (muy cercana a cero, excepto por unos pocos elementos).

Esto implica que, al revés de lo que sucede con L2, lo que se consigue es dar mucha más importancia a unas neuronas que a otras, con lo que la red se convierte en más robusta frente a posible ruido.

Por lo general, si no estás muy seguro, la L2 suele dar mejores resultados. La L1 la puedes usar si tienes imágenes en las que sabes que hay un número determinado de características que te van a dar una buena clasificación y no quieres que la red se fije en el ruido.

Ejemplo práctico

Probemos con la regularización L1 en red neuronal convolucional y, después, con la L1+L2:

# Prueba con regularización L1

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

# 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 una segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos una 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=l1(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 L1 en red neuronal convolucional 1

# Prueba con regularización elástica (L1 + L2, Elastic net regularization)

# importamos la capa regularización
from tensorflow.keras.regularizers import l1_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 una segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos una 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=l1_l2(0.01, 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 L1 en red neuronal convolucional 2

Conoce más sobre el Big Data

En este post, te hemos familiarizado con la regularización L1 en red neuronal convolucional, no obstante, sabemos que aún queda más por conocer sobre el manejo del Big Data. Por ello, desde KeepCoding te brindamos el Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, por medio del que te formarás en el proceso de ingesta, clasificación, resguardo, procesamiento y presentación de los macrodatos gracias al uso de diferentes herramientas, sistemas y lenguajes.

En el transcurso de esta formación intensiva de gran calidad, grandes profesionales te ayudarán a tener una visión global del mundo Big Data, entonces, serás capaz de reconocer las ventajas e inconvenientes de los distintos programas estudiados. ¡Echa un vistazo a nuestro temario 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

[email protected]

¿Sabías que hay más de 5.000 vacantes para desarrolladores de Big Data sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!