Mengapa bobot Jaringan Neural harus diinisialisasi ke nomor acak? [Tutup]


105

Saya mencoba membangun jaringan saraf dari awal. Di semua literatur AI ada konsensus bahwa bobot harus diinisialisasi ke nomor acak agar jaringan dapat berkumpul lebih cepat.

Tetapi mengapa bobot awal jaringan neural diinisialisasi sebagai angka acak?

Saya pernah membaca di suatu tempat bahwa ini dilakukan untuk "merusak simetri" dan ini membuat jaringan saraf belajar lebih cepat. Bagaimana memecahkan simetri membuatnya belajar lebih cepat?

Bukankah menginisialisasi bobot menjadi 0 adalah ide yang lebih baik? Dengan begitu, anak timbangan dapat menemukan nilainya (baik positif atau negatif) lebih cepat?

Apakah ada filosofi lain yang mendasari di balik pengacakan bobot selain dari harapan bahwa bobot akan mendekati nilai optimal saat diinisialisasi?


8
Sepertinya ini lebih cocok untuk Cross Validated .
Sycorax

2
Saya memberikan suara untuk menutup pertanyaan ini karena ini bukan tentang pemrograman seperti yang didefinisikan di pusat bantuan tetapi tentang teori dan metodologi ML umum.
desertnaut

Jawaban:


140

Memecah simetri sangat penting di sini, dan bukan untuk alasan kinerja. Bayangkan 2 lapisan pertama dari multilayer perceptron (lapisan masukan dan tersembunyi):

masukkan deskripsi gambar di sini

Selama propagasi maju, setiap unit di lapisan tersembunyi mendapat sinyal:

masukkan deskripsi gambar di sini

Artinya, setiap unit tersembunyi mendapatkan jumlah input dikalikan dengan bobot yang sesuai.

Sekarang bayangkan Anda menginisialisasi semua bobot ke nilai yang sama (misalnya nol atau satu). Dalam hal ini, setiap unit tersembunyi akan mendapatkan sinyal yang persis sama . Misalnya jika semua bobot diinisialisasi ke 1, setiap unit mendapat sinyal yang sama dengan jumlah input (dan output sigmoid(sum(inputs))). Jika semua bobot adalah nol, yang lebih buruk lagi, setiap unit tersembunyi akan mendapatkan sinyal nol. Tidak peduli apa masukannya - jika semua bobot sama, semua unit di lapisan tersembunyi juga akan sama .

Ini adalah masalah utama dengan simetri dan alasan mengapa Anda harus menginisialisasi bobot secara acak (atau, setidaknya, dengan nilai yang berbeda). Perhatikan, masalah ini memengaruhi semua arsitektur yang menggunakan koneksi masing-masing.


1
Penjelasan yang bagus. Tapi kenapa menggunakan kata symmetrytidak correlation? Siapa yang pertama kali menggunakan kata itu?
nn0p

1
@ nn0p: korelasi menyiratkan bahwa 2 sinyal berubah ke arah yang sama, tetapi tidak selalu dan tidak dengan besaran yang persis sama. Setidaknya sejauh yang saya tahu, simetri tidak memiliki definisi formal dan digunakan di sini untuk mewakili sinyal yang persis sama di semua tautan antar node, yang membuat pelatihan tidak berguna.
ffriend

@ffriend daripada jika kita menggunakan dropout, pengacakan tidak lebih diperlukan. Apakah aku salah?
emanuele

1
@emanuele Dropout itu sendiri adalah semacam pengacakan, jadi ya, itu harus berhasil. Namun, semua koneksi yang tidak "putus" di setiap iterasi, masih akan mendapatkan pembaruan simetris, jadi saya kira pembelajaran akan sangat lambat dan karenanya merekomendasikan untuk tetap menggunakan inisialisasi acak dalam jaringan praktis apa pun.
berteman dengan

Ini menjelaskan forwardprop dengan baik, tapi bagaimana dengan backprop?
zell

74

Analogi:

Saya harap ini analogi yang bagus. Saya sudah mencoba menjelaskannya sesederhana mungkin.

Bayangkan seseorang telah menurunkan Anda dari helikopter ke puncak gunung yang tidak dikenal dan Anda terjebak di sana. Dimana-mana berkabut. Satu-satunya hal yang Anda tahu adalah bahwa Anda harus turun ke permukaan laut bagaimanapun caranya. Arah mana yang harus Anda ambil untuk turun ke titik serendah mungkin?

Jika Anda tidak dapat menemukan cara untuk mencapai permukaan laut sehingga helikopter akan membawa Anda lagi dan akan menurunkan Anda ke posisi puncak gunung yang sama. Anda harus mengambil arah yang sama lagi karena Anda "menginisialisasi" diri Anda sendiri ke posisi awal yang sama .

Namun, setiap kali helikopter menurunkan Anda ke suatu tempat secara acak di gunung, Anda akan mengambil arah dan langkah yang berbeda. Jadi, akan ada peluang yang lebih baik bagi Anda untuk mencapai titik serendah mungkin.

Inilah yang dimaksud dengan memecah simetri . Inisialisasinya asimetris ( yang berbeda ) sehingga Anda dapat menemukan solusi berbeda untuk masalah yang sama.

Dalam analogi ini, di mana Anda mendarat adalah pemberat . Jadi, dengan bobot berbeda, ada peluang lebih baik untuk mencapai titik terendah ( atau lebih rendah ).

Selain itu, ini meningkatkan entropi dalam sistem sehingga sistem dapat membuat lebih banyak informasi untuk membantu Anda menemukan titik yang lebih rendah ( minimum lokal atau global ).

masukkan deskripsi gambar di sini


10
Tampaknya helikopter menjatuhkan Anda ke suatu tempat secara acak di gunung beberapa kali, namun dalam pembelajaran mendalam kami hanya menginisialisasi bobot secara acak hanya satu kali.
YuFeng Shen

1
Ini adalah penjelasan intuitif yang nyata. Kami juga harus mencatat NN hampir tidak pernah cembung - jadi pengacakan adalah cara yang ideal untuk pergi - tetapi jika Anda memiliki fungsi kerugian cembung, maka tentu saja tidak masalah apa yang Anda inisialisasi bobot Anda.
Kingz

4
Ini analogi yang bagus - tetapi lebih masuk akal untuk mengasumsikan bahwa Anda dan teman Anda sedang dijatuhkan di gunung (yaitu titik-titik dalam jaringan) - baik di tempat yang sama atau orang yang berbeda di tempat yang berbeda. Dan anggaplah Anda semua bisa berkomunikasi satu sama lain. Tempat yang berbeda dengan komunikasi akan memungkinkan penurunan yang lebih cepat. Tempat yang sama berarti setiap orang cenderung mengambil jalan yang sama.
ahmedhosny

26

Jawabannya cukup sederhana. Algoritme pelatihan dasar pada dasarnya serakah - mereka tidak menemukan optimal global, melainkan - solusi lokal "terdekat". Akibatnya, mulai dari inisialisasi tetap apa pun akan membiaskan solusi Anda ke beberapa kumpulan bobot tertentu. Jika Anda melakukannya secara acak (dan mungkin berkali-kali) maka kecil kemungkinan Anda akan terjebak di bagian aneh dari permukaan kesalahan.

Argumen yang sama berlaku untuk algoritme lain, yang tidak dapat menemukan optimal global (k-means, EM, dll.) Dan tidak berlaku untuk teknik pengoptimalan global (seperti algoritme SMO untuk SVM).


Jadi, bukankah dijamin tidak akan terjebak di minima lokal hanya dengan diacak? Tetapi setelah beberapa kali berjalan dengan bobot acak yang berbeda, mungkin akan mendapatkan minimum global?
Shayan RC

1
Tidak ada jaminan, tetapi beberapa inisialisasi dapat membantu setidaknya mendekati optimal sebenarnya.
lejlot

Apakah ada rumus atau aturan standar untuk menetapkan nilai untuk menginisialisasi bobot ?? Saya memiliki jaringan saraf feed-forward, multi-layer, back-propagation, di mana fungsi sigmoid digunakan.
lkkkk

ada beberapa aturan praktis dalam "jaringan saraf" buku
S.Haykin

3
Ini bukan alasan mengapa orang menggunakan inisialisasi acak karena kebanyakan orang tidak memulai ulang pelatihan berkali-kali dengan inisialisasi acak yang berbeda dan jaringan masih bisa mendapatkan optimalisasi lokal yang baik.
cesarsalgado

4

Seperti yang Anda sebutkan, kuncinya adalah memecah simetri . Karena jika Anda menginisialisasi semua bobot menjadi nol maka semua neuron (unit) tersembunyi di jaringan saraf Anda akan melakukan perhitungan yang sama persis. Ini bukan sesuatu yang kami inginkan karena kami ingin unit tersembunyi yang berbeda menghitung fungsi yang berbeda. Namun, ini tidak mungkin jika Anda menginisialisasi semua dengan nilai yang sama.


2
  1. Bukankah menginisialisasi bobot menjadi 0 adalah ide yang lebih baik? Dengan begitu, anak timbangan dapat menemukan nilainya (baik positif atau negatif) lebih cepat?

  2. Bagaimana memecahkan simetri membuatnya belajar lebih cepat?

Jika Anda menginisialisasi semua bobot menjadi nol, maka semua neuron dari semua lapisan melakukan kalkulasi yang sama, memberikan keluaran yang sama dan di sana dengan membuat seluruh jaring dalam tidak berguna . Jika bobotnya nol, kompleksitas seluruh jaringan dalam akan sama dengan kompleksitas neuron tunggal dan prediksi tidak akan lebih baik daripada acak.

Node yang berdampingan dalam lapisan tersembunyi yang terhubung ke input yang sama harus memiliki bobot yang berbeda agar algoritme pembelajaran dapat memperbarui bobot.

Dengan menjadikan bobot sebagai bukan nol (tetapi mendekati 0 seperti 0,1 dll), algoritme akan mempelajari bobot di iterasi berikutnya dan tidak akan macet. Dengan cara ini, terjadi kerusakan simetri.

  1. Apakah ada filosofi lain yang mendasari di balik pengacakan bobot selain dari harapan bahwa bobot akan mendekati nilai optimal saat diinisialisasi?

Algoritme optimasi stokastik seperti penurunan gradien stokastik menggunakan keacakan dalam memilih titik awal untuk pencarian dan dalam perkembangan pencarian.

Kemajuan pencarian atau pembelajaran jaringan saraf dikenal sebagai konvergensi. Menemukan solusi sub-optimal atau hasil optimal lokal ke dalam konvergensi prematur.

Alih-alih mengandalkan satu optima lokal, jika Anda menjalankan algoritme beberapa kali dengan bobot acak yang berbeda, ada kemungkinan terbaik untuk menemukan optima global tanpa terjebak pada optima lokal.

Pasca 2015, karena kemajuan dalam penelitian pembelajaran mesin, He-et-al Initializatio n diperkenalkan untuk menggantikan inisialisasi acak

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Bobotnya masih acak tetapi jangkauannya berbeda-beda tergantung ukuran lapisan neuron sebelumnya.

Singkatnya, bobot acak bukan nol membantu kita

  1. Keluarlah dari optima lokal
  2. Memecah simetri
  3. Raih optima global dalam iterasi lebih lanjut

1

Selain inisialisasi dengan nilai acak, bobot awal tidak boleh dimulai dengan nilai yang besar. Ini karena kita sering menggunakan fungsi tanh dan sigmoid pada hidden layer dan output layer. Jika Anda melihat grafik dari dua fungsi, setelah propagasi maju pada iterasi pertama menghasilkan nilai yang lebih tinggi, dan nilai ini sesuai dengan tempat di fungsi sigmoid dan tanh yang menyatukan turunan ke nol. Ini mengarah pada awal yang dingin dari proses pembelajaran dan peningkatan waktu pembelajaran. Akibatnya, jika Anda memulai bobot secara acak, Anda dapat menghindari masalah ini dengan mengalikan nilai ini dengan nilai seperti "0,01" atau "0,001".


1

Pertama-tama, beberapa algoritme bertemu bahkan dengan pembobotan awal nol. Contoh sederhananya adalah Linear Perceptron Network. Tentu saja, banyak jaringan pembelajaran memerlukan pembobotan awal secara acak (meskipun ini bukan jaminan untuk mendapatkan jawaban tercepat dan terbaik ).

Jaringan syaraf tiruan menggunakan Back-propagation untuk mempelajari dan memperbarui bobot, dan masalahnya adalah bahwa dalam metode ini, bobot menyatu ke optimal lokal (biaya / kerugian minimum lokal), bukan optimal global.

Pembobotan acak membantu jaringan mengambil peluang untuk setiap arah di ruang yang tersedia dan secara bertahap meningkatkannya untuk sampai pada jawaban yang lebih baik dan tidak terbatas pada satu arah atau jawaban.

[Gambar di bawah ini menunjukkan contoh satu dimensi tentang bagaimana konvergensi. Mengingat lokasi awal, pengoptimalan lokal tercapai tetapi bukan pengoptimalan global. Pada dimensi yang lebih tinggi, pembobotan acak dapat meningkatkan peluang untuk berada di tempat yang tepat atau memulai dengan lebih baik, menghasilkan bobot yang terkonvergensi ke nilai yang lebih baik.] [1]

[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). Klasifikasi dan Regresi NNs. Kuliah.]

Dalam kasus yang paling sederhana, bobot baru adalah sebagai berikut:

W_new = W_old + D_loss

Di sini gradien fungsi biaya ditambahkan ke bobot sebelumnya untuk mendapatkan bobot baru. Jika semua bobot sebelumnya sama, maka pada langkah berikutnya semua bobot mungkin sama. Akibatnya, dalam hal ini, dari sudut pandang geometris, jaringan saraf miring ke satu arah dan semua bobot sama. Tetapi jika bobot berbeda, dimungkinkan untuk memperbarui bobot dengan jumlah yang berbeda. (tergantung pada faktor dampak yang dimiliki setiap bobot pada hasil, hal itu memengaruhi biaya dan pembaruan bobot. Jadi, bahkan kesalahan kecil dalam pembobotan acak awal dapat diselesaikan).

Ini adalah contoh yang sangat sederhana, tetapi ini menunjukkan pengaruh inisialisasi pembobotan acak pada pembelajaran. Ini memungkinkan jaringan saraf untuk pergi ke ruang yang berbeda, bukan ke satu sisi. Akibatnya, dalam proses pembelajaran, lakukan yang terbaik dari ruang-ruang ini


0

Biar lebih matematis. Faktanya, alasan saya menjawab adalah bahwa saya menemukan ini sedikit kurang dalam jawaban lain. Asumsikan Anda memiliki 2 lapisan. Jika kita melihat pada algoritma propagasi balik, perhitungan

dZ2 = A2 - Y

dW2 = (1 / m) * dZ2 * A2.T

Mari kita abaikan db2. (Maaf bukan maaf;))

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Masalah yang Anda lihat dicetak tebal. Komputasi dZ1 (yang diperlukan untuk menghitung dW1) memiliki W2 di dalamnya yaitu 0. Kami tidak pernah mendapat kesempatan untuk mengubah bobot menjadi lebih dari 0 dan kami tidak akan pernah melakukannya. Jadi intinya, jaringan saraf tidak mempelajari apapun. Menurut saya ini lebih buruk dari regresi logistik (unit tunggal). Dalam kasus regresi logistik, Anda belajar dengan lebih banyak iterasi karena Anda mendapatkan masukan yang berbeda berkat X. Dalam hal ini, lapisan lain selalu memberikan keluaran yang sama sehingga Anda tidak belajar sama sekali.


0

Saya belajar satu hal: jika Anda menginisialisasi bobot menjadi nol, jelas bahwa unit aktivasi di lapisan yang sama akan sama, artinya mereka akan memiliki nilai yang sama. Ketika Anda melakukan backbrop, Anda akan menemukan bahwa semua baris dari gradien dW juga sama, oleh karena itu semua baris dari matriks bobot W adalah sama setelah pembaruan penurunan gradien. Secara umum, menginisialisasi semua bobot ke nol mengakibatkan jaringan gagal merusak simetri. Ini berarti bahwa setiap neuron di setiap lapisan akan mempelajari hal yang sama, dan Anda mungkin juga melatih jaringan saraf dengan n[l]=1n[l]=1untuk setiap lapisan, dan jaringan tersebut tidak lebih kuat daripada pengklasifikasi linier seperti regresi logistik. Kursus Andrew Ng:

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.