¿Qué es Batch-Normalization para red convolucional?

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

En la técnica de Batch-Normalization para red convolucional se desprende un cambio funcional para el procesamiento del Big Data por medio del Deep Learning. Por supuesto, este es un saber fundamental para un buen data scientist. Por ello, en este post, te compartimos qué es Batch-Normalization para red convolucional.

¿Qué es Batch-Normalization para red convolucional?

La técnica conocida como Batch Normalization es una técnica desarrollada por Ioffe y Szegedy que pretende reducir el cambio de covariables internos o Internal Covariate Shift, lo que hace la red más robusta a malas inicializaciones.

El Internal Covariate Shift se define como el cambio en la distribución de las activaciones de las redes, debido a que la distribución de los datos de entrada es diferente entre mini-batches. Cuanto menor sea esta diferencia entre mini-batches, más similares serán los datos que llegan a los filtros de la red, más parecidos los mapas de activación también y, además, mejor funcionará el entrenamiento de la red.

Esto lo consigue forzando las activaciones de la red a tener un valor escogido de una distribución gaussiana unitaria al principio del entrenamiento. Este proceso es posible gracias a que la normalización es una operación diferenciable.

Normalmente se inserta justo antes de que se ejecute la función de activación:

model.add(Conv2D(128, kernel_size=(3, 3), input_shape=(32, 32, 3)))

model.add(BatchNormalization())

model.add(Activation('relu'))

En términos matemáticos, lo que hacemos es centrar y normalizar cada mini-batch que le llega a nuestra red con una media y desviación estándar calculadas con el mini-batch, para luego re-escalar y descentrar los datos de nuevo con parámetros aprendidos por la red a través del entrenamiento.

A continuación, una ilustración del Batch-Normalization para red convolucional:

¿Qué es Batch-Normalization para red convolucional? 1

Además, como estamos calculando la media y la desviación típica para cada mini-batch, en vez de para todo el dataset, bath norm también introduce cierto ruido que actúa como regularización y ayuda a reducir el overfitting.

Esta técnica se ha mostrado muy eficiente para entrenar redes más rápidamente (necesitando menos épocas).

Ejemplo: Batch-Normalization para red convolucional

# importamos la capa Batch-Normalization para red convolucional
from tensorflow.keras.layers import BatchNormalization, Activation

# Inizializamos el modelo
model = Sequential()

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

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

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

# Añadimos nuestro clasificador
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
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])
¿Qué es Batch-Normalization para red convolucional? 2

Parece que ha mejorado, aproximadamente un 2%. Aunque esto que puede parecer poquísimo, en cuanto superamos el 90-95%, aumentar un 1-2% se convierte en un paso de gigante.

Por último, debes tener en cuenta que puedes mejorar Batch-Normalization para red convolucional aún más con la regularización.

Conoce más sobre el Big Data

En este post, te hemos expuesto cómo funciona Batch-Normalization para red convolucional en el desarrollo de redes avanzadas para el Deep Learning, de manera que ahora cuentas con este tipo de conocimiento en tus análisis de los macrodatos. Sin embargo, sabemos que aún queda mucho más por aprender para el procesamiento.

Para ayudarte en esta etapa de formación, en KeepCoding contamos con nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, en el que podrás recibir toda la ayuda necesaria al respecto a nivel práctico y teórico. En efecto, gracias a esta formación intensiva, en un periodo de menos de nueve meses te convertirás en todo un conocedor de las herramientas, sistemas y lenguajes más influyentes del Big Data. ¡No dudes en pedir información e inscríbete ya para convertirte en un experto!

👉 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!