Apa itu batch normalization?
Batch normalization (BN) adalah layer yang menormalkan setiap feature ke rata-rata nol dan varians satu memakai statistik dari mini-batch saat ini, lalu menerapkan skala γ dan pergeseran β yang dipelajari. Posisinya biasanya di antara linear layer atau convolutional layer dan aktivasinya. Saat inference, BN memakai running average dari rata-rata dan varians yang dikumpulkan selama training.
Ioffe dan Szegedy memperkenalkan batch normalization pada 2015, dan metode ini cepat menjadi standar di convolutional network seperti ResNet. BN memungkinkan learning rate yang lebih tinggi, membuat training tidak terlalu peka terhadap inisialisasi, dan menambah efek regularization ringan. Transformer umumnya memakai layer normalization, yang menormalkan nilai-nilai di dalam setiap contoh dan tidak bergantung pada batch.
Ide utama
- Batch normalization menskalakan ulang setiap feature ke rata-rata nol dan varians satu di dalam satu mini-batch.
- Parameter γ dan β yang dipelajari memungkinkan network memulihkan skala dan pergeseran apa pun yang dibutuhkannya.
- Training memakai statistik batch, sedangkan inference memakai running average yang dikumpulkan selama training.
- BN memungkinkan learning rate yang lebih tinggi dan mengurangi kepekaan terhadap inisialisasi weight.
- Batch kecil membuat statistik BN mengandung banyak noise, itu sebabnya transformer memakai layer normalization.
- Alasan BN berhasil masih diperdebatkan. Permukaan loss yang lebih halus adalah salah satu penjelasan utama.
Ulasan singkat tentang topik ini
Pertanyaan umum
Apa bedanya batch normalization dan layer normalization?
Batch normalization menghitung rata-rata dan varians setiap feature di seluruh contoh dalam satu batch. Layer normalization menghitungnya di seluruh channel atau hidden unit dari satu contoh. Layer norm tidak bergantung pada ukuran batch dan berperilaku sama saat training dan inference, sehingga cocok untuk transformer dan recurrent network.
Batch normalization sebaiknya sebelum atau sesudah aktivasi?
Paper aslinya menaruhnya sebelum aktivasi, tepat setelah linear layer atau convolutional layer, dan itu pilihan paling umum. Menaruhnya setelah aktivasi juga bisa, dan kadang hasilnya sedikit lebih baik. Pilihan ini jarang banyak mengubah hasil.
Bisakah batch normalization dipakai bersama dropout?
Bisa, tetapi keduanya bisa saling mengganggu: dropout mengubah varians aktivasi antara training dan inference, sehingga statistik yang diandalkan BN ikut bergeser. Network yang memakai BN sering hanya butuh sedikit dropout atau tidak sama sekali. Kalau keduanya dipakai, dropout biasanya ditaruh setelah layer BN terakhir.
Kenapa model dengan batch norm lebih buruk dalam mode evaluasi?
Dalam mode evaluasi, BN memakai running average, bukan statistik batch. Kalau running average itu buruk, misalnya setelah sangat sedikit training step, setelah fine-tuning pada data yang berbeda, atau dengan momentum yang terlalu rendah, output akan bergeser. Biasanya masalah ini beres dengan menghitung ulang running statistics pada data training.
Penjelasan terkait
- Feature Scaling · Kenapa dan bagaimana menormalkan feature agar lebih cepat konvergen
- Vanishing dan Exploding Gradient · Kenapa deep network sulit dilatih dan cara mengatasinya
- Inisialisasi Weight · Xavier, He, dan kenapa weight acak itu penting
- Activation Function · Kenapa network butuh sifat non-linear untuk belajar
- Convolutional Neural Network · Cara CNN melihat dan memahami gambar
- Skip Connection & ResNet · Residual learning dan alasan network yang lebih dalam bisa bekerja
Referensi
- Ioffe & Szegedy (2015), "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"
- Santurkar et al. (2018), "How Does Batch Normalization Help Optimization?"
- Zhang et al., "Dive into Deep Learning", section 8.5: Batch Normalization
Terakhir diperbarui