Lensa ML

Cara Kerja Inisialisasi Weight

Langkah 1 dari 5: Inisialisasi Konstan

Kenapa nol dan satu sama-sama gagal sebagai weight awal

Ketuk node untuk melihat hitungannyaInputHidden 1Hidden 2Output0.80-0.500.300.290.290.290.290.520.520.520.520.780.78semua identiksemua identiksemua identik

Weight

0.50

Nilai H1

0.291

Nilai H2

0.525

Unik di output

1

Semua weight identik → setiap neuron dalam satu layer menjadi kembaran. Gradient-nya juga identik, jadi mereka tetap kembar setelah setiap update. Nilai acak dibutuhkan untuk memecah simetri ini.

Geser weight konstan dari 0 ke 2 dan ketuk node mana saja untuk melihat hitungannya. Kegagalan ini punya nama: simetri. Kalau dua neuron dalam satu layer mulai dengan weight masuk dan keluar yang sama, keduanya menghitung output yang sama dan menerima gradient yang sama. Setelah setiap update keduanya tetap identik, jadi layer selebar n berperilaku seperti satu neuron. Bias berbeda. Memulai semua bias dari nol adalah hal yang standar dan tidak bermasalah, karena weight acak sudah membuat neuron berbeda.

Langkah 2 dari 5: Inisialisasi Acak

Nilai acak mengalahkan konstanta, tetapi skalanya menentukan

Ketuk node untuk melihat hitungannya0.80-0.500.300.02-0.480.210.00-0.130.06-0.05-0.310.150.144/4 unik4/4 unik2/2 unikInputHidden 1Hidden 2OutputDistribusi aktivasi (60 input melewati network yang sama)InputHidden 1Hidden 2OutputBesar gradient (backward pass ←)0.3220.4920.6521.000

Batas

0.50

H1 Std

0.385

H2 Std

0.238

Grad @ Input

0.322

Simetri sudah pecah. Setiap neuron menghitung nilai berbeda (lihat network di atas), dan histogram tetap punya sebaran sehat di semua layer. Namun, batas yang tetap mengabaikan lebar layer, jadi layer yang lebih lebar butuh aturan yang bisa menyesuaikan.

Geser batas uniform dari 0,01 ke 3, lalu perhatikan histogram layer dan kartu gradient. Masalah skala punya penyebab sederhana. Satu neuron menjumlahkan n input yang sudah dikali weight. Kalau input dan weight saling bebas dengan rata-rata nol, varians jumlah itu adalah n·Var(w)·Var(x). Dengan batas tetap seperti ±0,5, varians output tumbuh sebanding dengan lebar layer. Pengaturan yang cocok untuk 10 input membuat semua unit tanh jenuh ketika layer punya 1.000 input.

Langkah 3 dari 5: Aturan 1/√n

Resep sederhana yang menyesuaikan inisialisasi dengan lebar layer

32 → 32 → 32 → 32 → 32 → 32(1/√n = 0.177, 0.177, 0.177, 0.177, 0.177)
Ketuk layer untuk melihat hitungan neuron×w×w×w×w×w32Input32L132L232L332L432L5Naif: W ~ U[-0.5, 0.5] (skala tetap, mengabaikan lebar layer)L1 (32)std=0.756L2 (32)std=0.699L3 (32)std=0.650L4 (32)std=0.645L5 (32)std=0.643Resep: W ~ U[-1/√nᵢₙ, 1/√nᵢₙ] (menyesuaikan tiap layer)L1 (32)std=0.476L2 (32)std=0.263L3 (32)std=0.144L4 (32)std=0.079L5 (32)std=0.047

Bentuk

Seragam

Lebar

32→​32→​32→​32→​32

Std L5 Naif

0.643

Std L5 Resep

0.047

Resep y = 1/√n menskalakan inisialisasi sesuai lebar layer. Sampling Uniform menjaga aktivasi tetap stabil (L5 std = 0.047), sedangkan uniform naif melenceng (L5 std = 0.643).

Geser lebar dasar dari 8 ke 64 dan ganti-ganti bentuk Seragam, Menyempit, dan Melebar. Menetapkan Var(w) = 1/n menghapus n pada n·Var(w)·Var(x), sehingga setiap layer meneruskan kira-kira varians yang diterimanya. Penskalaan 1/√n ini berasal dari "Efficient BackProp" karya LeCun dkk. (1998) dan sering disebut inisialisasi LeCun. Distribusi uniform pada [−a, a] punya varians a²/3. Jadi, agar sampel uniform cocok dengan varians target, batasnya harus √3 kali standar deviasi target.

Langkah 4 dari 5: Xavier, He, dan Aktivasi

Metode bernama yang disetel untuk activation function tertentu

16 → 16 → 16 → 16 → 16 → 16
Ketuk layer untuk melihat hitungan neuron×w×w×w×w×w16Input16L116L216L316L416L5Xavier: W ~ N(0, 2/(nᵢₙ+nₒᵤₜ))L1std=0.638L2std=0.475L3std=0.399L4std=0.361L5std=0.329He: W ~ N(0, 2/nᵢₙ)L1std=0.726L2std=0.618L3std=0.582L4std=0.589L5std=0.576

Bentuk

Seragam

Lebar

16→​16→​16→​16→​16

Std Akhir Xavier

0.329

Std Akhir He

0.576

Xavier dan He sama-sama variasi dari aturan 1/√n. Masing-masing punya dua versi: Normal (sampel dari distribusi Gauss) dan Uniform (sampel dari distribusi datar dengan varians yang sama). Saat ini memakai Normal: Xavier ~ N(0, √(2/(n_in+n_out))), He ~ N(0, √(2/n_in)). Xavier (Glorot, 2010) merata-ratakan fan-in dan fan-out untuk aktivasi simetris (tanh, sigmoid). He (Kaiming, 2015) hanya memakai fan-in dengan faktor ×2 untuk ReLU. Dengan tanh: std terakhir Xavier = 0.329, std terakhir He = 0.576.

Ganti aktivasi antara tanh dan relu, lalu bandingkan dua standar deviasi layer terakhir. Glorot dan Bengio (2010) menyeimbangkan dua tujuan: menjaga varians aktivasi tetap stabil pada forward pass (Var(w) = 1/n_in) dan varians gradient tetap stabil pada backward pass (Var(w) = 1/n_out). Komprominya adalah 2/(n_in + n_out). He dkk. (2015) mencatat bahwa ReLU membuat sekitar separuh input-nya menjadi nol, sehingga varians berkurang separuh di setiap layer. Menggandakan varians menjadi 2/n_in menutup kekurangan itu, dan cara ini membuat mereka bisa melatih network ReLU 30 layer dari nol.

Langkah 5 dari 5: Perbandingan Training

Lihat pengaruh inisialisasi yang berbeda pada proses belajar sebenarnya

Arsitektur: 1 → 16 → 16 → 1 (ReLU, MSE loss, mini-batch SGD)1InputReLU16Hidden 1ReLU16Hidden 2linear1OutputTugas: pelajari y = sin(x) dari 16 titik data
Epoch 0
0.520.21Epoch trainingLoss0.290.370.44
NolKonst 0.1Acak1/√n
Distribusi weight (1/√n, epoch ~0)

Epoch

0

1/√n Loss

0.378

Terbaik

Konst 0.1

Std weight

0.191

Resep 1/√n → konvergensi tercepat (loss = 0.378). Distribusi weight tetap berpusat dekat nol dengan sebaran terkendali. Penskalaan yang memperhitungkan lebar memberi awal terbaik di antara keempatnya.

Pilih tiap metode dan tekan Putar, atau geser slider epoch, pada lebar network yang berbeda. Network-nya 1 → lebar → lebar → 1 dengan ReLU, dilatih pada 16 titik y = sin(x) selama 80 epoch. Opsi Konst 0.1 memulai semua weight dari 0,1. Memulai dari 1 akan mendorong loss epoch pertama di atas 100.000 pada lebar 16. Di network kecil ini, resep 1/√n mencapai loss terendah di semua lebar, dan weight acak naif ±0,3 baru menyusul di dekat lebar 30. Batch normalization dan residual connection mengurangi kepekaan deep network terhadap pilihan ini, tetapi tidak menghilangkannya.

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

Referensi

  1. Glorot & Bengio (2010), "Understanding the difficulty of training deep feedforward neural networks", AISTATS
  2. He et al. (2015), "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification"
  3. Saxe, McClelland & Ganguli (2013), "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks"
  4. Zhang et al., "Dive into Deep Learning", section 5.4: Numerical Stability and Initialization

Terakhir diperbarui