Bahaya mengatur semua bobot awal ke nol di Backpropagation

30

Mengapa berbahaya untuk menginisialisasi bobot dengan nol? Apakah ada contoh sederhana yang menunjukkannya?

pengguna8078
sumber
Tampaknya jaring XOR 2-1 klasik adalah contoh yang baik, tetapi saya akan menghargai beberapa alasan teoretis.
user8078
1
Jawaban yang sangat umum, yang mungkin atau mungkin tidak berlaku di sini, adalah bahwa setiap kali bobot baru adalah kelipatan bobot lama, maka bobot nol tidak dapat diubah. Itu fatal untuk belajar.
Nick Cox
Sudah ada jawaban bagus yang tersedia mengapa tidak menginisialisasi bobot ke nol. Tautan berikut menyoroti lebih lanjut tentang 'bagaimana bobot awal harus dipilih?' staff.itee.uq.edu.au/janetw/cmc/chapters/BackProp/index2.html Semoga ini membantu pembaca lain.
doer_uvc
@NickCox bobot di sini adalah kelipatan dari lapisan bobot berikutnya, dan lapisan terakhir bukan kelipatan dari bobot lain - jadi ini tidak berlaku di sini.
David Refaeli

Jawaban:

21

sunting lihat komentar alfa di bawah ini. Saya bukan ahli jaring saraf, jadi saya akan tunduk padanya.

Pemahaman saya berbeda dari jawaban lain yang telah diposting di sini.

Saya cukup yakin bahwa backpropagation melibatkan penambahan bobot yang ada, bukan bertambah banyak. Jumlah yang Anda tambahkan ditentukan oleh aturan delta . Perhatikan bahwa wij tidak muncul di sisi kanan persamaan.

Pemahaman saya adalah bahwa setidaknya ada dua alasan bagus untuk tidak menetapkan bobot awal menjadi nol:

  • Pertama, jaringan saraf cenderung terjebak dalam minimum lokal, jadi itu ide yang baik untuk memberi mereka banyak nilai awal yang berbeda. Anda tidak dapat melakukan itu jika semuanya dimulai dari nol.

  • Kedua, jika neuron mulai dengan bobot yang sama, maka semua neuron akan mengikuti gradien yang sama, dan akan selalu berakhir melakukan hal yang sama satu sama lain.

David J. Harris
sumber
6
"Jumlah yang Anda tambahkan ditentukan oleh aturan delta. Perhatikan bahwa wij tidak muncul di sisi kanan persamaan." - Ini hanya berlaku untuk jaringan saraf tanpa lapisan tersembunyi! Tapi Anda menyebutkan dua poin lain, itu adalah argumen yang bagus untuk tidak menginisialisasi JST dengan bobot yang sama .
alfa
1
Saya pikir ini terutama alasan kedua - misalnya dalam jaringan feed-forward dasar yang terhubung penuh, jika setiap lapisan diinisialisasi dengan bobot yang sama, maka seperti yang Anda sarankan, semua node mengikuti jalur yang sama dan berlebihan. Kesan saya adalah sebagian besar jaringan dengan lebih dari beberapa fitur tidak akan kesulitan dengan minimum lokal. Juga, inisialisasi acak saja tidak mencegah jaringan macet, tetapi berulang kali menggunakan inisialisasi acak yang berbeda akan memberi tahu Anda apakah iterasi tertentu memiliki masalah minimum lokal (saya pikir ini tersirat, tetapi tidak eksplisit).
Tahlor
alasan ke-2 salah? open.wolframcloud.com/env/…
user3180
input yang berbeda memecah simetri berat
user3180
Anda menambahkan turunannya, dan turunannya adalah perkalian yang digunakan melalui aturan rantai.
David Refaeli
7

Jika Anda menganggap bobot sebagai prior, seperti dalam jaringan Bayesian, maka Anda telah mengesampingkan kemungkinan bahwa input tersebut mungkin mempengaruhi sistem. Penjelasan lain adalah bahwa backpropagation mengidentifikasi set bobot yang meminimalkan perbedaan kuadrat tertimbang antara target dan nilai yang diamati (E). Lalu bagaimana mungkin algoritma gradient descent diorientasikan dalam hal menentukan arah sistem? Anda menempatkan diri Anda pada titik sadel ruang parameter.

AdamO
sumber
1
Ini jawaban terbaik. Ini adalah titik pelana. Algoritma optimisasi berbasis backpropagation biasanya akan segera berhenti. Untuk menghitung gradien, kita mengalikan delta dengan bobot dan hasilnya akan selalu nol.
alfa
Saya pikir ini adalah jawaban yang bagus mengapa bobot tertentu tidak boleh diinisialisasi pada 0. Tapi delta mungkin masih merambat kembali - bobot pada lapisan output tidak tergantung pada bobot, jadi kita akan memiliki bobot bukan nol di sini setelah pembaruan pertama. Setelah pembaruan berikutnya, bobot non-nol ini akan digunakan dengan delta untuk menyesuaikan bobot lapisan sebelumnya dan seterusnya. Saya pikir masalah yang lebih besar dengan menginisialisasi jaringan dengan semua 0 adalah mereka semua memiliki bobot yang sama, yang dalam jaringan feed-forward dasar Anda sepenuhnya terhubung, setara dengan memiliki 1 simpul per lapisan.
Tahlor
6

Di setiap iterasi dari algoritma backpropagation Anda, Anda akan memperbarui bobot dengan mengalikan bobot yang ada dengan delta yang ditentukan oleh backpropagation. Jika nilai bobot awal adalah 0, mengalikannya dengan nilai apa pun untuk delta tidak akan mengubah bobot yang berarti setiap iterasi tidak berpengaruh pada bobot yang Anda coba optimalkan.

Id
sumber
2
> Anda akan memperbarui bobot dengan mengalikan bobot yang ada dengan nilai yang ditentukan oleh backpropagation - Saya rasa tidak, itu bukan hanya perkalian.
user8078
1
Poin umum saya adalah bahwa jika bobot awal adalah nol mereka akan tetap pada nol setelah setiap iterasi propagasi kembali.
Idr
'Nilai ditentukan oleh backpropagation' adalah delta (lihat misalnya makalah asli "Representasi pembelajaran dengan kesalahan back-propagating", persamaan 7). Jawabannya tidak tepat tetapi tidak sepenuhnya salah.
alfa
1
Ini hanya jawaban yang salah. Bobot akan berubah, tetapi akan berubah bersama. Ini buruk karena semua unit tersembunyi akan identik selama pelatihan dan tidak ada pembelajaran yang dapat terjadi.
Amin Sammara
Saya pikir ini tergantung pada fungsi aktivasi. Jika Anda memilih tanh, maka hasil akhir akan menjadi 0, dan karenanya bobot lapisan akhir akan menjadi 0, dan semua bobot lainnya juga. Tetapi jika Anda memilih logit, hasil akhirnya adalah dan karenanya gradien akhir bobot tidak akan menjadi 0, dan akhirnya semua bobot lainnya juga tidak akan menjadi 0.θ(0)=0.5
David Refaeli
2

Tampak bagi saya bahwa salah satu alasan mengapa menginisialisasi bobot ke nilai yang sama (bukan hanya nol) adalah karena untuk lapisan tersembunyi tertentu semua node dalam lapisan ini akan memiliki input yang persis sama dan karenanya akan tetap sama seperti masing-masing lain.

Austin
sumber
1

Jawaban untuk ini tidak sepenuhnya "Local Minima / Maxima".

Ketika Anda memiliki lebih dari 1 Lapisan Tersembunyi dan setiap bobot adalah 0's, tidak peduli seberapa besar / kecil perubahan pada Weight_i tidak akan menyebabkan perubahan pada Output.

Ini karena delta Weight_i akan diserap oleh Lapisan Tersembunyi berikutnya.

Ketika tidak ada perubahan dalam Output, tidak ada gradien dan karenanya tidak ada arah.

Ini memiliki sifat yang sama dengan Minima / Maxima Lokal, tetapi sebenarnya karena 0, yang secara teknis berbeda

Tan Eugene
sumber
0

Masalah utama dengan inisialisasi semua bobot ke nol secara matematis mengarah ke nilai neuron nol (untuk multi-layer) atau delta akan menjadi nol. Dalam salah satu komentar oleh @alfa dalam jawaban di atas sudah disediakan petunjuk, disebutkan bahwa produk bobot dan delta harus nol. Ini pada dasarnya berarti bahwa untuk gradient descent, ini berada di atas bukit tepat di puncaknya dan tidak dapat memecahkan simetri. Keacakan akan mematahkan simetri ini dan seseorang akan mencapai minimum lokal. Bahkan jika kita sedikit mengganggu berat badan kita akan berada di trek. Referensi: Belajar dari data Kuliah 10.

rahulkmishra
sumber
0

Itu adalah ide yang buruk karena 2 alasan:

  1. g(0)0

  2. tanhg(0)=0

Mari kita tunjukkan ini (untuk kesederhanaan saya mengasumsikan lapisan hasil akhir dari 1 neuron):

tanh

LaLzL=WLaL1WL

dWL:=LWL=LaLaLzLzLWL
LaazLaazzWaL1dWLWL=WLαdWL

aL1dWL

David Refaeli
sumber