A Normalização de lote é usada para normalizar a camada de entrada e as camadas ocultas, ajustando a média e o dimensionamento das ativações. Devido a esse efeito de normalização com camada adicional em redes neurais profundas, a rede pode usar uma taxa de aprendizado mais alta sem desaparecer ou explodir gradientes. Além disso, a normalização em lote regulariza a rede de modo que seja mais fácil generalizar e, portanto, é desnecessário usar a eliminação para reduzir o excesso de ajuste.
Logo após calcular a função linear usando, por exemplo, Dense () ou Conv2D () em Keras, usamos BatchNormalization () que calcula a função linear em uma camada e, em seguida, adicionamos a não linearidade à camada usando Ativação ().
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)
Como a Normalização de Lote é aplicada?
Suponha que introduzimos a [l-1] em uma camada l. Também temos pesos W [l] e unidade de viés b [l] para a camada l. Seja a [l] o vetor de ativação calculado (isto é, após adicionar a não linearidade) para a camada l e z [l] seja o vetor antes de adicionar a não linearidade
- Usando a [l-1] e W [l], podemos calcular z [l] para a camada l
- Normalmente, na propagação de feed-forward, adicionaremos a unidade de polarização a z [l] neste estágio como este z [l] + b [l], mas na Normalização de Lote, essa etapa de adição de b [l] não é necessária e não O parâmetro b [l] é usado.
- Calcular z [l] significa e subtraí-lo de cada elemento
- Divida (z [l] - média) usando o desvio padrão. Chame de Z_temp [l]
Agora defina novos parâmetros γ e β que mudarão a escala da camada oculta da seguinte maneira:
z_norm [l] = γ.Z_temp [l] + β
Neste trecho de código, Denso () pega a [l-1], usa W [l] e calcula z [l]. Em seguida, o BatchNormalization () imediato executará as etapas acima para fornecer z_norm [l]. E então a Ativação imediata () calculará tanh (z_norm [l]) para dar um [l] ie
a[l] = tanh(z_norm[l])