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?
sumber
Jawaban:
Memecah simetri sangat penting di sini, dan bukan untuk alasan kinerja. Bayangkan 2 lapisan pertama dari multilayer perceptron (lapisan masukan dan tersembunyi):
Selama propagasi maju, setiap unit di lapisan tersembunyi mendapat sinyal:
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.
sumber
symmetry
tidakcorrelation
? Siapa yang pertama kali menggunakan kata itu?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 ).
sumber
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).
sumber
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.
sumber
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.
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
Bobotnya masih acak tetapi jangkauannya berbeda-beda tergantung ukuran lapisan neuron sebelumnya.
Singkatnya, bobot acak bukan nol membantu kita
sumber
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".
sumber
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:
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
sumber
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.
sumber
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]=1
untuk setiap lapisan, dan jaringan tersebut tidak lebih kuat daripada pengklasifikasi linier seperti regresi logistik. Kursus Andrew Ng:sumber