Inisialisasi bobot
Kembalikan simpangan baku untuk inisialisasi normal bobot sebuah layer dengan fan_in input dan fan_out output:
| mode | std | cocok untuk |
|---|---|---|
"xavier" | 2/(fan_in+fan_out) | tanh, sigmoid |
"kaiming" | 2/fan_in | ReLU |
"lecun" | 1/fan_in | linear, SELU |
init_std(100, 100, "xavier") → 0.1
Masalahnya
Satu neuron menjumlahkan fan_in suku wixi. Jika w dan x independen dengan rata-rata 0:
Jika Var(w) terlalu besar, varians aktivasi berlipat di setiap layer dan meledak. Jika terlalu kecil, aktivasi mengecil sampai nol. Di jaringan 50 layer, faktor 1.1 per layer sudah berarti 1.150≈117.
Solusinya
Pilih Var(w)=1/fan_in supaya Var(z)=Var(x) (LeCun). ReLU membuang separuh sinyal (bagian negatif), jadi Kaiming mengalikannya dengan 2. Xavier merata-rata fan_in dan fan_out supaya varians terjaga di arah forward dan backward.
Di GPT
GPT-2 memakai std 0.02 untuk hampir semua bobot, lalu mengecilkan proyeksi residual dengan faktor 1/2L. Tanpa itu, penjumlahan L blok residual akan membuat varians tumbuh sebanding dengan kedalaman.
Penjelasan
Yang diminta. Simpangan baku inisialisasi untuk tiga skema, dari fan_in dan fan_out.
Asal rumusnya. Satu neuron menjumlahkan fan_in suku wixi. Jika semuanya independen dengan rata-rata 0, varians jumlahnya adalah jumlah variansnya:
Supaya sinyal tidak membesar atau mengecil dari layer ke layer, kita ingin Var(z)=Var(x):
- LeCun: Var(w)=1/fan_in, jadi
std = sqrt(1 / fan_in). - Kaiming (He): ReLU membuang separuh sinyal, jadi variansnya digandakan:
std = sqrt(2 / fan_in). - Xavier (Glorot): menjaga varians di arah forward (
fan_in) dan backward (fan_out), sehingga memakai rata-rata keduanya:std = sqrt(2 / (fan_in + fan_out)).
Langkah di kode: tiga if yang mengembalikan rumus masing-masing, plus raise ValueError untuk mode yang tidak dikenal.
Cek. Xavier (100, 100): 2/200=0.1. Kaiming 512: 2/512=0.0625.
Yang dikembalikan: satu float.
Topik
Petunjuk 1
Xavier (Glorot): std = √(2 / (fan_in + fan_out)).
Petunjuk 2
Kaiming (He): std = √(2 / fan_in). LeCun: std = √(1 / fan_in).
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.