Saya baru saja mendengar, bahwa itu adalah ide yang baik untuk memilih bobot awal dari jaringan saraf dari jangkauan , di mana adalah jumlah input ke neuron yang diberikan. Diasumsikan, bahwa himpunan dinormalisasi - rata-rata 0, varian 1 (tidak tahu apakah ini penting).
Mengapa ini ide yang bagus?
Jawaban:
Saya berasumsi Anda menggunakan neuron logistik, dan bahwa Anda dilatih oleh gradient descent / back-propagation.
Fungsi logistik dekat dengan rata untuk input positif atau negatif yang besar. Turunannya pada input adalah sekitar , tetapi pada turunannya sekitar . Ini berarti bahwa jika input neuron logistik adalah maka, untuk sinyal pelatihan yang diberikan, neuron akan belajar sekitar kali lebih lambat bahwa jika inputnya .2 1/10 10 1/22000 10 2200 2
Jika Anda ingin neuron belajar dengan cepat, Anda perlu menghasilkan sinyal pelatihan yang sangat besar (seperti dengan fungsi kehilangan lintas-entropi) atau Anda ingin turunannya menjadi besar. Untuk membuat turunannya besar, Anda mengatur bobot awal sehingga Anda sering mendapatkan input dalam kisaran .[−4,4]
Bobot awal yang Anda berikan mungkin atau mungkin tidak berfungsi. Itu tergantung pada bagaimana input dinormalisasi. Jika input dinormalisasi untuk memiliki rata-rata dan standar deviasi , maka jumlah acak dari istilah dengan bobot seragam di akan memiliki rata-rata dan varians , terlepas dari . Probabilitas bahwa Anda mendapatkan jumlah di luar kecil. Itu berarti ketika Anda meningkatkan , Anda tidak menyebabkan neuron mulai jenuh sehingga mereka tidak belajar.0 1 d (−1d√,1d√) 0 13 d [−4,4] d
Dengan input yang tidak dinormalisasi, bobot tersebut mungkin tidak efektif dalam menghindari kejenuhan.
sumber
[1] menjawab pertanyaan:
Pertama, bobot tidak boleh diatur ke nol untuk memecah simetri ketika memprogram kembali:
Beberapa strategi inisialisasi:
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
kemudian digunakanu
sebagai matriks inisialisasi Anda.Juga, pra-pelatihan tanpa pengawasan dapat membantu dalam beberapa situasi:
Beberapa perpustakaan ANN juga memiliki beberapa daftar menarik, misalnya Lasagna :
[1] Bengio, Yoshua. " Rekomendasi praktis untuk pelatihan arsitektur mendalam berbasis gradien. " Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB, dan Muller, K. (1998a). Backprop yang efisien. Dalam Jaringan Saraf Tiruan, Trik Perdagangan .
[3] Glorot, Xavier, dan Yoshua Bengio. " Memahami kesulitan melatih jaringan saraf umpan dalam yang mendalam ." Konferensi internasional tentang kecerdasan buatan dan statistik. 2010
sumber
Penjelasan berikut diambil dari buku: Neural Networks for Pattern Recognition oleh Christopher Bishop. Buku bagus! Asumsikan Anda sebelumnya memutihkan input ke unit input, yaitu dan
Pertanyaannya adalah: bagaimana cara terbaik memilih bobot ?. Idenya adalah untuk memilih nilai bobot secara acak mengikuti distribusi yang membantu proses optimasi untuk menyatu ke solusi yang bermakna.
Anda memiliki untuk aktivasi unit di lapisan pertama, mana . Sekarang, karena Anda memilih bobot secara independen dari input, dan mana sigma adalah varian dari distribusi bobot. Untuk memperoleh hasil ini, Anda perlu mengingat bahwa bobot diinisialisasi secara independen satu sama lain, yaitu
sumber
Baik hanya sebagai pembaruan, Menggali Jauh ke Penyearah: Melampaui Kinerja Level Manusia n Klasifikasi ImageNet oleh He et al memperkenalkan inisialisasi khusus dengan inisialisasi di
w = U([0,n]) * sqrt(2.0/n)
manan
adalah jumlah input NN Anda. Saya telah melihat inisialisasi ini digunakan dalam banyak karya terbaru (juga dengan ReLU). Mereka benar-benar menunjukkan bagaimana ini mulai mengurangi tingkat kesalahan jauh lebih cepat daripada (-1 / n, 1 / n) yang Anda sebutkan. Untuk penjelasan menyeluruh, lihat makalahnya, tetapi berikut ini seberapa cepat konvergennya:sumber
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) i ni w(i) (i+1) f f′(s)≈1
Untuk mencapai kita harus memaksakan kondisi tersebutVar(x(i+1))=Var(x(i))
Jika kita menyatakan oleh , di bagian belakang kita juga ingin∂L∂x(i)j Δ(i)j
Kecuali , kita harus berkompromi antara kedua kondisi ini, dan pilihan yang masuk akal adalah mean harmonikni=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:tanh ReLU f(s)=ReLU(s)
sumber
Salah satu teknik lain yang meringankan masalah inisialisasi berat badan adalah Normalisasi Batch . Kerjanya untuk membakukan rata-rata dan varians dari setiap unit untuk menstabilkan pembelajaran seperti yang dijelaskan dalam makalah asli . Dalam praktiknya, jaringan yang menggunakan Normalisasi Batch (BN) secara signifikan lebih kuat untuk inisialisasi buruk. BN berfungsi sebagai berikut: Kami menghitung mean dan varians empiris untuk setiap mini-batch, kemudian kami menstandarisasi input dan bentuk output dengan penskalaan
BN memperkenalkan dua parameter tambahan ( dan ) per aktivasi yang memungkinkan memiliki mean dan standar deviasi. Alasan untuk itu adalah normalisasi dapat mengurangi kekuatan ekspresifnya. Parameterisasi baru ini memiliki dinamika pembelajaran yang lebih baik: dalam parameterisasi lama rata-rata ditentukan oleh interaksi yang rumit antara parameter semua lapisan sebelumnya - perubahan kecil pada parameter jaringan menguat ketika jaringan menjadi lebih dalam. Dalam parameterisasi baru rata-rata ditentukan oleh yang kita pelajari bersama denganγ β x^i xi xi x^i β γ selama pelatihan. Dengan demikian, Normalisasi Batch menstabilkan pembelajaran.
Sebagai hasilnya, Normalisasi Batch memungkinkan pelatihan yang lebih cepat dengan menggunakan tingkat pembelajaran yang jauh lebih tinggi dan meringankan masalah inisialisasi yang buruk. BN juga memungkinkan untuk menggunakan saturasi non-linearitas dengan mencegah jaringan dari terjebak dalam mode saturasi. Singkatnya, Normalisasi Batch adalah transformasi terdiferensiasi yang memperkenalkan aktivasi yang dinormalisasi ke dalam jaringan. Dalam praktiknya, lapisan BN dapat dimasukkan segera setelah lapisan yang sepenuhnya terhubung.
sumber