Batch Normalisasi digunakan untuk menormalkan lapisan input serta lapisan tersembunyi dengan menyesuaikan rata-rata dan penskalaan aktivasi. Karena efek normalisasi ini dengan lapisan tambahan dalam jaringan saraf yang dalam, jaringan dapat menggunakan tingkat pembelajaran yang lebih tinggi tanpa menghilangkan atau meledakkan gradien. Selain itu, normalisasi batch mengatur jaringan sehingga lebih mudah untuk digeneralisasi, dan karenanya tidak perlu menggunakan dropout untuk mengurangi overfitting.
Tepat setelah menghitung fungsi linear menggunakan say, the Dense () atau Conv2D () di Keras, kami menggunakan BatchNormalization () yang menghitung fungsi linear dalam sebuah layer dan kemudian kami menambahkan non-linearitas ke layer menggunakan 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)
Bagaimana Normalisasi Batch diterapkan?
Misalkan kita memiliki input [l-1] ke layer l. Kami juga memiliki bobot W [l] dan satuan bias b [l] untuk lapisan l. Biarkan [l] menjadi vektor aktivasi yang dihitung (yaitu setelah menambahkan non-linearitas) untuk layer l dan z [l] menjadi vektor sebelum menambahkan non-linearitas
- Menggunakan [l-1] dan W [l] kita dapat menghitung z [l] untuk layer l
- Biasanya dalam propagasi umpan maju kita akan menambahkan satuan bias ke z [l] pada tahap ini seperti z [l] + b [l] ini, tetapi dalam Normalisasi Batch, langkah penambahan b [l] ini tidak diperlukan dan tidak ada b [l] parameter digunakan.
- Hitung z [l] berarti dan kurangi dari setiap elemen
- Membagi (z [l] - rata-rata) menggunakan standar deviasi. Sebut saja Z_temp [l]
Sekarang tentukan parameter baru γ dan β yang akan mengubah skala lapisan tersembunyi sebagai berikut:
z_norm [l] = γ.Z_temp [l] + β
Dalam kutipan kode ini, Dense () mengambil a [l-1], menggunakan W [l] dan menghitung z [l]. Maka BatchNormalization langsung () akan melakukan langkah-langkah di atas untuk memberikan z_norm [l]. Dan kemudian Aktivasi langsung () akan menghitung tanh (z_norm [l]) untuk memberikan [l] yaitu
a[l] = tanh(z_norm[l])