¿Qué es Batch-Normalization para red convolucional?

| Última modificación: 14 de noviembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

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?

Podríamos definir qué es bach normalization como 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:

//mini batch normalization
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 qué es batch normalization: para red convolucional

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: qué es 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])

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!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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