Apa itu inisialisasi weight pada neural network?
Inisialisasi weight adalah pilihan nilai awal weight neural network sebelum training dimulai. Skema yang baik mengambil nilai acak kecil dengan varians yang disesuaikan dengan ukuran setiap layer, sehingga besar aktivasi dan gradient tetap stabil dari layer ke layer. Pilihan yang buruk membuat semua neuron identik, atau membuat sinyal menyusut ke nol atau membesar tanpa batas saat melewati network.
Setiap framework menerapkan initializer secara default, dan pilihannya paling berpengaruh pada network yang dalam. Inisialisasi Xavier (Glorot) menjadi standar untuk layer tanh dan sigmoid, sedangkan inisialisasi He (Kaiming) untuk layer ReLU. Transformer umumnya memakai inisialisasi normal kecil, dan proyeksi residual kadang diperkecil lagi sesuai kedalaman, seperti pada GPT-2.
Ide utama
- Weight awal yang identik membuat neuron identik, dan gradient descent tidak bisa memisahkannya.
- Weight acak memecah simetri itu, tetapi skalanya harus sesuai dengan ukuran layer.
- Varians weighted sum sebuah neuron tumbuh seiring jumlah input yang diterimanya.
- Menskalakan varians weight dengan 1/n_in menjaga besar aktivasi tetap stabil antar-layer.
- Inisialisasi Xavier cocok untuk tanh dan sigmoid, sedangkan inisialisasi He cocok untuk ReLU.
- Bias biasanya diinisialisasi dengan nol.
Pertanyaan umum
Apa bedanya inisialisasi Xavier dan He?
Xavier menetapkan varians weight ke 2/(n_in + n_out), yang cocok untuk aktivasi yang kira-kira linear di dekat nol, seperti tanh. He menetapkannya ke 2/n_in, dua kali lebih besar dari 1/n_in milik LeCun, untuk menutup bagian negatif input yang dibuang ReLU. Memakai Xavier pada network ReLU yang dalam membuat aktivasi menyusut di setiap layer.
Inisialisasi apa yang dipakai PyTorch secara default?
Layer nn.Linear dan nn.Conv di PyTorch memakai skema Kaiming-uniform dengan a=√5, yang menghasilkan distribusi uniform pada ±1/√n_in untuk weight. Bias diambil secara uniform dari rentang yang sama. Banyak codebase model menggantinya dengan inisialisasi Xavier, He, atau normal kecil secara eksplisit.
Sebaiknya memakai distribusi normal atau uniform?
Keduanya bisa dipakai asalkan variansnya benar. Inisialisasi normal dan uniform dengan varians yang sama memberi hasil yang sangat mirip. Sebagian codebase memakai truncated normal, yang mengambil ulang nilai di luar dua standar deviasi, untuk menghindari weight besar yang jarang muncul.
Apakah inisialisasi weight masih berpengaruh kalau memakai batch normalization?
Pengaruhnya lebih kecil, karena batch normalization menskalakan ulang aktivasi setiap layer berapa pun skala weight-nya. Inisialisasi tetap memengaruhi langkah training paling awal dan layer tanpa normalisasi. Residual network juga terbantu oleh trik khusus, seperti memulai layer terakhir setiap blok dari nol sehingga blok itu dimulai sebagai fungsi identitas.
Penjelasan terkait
- Activation Function · Kenapa network butuh sifat non-linear untuk belajar
- Vanishing dan Exploding Gradient · Kenapa deep network sulit dilatih dan cara mengatasinya
- Batch Normalization · Kenapa normalisasi aktivasi mempercepat training deep network
- Backpropagation · Cara network belajar dari kesalahannya
- Neural Network · Cara neuron dan layer mengenali gambar
- Skip Connection & ResNet · Residual learning dan alasan network yang lebih dalam bisa bekerja
Referensi
- Glorot & Bengio (2010), "Understanding the difficulty of training deep feedforward neural networks", AISTATS
- He et al. (2015), "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification"
- Saxe, McClelland & Ganguli (2013), "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks"
- Zhang et al., "Dive into Deep Learning", section 5.4: Numerical Stability and Initialization
Terakhir diperbarui