Apa manfaat dari distribusi normal terpotong dalam menginisialisasi bobot dalam jaringan saraf?

13

Ketika menginisialisasi bobot koneksi dalam jaringan saraf feedforward, penting untuk menginisialisasi mereka secara acak untuk menghindari simetri yang tidak dapat dipecahkan oleh algoritma pembelajaran.

Rekomendasi yang saya lihat di berbagai tempat (misalnya dalam tutorial MNIST TensorFlow ) adalah menggunakan distribusi normal terpotong menggunakan standar deviasi , di manaNadalah jumlah input ke lapisan neuron yang diberikan.1NN

Saya percaya bahwa standar deviasi formula memastikan bahwa gradien backpropagated tidak larut atau menguatkan terlalu cepat. Tetapi saya tidak tahu mengapa kami menggunakan distribusi normal terpotong sebagai lawan dari distribusi normal biasa. Apakah itu untuk menghindari bobot outlier yang jarang?

MiniQuark
sumber
Bisakah Anda memberikan sumber rekomendasi ini dan / atau kutipan langsung?
Tim
+ Poin Tim Bagus, saya menambahkan tautan ke contoh. Saya percaya saya juga melihat rekomendasi ini di sebuah makalah tentang praktik yang baik jaringan saraf (tidak dapat menemukannya, meskipun).
MiniQuark

Jawaban:

13

Saya pikir ini tentang saturasi neuron. Pikirkan tentang Anda memiliki fungsi aktivasi seperti sigmoid.

masukkan deskripsi gambar di sini

Jika val berat Anda mendapat nilai> = 2 atau <= - 2 neuron Anda tidak akan belajar. Jadi, jika Anda memotong distribusi normal Anda, Anda tidak akan memiliki masalah ini (setidaknya dari inisialisasi) berdasarkan varians Anda. Saya pikir itu sebabnya, lebih baik menggunakan terpotong normal pada umumnya.

Güngör Basa
sumber
Ya, itu masuk akal, terima kasih. Saya pikir Anda berarti "nilai> = 2", bukan 1.
MiniQuark
ya itu seharusnya bernilai> = 2
Güngör Basa
4

Manfaat menggunakan distribusi normal terpotong adalah untuk mencegah menghasilkan "neuron mati" karena relu_logits yang digunakan, yang dijelaskan di sini .

Satu umumnya harus menginisialisasi bobot dengan sejumlah kecil kebisingan untuk pemecahan simetri, dan untuk mencegah 0 gradien. Karena kita menggunakan neuron ReLU, itu juga praktik yang baik untuk menginisialisasi mereka dengan bias awal yang sedikit positif untuk menghindari "neuron mati".

Lerner Zhang
sumber
Saya tidak yakin bagaimana menggunakan truncated_normal akan mencegah neuron mati: ia tidak akan menambahkan "bias awal yang sedikit positif". Bisakah Anda jelaskan?
MiniQuark
1
karena backpropagation hanya akan memperbarui neuron 'hidup', dengan beberapa kontribusi nol untuk propagasi
Jason