Toplu Normalleştirme, giriş katmanının yanı sıra gizli katmanları da aktivasyonların ortalamasını ve ölçeklendirmesini ayarlayarak normalleştirmek için kullanılır. Derin sinir ağlarında ek katman ile bu normalleştirici etki nedeniyle, ağ degradeleri yok etmek veya patlatmaksızın daha yüksek öğrenme oranı kullanabilir. Ayrıca, parti normalizasyonu ağı genellemenin daha kolay olacağı şekilde düzenler ve bu nedenle fazla takmayı azaltmak için çıkarma kullanılmasına gerek yoktur.
Keras'ta say, Dense () veya Conv2D () kullanarak doğrusal işlevi hesapladıktan hemen sonra, bir katmandaki doğrusal işlevi hesaplayan BatchNormalization () kullanırız ve sonra Activation () kullanarak katmana doğrusal olmayanlığı ekleriz.
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)
Toplu Normalleştirme nasıl uygulanır?
Farz edelim ki, l tabakasına bir [l-1] girdimiz var. Ayrıca l tabakası için ağırlık [W] ve ağırlık birimi b [l] var. L ve z [l] katmanı için hesaplanan aktivasyon vektörü (yani doğrusal olmayanlık eklendikten sonra) olsun [l] doğrusal olmayanlık eklemeden önce vektör olsun
- Bir [l-1] ve W [l] kullanarak, l tabakası için z [l] hesaplayabiliriz
- Genellikle ileri beslemeli yayılımda, bu aşamada z [l] + b [l] gibi z [l] 'ye önyargı birimi ekleyeceğiz, ancak Toplu Normalizasyonda b [l]' nin bu ekleme adımı gerekli değildir ve hayır b [l] parametresi kullanılır.
- Z [l] ortalamalarını hesapla ve her elemandan çıkar
- Standart sapmayı kullanarak bölün (z [l] - ortalama). Buna Z_temp [l] de
Şimdi gizli katmanın ölçeğini aşağıdaki gibi değiştirecek yeni parametreler γ ve β tanımlayın:
z_norm [l] = γ.Z_temp [l] + β
Bu kod alıntısında, Dense () a [l-1] alır, W [l] kullanır ve z [l] değerini hesaplar. Ardından hemen BatchNormalization () yöntemi, z_norm [l] değerini vermek için yukarıdaki adımları gerçekleştirir. Ve sonra hemen Etkinleştirme () tanh (z_norm [l]) değerini [l] yani
a[l] = tanh(z_norm[l])