Materi
Sebelum pelatihan dimulai, setiap bobot harus diberi nilai awal, dan Dive into Deep Learning §5.4 menunjukkan dua cara gagal. Pertama, semua bobot lapis tersembunyi diisi konstanta yang sama. Setiap neuron lalu menerima masukan dan bobot yang sama, menghasilkan aktivasi yang sama, dan menerima gradien yang sama, sehingga setelah berapa pun langkah gradient descent neuron-neuron itu tetap kembar. Simetri ini baru pecah bila bobot awalnya acak. Kedua, skala acaknya keliru: d2l mengalikan 100 matriks acak bersimpangan baku 1 dan hasilnya meledak, sedangkan skala yang terlalu kecil membuat sinyal dan gradien menyusut ke nol.
Inisialisasi Xavier (Glorot dan Bengio, 2010) memilih varians yang menjaga skala sinyal maju dan gradien mundur: σ² = 2 / (n_in + n_out), dengan n_in banyak masukan dan n_out banyak keluaran lapisan. Versi seragamnya mengambil bobot dari U(−a, a) dengan a = √(6 / (n_in + n_out)), karena varians sebaran seragam U(−a, a) adalah a²/3. Deep Learning bab 8.4 menulis rumus seragam yang sama.
Penurunan Xavier mengandaikan lapisan tanpa aktivasi. ReLU membuang semua bagian negatif, sehingga He, Zhang, Ren, dan Sun (2015, §2.2) menggandakan variansnya: bobot diambil dari sebaran Gaussian bermean 0 dengan simpangan baku √(2 / n_in), dan bias diisi 0. Di numpy, generator yang hasilnya bisa diulang dibuat dengan np.random.default_rng(seed), dan rng.normal(loc, scale, size) mengambil bilangan Gaussian dengan scale sebagai simpangan bakunya.
import numpy as np
# Xavier normal untuk lapisan 10 -> 5
rng = np.random.default_rng(3)
sd = np.sqrt(2 / (10 + 5)) # 0.365
W = rng.normal(0.0, sd, size=(10, 5))
print(W.shape, round(sd, 3))