Idenya adalah bahwa Anda ingin menginisialisasi bobot dengan cara yang memastikan aliran data maju dan mundur yang baik melalui jaringan. Artinya, Anda tidak ingin aktivasi secara konsisten menyusut atau meningkat saat Anda maju melalui jaringan.
Gambar ini menunjukkan aktivasi ReLU Multi-Layer Perceptron 5 layer di bawah 3 strategi inisialisasi yang berbeda setelah satu kali lulus MNIST melalui jaringan.
Dalam ketiga kasus, bobot diambil dari distribusi normal berpusat nol yang ditentukan oleh standar deviasi. Anda dapat melihat bahwa jika bobot awal terlalu kecil (standar deviasi kecil) aktivasi menjadi tersendat, dan jika terlalu besar aktivasi akan meledak. Nilai tengah, yang kira-kira tepat dapat ditemukan dengan mengatur bobot sedemikian rupa sehingga varians dari aktivasi dan pembaruan gradien tetap kira-kira sama seperti ketika Anda melewati jaringan.
Saya menulis posting blog tentang inisialisasi bobot yang lebih detail, tetapi ide dasarnya adalah sebagai berikut.
Jika menunjukkan aktivasi lapisan ke- , ukuran layer, dan bobot yang menghubungkannya ke lapisan -1 , maka satu dapat menunjukkan bahwa untuk fungsi aktivasi dengan kita milikix(i)iniw(i)(i+1)ff′(s)≈1
Var(x(i+1))=niVar(x(i))Var(w(i))
Untuk mencapai kita harus memaksakan kondisi tersebutVar(x(i+1))=Var(x(i))
Var(w(i))=1ni.
Jika kita menyatakan oleh , di bagian belakang kita juga ingin∂L∂x(i)jΔ(i)j
Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).
Kecuali , kita harus berkompromi antara kedua kondisi ini, dan pilihan yang masuk akal adalah mean harmonikni=ni+1
Var(w(i))=2ni+ni+1.
Jika kita mengambil sampel dari distribusi normal kami memenuhi persyaratan ini dengan . Untuk distribusi seragam kita harus mengambil karena . Kami telah tiba di inisialisasi Glorot. Ini adalah strategi inisialisasi default untuk lapisan konvolusi padat dan 2D di Keras, misalnya.N(0,σ)σ=2ni+ni+1−−−−−√U(−a,a)a=6ni+ni+1−−−−−√Var(U(−a,a))=a2/3
Inisialisasi Glorot berfungsi cukup baik untuk aktivasi sepele dan , tetapi tidak berfungsi dengan baik untuk . Untungnya, karena hanya mengeluarkan nol input negatif, ia secara kasar menghapus setengah varians dan ini mudah diubah dengan mengalikan salah satu kondisi kami di atas dengan dua:tanhReLUf(s)=ReLU(s)
Var(w(i))=2ni.