La normalización por lotes se utiliza para normalizar la capa de entrada, así como las capas ocultas ajustando la media y la escala de las activaciones. Debido a este efecto de normalización con capa adicional en redes neuronales profundas, la red puede usar una mayor tasa de aprendizaje sin desaparecer o explotar gradientes. Además, la normalización por lotes regulariza la red de modo que sea más fácil generalizar y, por lo tanto, no es necesario utilizar el abandono para mitigar el sobreajuste.
Justo después de calcular la función lineal usando say, Dense () o Conv2D () en Keras, usamos BatchNormalization () que calcula la función lineal en una capa y luego agregamos la no linealidad a la capa usando Activación ().
from keras.layers.normalization import BatchNormalization
model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True,
validation_split=0.2, verbose = 2)
¿Cómo se aplica la normalización por lotes?
Supongamos que hemos ingresado a [l-1] en una capa l. También tenemos los pesos W [l] y la unidad de polarización b [l] para la capa l. Deje que [l] sea el vector de activación calculado (es decir, después de agregar la no linealidad) para la capa l y z [l] sea el vector antes de agregar la no linealidad
- Usando un [l-1] y W [l] podemos calcular z [l] para la capa l
- Por lo general, en la propagación de avance añadiremos la unidad de sesgo a la z [l] en esta etapa como esta z [l] + b [l], pero en la Normalización de lotes, este paso de adición de b [l] no es necesario y no se requiere Se utiliza el parámetro b [l].
- Calcular z [l] significa y restarlo de cada elemento
- Divida (z [l] - media) usando la desviación estándar. Llámalo Z_temp [l]
Ahora defina nuevos parámetros γ y β que cambiarán la escala de la capa oculta de la siguiente manera:
z_norm [l] = γ.Z_temp [l] + β
En este extracto de código, Dense () toma a [l-1], usa W [l] y calcula z [l]. Luego, la BatchNormalization () inmediata realizará los pasos anteriores para dar z_norm [l]. Y luego la Activación inmediata () calculará tanh (z_norm [l]) para dar un [l] es decir
a[l] = tanh(z_norm[l])