Inisialisasi bobot lebih berat CNN

14

Dalam beberapa tutorial saya menemukan dinyatakan bahwa "Xavier" inisialisasi berat (kertas: Memahami kesulitan pelatihan deep feedforward neural networks ) adalah cara yang efisien untuk menginisialisasi bobot jaringan saraf.

Untuk lapisan yang sepenuhnya terhubung ada aturan praktis dalam tutorial tersebut:

Var(W)=2nin+nout,simpler alternative:Var(W)=1nin

di mana adalah varians dari bobot untuk sebuah layer, diinisialisasi dengan distribusi normal dan , adalah jumlah neuron di induk dan di layer saat ini.Var(W)ninnout

Apakah ada aturan praktis yang sama untuk lapisan konvolusional?

Saya berjuang untuk mencari tahu apa yang terbaik untuk menginisialisasi bobot lapisan konvolusional. Misal dalam lapisan di mana bentuk bobotnya (5, 5, 3, 8), jadi ukuran kernelnya adalah 5x5, menyaring tiga saluran input (input RGB) dan membuat 8peta fitur ... akan 3dianggap jumlah neuron input? Atau lebih tepatnya 75 = 5*5*3, karena inputnya adalah 5x5tambalan untuk setiap saluran warna?

Saya akan menerima keduanya, jawaban spesifik yang menjelaskan masalah atau jawaban yang lebih "umum" yang menjelaskan proses umum untuk menemukan inisialisasi bobot yang tepat dan lebih baik menghubungkan sumber.

daniel451
sumber

Jawaban:

13

Dalam hal ini jumlah neuron seharusnya 5*5*3.

Saya menemukan ini sangat berguna untuk lapisan convolutional. Seringkali distribusi seragam selama interval berfungsi. [c/(in+out),c/(in+out)]

Ini diimplementasikan sebagai opsi di hampir semua perpustakaan jaringan saraf. Di sini Anda dapat menemukan kode sumber implementasi Keras inisialisasi Xavier Glorot.

dontloo
sumber
1
Hmm..apakah Anda memiliki saran tambahan? Misalnya salah satu jaringan saya memiliki lapisan yang sepenuhnya terhubung dengan 480.000 neuron. Jika saya menerapkan inisialisasi Xavier saya berakhir dengan varian kira-kira dan jaringan saya hanya belajar beberapa pola interferensi aneh. Saya kira itu jatuh ke minimum lokal. Maksud saya bobotnya sangat kecil. Saya kebanyakan mengalami pembelajaran yang masuk akal dengan sesuatu dalam interval . Ada ide tentang itu? Saya pikir inisialisasi Xavier tidak berlaku untuk lapisan yang sangat besar? 1106[0.1,0.01]
daniel451
@ascenator maaf saya tidak tahu banyak tentang bagaimana perubahan bobot selama pelatihan. terkadang hasil yang aneh mungkin berasal dari tingkat pembelajaran yang terlalu besar / kecil.
dontloo
Banyak perpustakaan DL mengambil istilah standar deviasi, bukan istilah varians, sebagai parameter untuk metode pembuatan angka acak mereka. Jadi untuk varian , Anda memerlukan standar deviasi , yang mungkin menjelaskan hasil Anda. 106103
eric.mitchell
0

Saya kedua jawaban Eric di sini. Saya juga mengambil "sqrt" dari istilah dan bukan hanya istilah itu. Terlepas dari itu, ketika Anda menghubungkan sigmoid jauh di internet Anda ke "RelU" output .... itu dapat menyebabkan pelatihan terhenti. Ini karena output "Relu" tanpa batas yang dapat membuat gradien pada sigmoid turun menjadi 0 dan tidak ada pembelajaran yang terjadi. Jadi, dalam kasus ini, saya memiliki faktor "scaleDown" untuk jaring saya yang akan mengurangi penyimpangan inisialisasi oleh faktor itu. Saya terus mengatur bobot secara empiris sampai pembelajaran terjadi. Cara mudah untuk menemukannya adalah dengan menyimpan model segera setelah 1 iterasi dan melihat output RELU (yang terhubung ke sigmoid). Terus tuning bobot sampai output RELU ini masuk akal. Dan kemudian gunakan bobot itu untuk pelatihan. Ini awal yang bagus. Jika masih runtuh setelah beberapa iterasi, timbang mereka sedikit lebih banyak sampai Anda mencapai stabilitas. Ini hanya hack yang saya gunakan. Ini bekerja untuk saya untuk pengaturan saya. Jadi bagikan pengalaman saya. Berbagai hal bekerja untuk pengaturan yang berbeda.

Jadi ... Semoga Sukses!

Sarnath K
sumber