La normalizzazione batch viene utilizzata per normalizzare il livello di input e i livelli nascosti regolando la media e il ridimensionamento delle attivazioni. A causa di questo effetto normalizzante con un livello aggiuntivo nelle reti neurali profonde, la rete può utilizzare un tasso di apprendimento più elevato senza sfumare o esplodere. Inoltre, la normalizzazione batch regolarizza la rete in modo che sia più facile generalizzare ed è quindi superfluo utilizzare il dropout per mitigare il sovradimensionamento.
Subito dopo aver calcolato la funzione lineare usando dire, il Dense () o Conv2D () in Keras, usiamo BatchNormalization () che calcola la funzione lineare in un livello e quindi aggiungiamo la non linearità al livello usando Activation ().
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)
Come viene applicata la normalizzazione batch?
Supponiamo di aver inserito a [l-1] in un livello l. Inoltre abbiamo pesi W [l] e unità di polarizzazione b [l] per lo strato l. Sia un [l] il vettore di attivazione calcolato (cioè dopo aver aggiunto la non linearità) per lo strato l e z [l] sia il vettore prima di aggiungere la non linearità
- Usando un [l-1] e W [l] possiamo calcolare z [l] per il livello l
- Di solito nella propagazione feed-forward aggiungeremo unità di polarizzazione a z [l] in questa fase come questa z [l] + b [l], ma nella normalizzazione batch questo passaggio di aggiunta di b [l] non è richiesto e no b Viene utilizzato il parametro [l].
- Calcola z [l] significa e sottralo da ciascun elemento
- Dividi (z [l] - media) usando la deviazione standard. Chiamalo Z_temp [l]
Ora definisci i nuovi parametri γ e β che cambieranno la scala del livello nascosto come segue:
z_norm [l] = γ.Z_temp [l] + β
In questo estratto di codice, Dense () prende a [l-1], usa W [l] e calcola z [l]. Quindi il BatchNormalization immediato () eseguirà i passaggi precedenti per dare z_norm [l]. E quindi l'attivazione immediata () calcolerà tanh (z_norm [l]) per dare un [l] cioè
a[l] = tanh(z_norm[l])