Konvergensi bobot jaringan saraf

10

Saya datang ke situasi di mana bobot dari Jaringan Saraf saya tidak konvergen bahkan setelah 500 iterasi. Jaringan saraf saya berisi 1 layer input, 1 layer tersembunyi dan 1 layer output. Mereka adalah sekitar 230 node di lapisan input, 9 node di lapisan tersembunyi dan 1 simpul output di lapisan output. Saya ingin tahu, apakah saya melakukan penghentian dini (katakanlah hentikan pelatihan jaringan saraf saya setelah 100 kali pengulangan). Apa efeknya pada model ini?

Juga ingin tahu apa standar industri untuk bekerja jika bobot dalam jaringan saraf tidak konvergen?

Pelajar
sumber
Apakah data Anda dinormalisasi dengan benar? Ini biasanya menjadi alasan perilaku tersebut.
sashkello
Biasanya jumlah neuron di lapisan tersembunyi harus memiliki ukuran yang sama daripada di lapisan input Anda. Saya pikir 9 neuron terlalu kecil. Apakah Anda mencoba meningkatkan menjadi 200-300 neuron?
ThiS
@sashkello Ya data dinormalisasi dengan benar.
Pelajar
1
@juampa Tidak ada alasan untuk memiliki 9 node di lapisan tersembunyi. kami merasa bahwa memiliki lebih banyak simpul di lapisan tersembunyi akan meningkatkan kompleksitas jaringan dan menyesuaikan data.
Learner
3
Anda perlu memberikan sedikit penjelasan. Apa masalah yang Anda selesaikan? Berapa banyak poin data pelatihan yang Anda miliki? Apa maksudmu dengan tidak konvergen? - Apakah Anda hanya bermaksud bahwa kinerja (pada set latihan) buruk, atau bahwa bobot Anda tidak menyatu ... jika konvergensi berat, maka Anda perlu menggunakan tingkat belajar yang lebih rendah, atau tingkat pembelajaran yang meruncing. Anda mungkin juga ingin menggunakan regresi logistik / linier sebagai garis dasar. terakhir, seberapa berkorelasi input Anda? Jika mereka sangat berkorelasi maka normalisasi tidak akan cukup, dan Anda harus mempertimbangkan diagonisasi (alias PCA).
seanv507

Jawaban:

13

Ada sejumlah pertanyaan untuk diajukan:

  • apakah Anda memiliki jumlah neuron yang tepat di setiap lapisan
  • apakah Anda menggunakan jenis fungsi transfer yang sesuai?
  • apakah Anda menggunakan jenis algoritma pembelajaran yang sesuai
  • apakah Anda memiliki ukuran sampel yang cukup besar
  • dapatkah Anda mengonfirmasi bahwa sampel Anda memiliki jenis hubungan yang tepat satu sama lain agar informatif? (tidak berlebihan, dari dimensi yang relevan, dll ...)

Apa yang bisa Anda berikan di jalan ephemeris? Bisakah Anda memberi tahu kami sesuatu tentang sifat data?

Anda bisa membuat pohon jaringan saraf dengan gradien boost.

Anda bertanya apa yang terjadi jika Anda berhenti lebih awal.

Anda bisa mencobanya sendiri. Jalankan 300x di mana Anda mulai dengan bobot yang diinisialisasi secara acak, dan kemudian berhenti pada jumlah iterasi yang ditentukan, katakanlah 100. Pada titik itu hitung kesalahan ensembel Anda, kesalahan subset pelatihan, dan kesalahan set tes Anda. Ulang. Setelah Anda memiliki 300 nilai untuk memberi tahu Anda apa kesalahannya, Anda bisa mendapatkan gagasan tentang distribusi kesalahan Anda dengan diberikan 100 iterasi pembelajaran. Jika Anda suka, Anda dapat mencicipi distribusi itu di beberapa nilai pembelajaran lainnya. Saya menyarankan 200, 500, dan 1000 iterasi. Ini akan memberi Anda gambaran bagaimana SNR Anda berubah seiring waktu. Sebidang SNR vs iterasi dapat memberi Anda gambaran tentang "tebing" atau "cukup baik". Terkadang ada tebing di mana kesalahan runtuh. Terkadang kesalahan dapat diterima pada saat itu.

Dibutuhkan data "yang relatif sederhana" atau keberuntungan "cukup bagus" bagi sistem Anda untuk secara konsisten berkumpul di bawah 100 iterasi. Keduanya bukan tentang pengulangan atau generalisasi.

Mengapa Anda berpikir dalam hal bobot konvergen dan tidak salah berada di bawah ambang tertentu. Pernahkah Anda mendengar tentang paradoks pemilihan? ( tautan ) Ketika Anda memiliki interaksi siklik dalam sistem Anda (seperti umpan balik di Neural Networks) maka Anda dapat memiliki paradoks pemungutan suara - perubahan yang digabungkan. Saya tidak tahu apakah bobot saja merupakan indikator yang cukup untuk konvergensi jaringan.

Anda bisa menganggap bobot sebagai ruang. Ini memiliki lebih dari 3 dimensi, tetapi masih berupa ruang. Dalam "centroid" ruang itu adalah wilayah "paling cocok" Anda. Jauh dari centroid kurang pas. Anda dapat menganggap pengaturan bobot Anda saat ini sebagai satu titik di ruang itu.

Sekarang Anda tidak tahu di mana "yang baik" sebenarnya. Apa yang Anda miliki adalah "kemiringan" lokal. Anda dapat melakukan gradient descent ke arah lokal "lebih baik" mengingat titik Anda saat ini. Itu tidak memberi tahu Anda "universal" lebih baik, tetapi lokal lebih baik daripada tidak sama sekali.

Jadi Anda mulai iterasi, berjalan menuruni bukit menuju ke lembah penghianatan itu. Anda beralih sampai Anda pikir Anda sudah selesai. Mungkin nilai bobot Anda besar. Mungkin mereka memantul di semua tempat. Mungkin perhitungannya "terlalu lama". Anda ingin dilakukan.

Jadi, bagaimana Anda tahu di mana Anda berada "cukup baik"?

Berikut ini adalah tes cepat yang dapat Anda lakukan:

Ambil 30 himpunan bagian acak data yang seragam (seperti masing-masing beberapa persen dari data) dan latih kembali jaringannya. Seharusnya lebih cepat. Amati berapa lama waktu yang mereka butuhkan untuk bertemu dan membandingkannya dengan sejarah konvergensi perangkat besar. Uji kesalahan jaringan untuk seluruh data pada himpunan bagian ini dan lihat bagaimana perbandingan kesalahan dibandingkan dengan kesalahan besar Anda. Sekarang benjol ukuran subset hingga mungkin 5% dari data Anda dan ulangi. Lihat apa yang ini ajarkan kepada Anda.

Ini adalah variasi pada optimasi kerumunan partikel (lihat referensi) yang dimodelkan tentang bagaimana lebah madu mengambil keputusan berdasarkan kepramukaan.

Anda bertanya apa yang terjadi jika bobot tidak bertemu.

Neural Networks adalah satu alat. Mereka bukan satu-satunya alat. Ada yang lain. Saya akan melihat menggunakan salah satu dari mereka.

Saya bekerja dalam hal kriteria informasi, jadi saya melihat bobot (jumlah parameter) dan kesalahan. Anda dapat mencoba salah satunya.

Ada beberapa jenis preprocessing yang bisa bermanfaat. Pusat dan Skala. Putar menggunakan komponen utama. Jika Anda melihat nilai eigen dalam komponen utama Anda, Anda dapat menggunakan aturan plot skree untuk memperkirakan dimensi data Anda. Mengurangi dimensi dapat meningkatkan konvergensi. Jika Anda mengetahui sesuatu tentang 'fisika dasar' maka Anda dapat menghaluskan atau memfilter data untuk menghilangkan noise. Terkadang konvergensi adalah tentang noise dalam sistem.

Saya menemukan ide penginderaan terkompresi menjadi menarik. Ini dapat memungkinkan sub-sampling radikal dari beberapa sistem tanpa kehilangan generalisasi. Saya akan melihat beberapa statistik bootstrap sampel ulang dan distribusi data Anda untuk menentukan apakah dan pada tingkat apa sub-sampling set pelatihan menjadi representatif. Ini memberi Anda beberapa ukuran "kesehatan" data Anda.

Kadang-kadang itu adalah hal yang baik bahwa mereka tidak bertemu

Pernahkah Anda mendengar tentang paradoks pemilihan? Anda mungkin menganggapnya sebagai saudara sepupu berhitung lebih tinggi dari kebuntuan dua arah. Itu adalah sebuah loop. Dalam paradoks pemilihan 2-orang, orang pertama menginginkan kandidat "A" sedangkan yang kedua menginginkan kandidat "B" (atau bukan-A atau semacamnya). Bagian yang penting adalah Anda bisa menganggapnya sebagai satu lingkaran.

Loop penting dalam jaringan saraf. Umpan balik. Pengulangan. Itu membuat perceptron mampu menyelesaikan masalah seperti XOR. Itu membuat loop, dan kadang-kadang loop dapat bertindak seperti paradoks pemungutan suara, di mana mereka akan terus mengubah bobot jika Anda memiliki iterasi tak terbatas. Mereka tidak dimaksudkan untuk bertemu karena bukan berat individu yang penting tetapi interaksi dari bobot dalam loop.

catatan:

Menggunakan hanya 500 iterasi bisa menjadi masalah. Saya memiliki NN di mana 10.000 iterasi hampir tidak cukup. Jumlah iterasi menjadi "cukup" tergantung, seperti yang telah saya sebutkan, pada data, NN-topologi, fungsi transfer-simpul, fungsi pembelajaran / pelatihan, dan bahkan perangkat keras komputer. Anda harus memiliki pemahaman yang baik tentang bagaimana mereka semua berinteraksi dengan jumlah iterasi Anda sebelum mengatakan bahwa ada iterasi "cukup" atau "terlalu banyak". Pertimbangan lain seperti waktu, anggaran, dan apa yang ingin Anda lakukan dengan NN ketika Anda selesai pelatihan juga harus dipertimbangkan.

Chen, RB, Chang, SP, Wang, W., & Wong, WK, (2011, September). Desain Eksperimental yang Optimal melalui Metode Optimalisasi Kerawanan Partikel (pracetak), Diperoleh 25 Maret 2012, dari http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf

EngrStudent
sumber
2

Bagi saya sulit mengatakan apa masalah Anda. Satu hal yang perlu dipertimbangkan adalah implementasi konkret yang Anda gunakan. Konkretnya, algoritma optimasi apa. Jika jaringan Anda membutuhkan waktu lama untuk bertemu, dan Anda menggunakan beberapa bentuk penurunan gradien stokastik (atau mini-batch) maka itu bisa menjadi kasus bahwa jaringan Anda berada di dataran tinggi (wilayah di mana fungsi energi / kesalahan sangat datar) sehingga gradien sangat rendah dan konvergensi).

Jika demikian, silakan periksa besarnya gradien untuk melihat apakah ini yang terjadi. Ada sejumlah teknik berbeda untuk mengatasi masalah ini, seperti menambahkan momentum pada gradien.

Untuk ikhtisar terperinci tentang teknik dan trik perdagangan, lihat makalah ini (harus dibaca) oleh Yann LeCun .

jpmuc
sumber
1

Pastikan gradien Anda tidak melampaui batas atau mungkin juga gradiennya menjadi nol. Ini dikenal sebagai meledak gradien dan menghilangkan masalah gradien.

Salah satu solusi yang mungkin adalah dengan menggunakan pengoptimal adaptif seperti AdaGrad atau Adam.

Saya telah menghadapi masalah yang sama saat melatih jaringan saraf sederhana ketika saya memulai dengan jaringan saraf.

Beberapa referensi: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA

Yeshwanth Venkatesha
sumber
0

Saya memiliki banyak set data yang konvergen lambat - mungkin karena inputnya sangat berkorelasi.

Saya menulis alat analisis C ++ NN saya sendiri, dan dengan itu, saya dapat memvariasikan tingkat pembelajaran untuk setiap bobot. Untuk setiap bobot di setiap sisi saya melakukan dua hal yang membantu.

Pertama, saya kalikan setiap tingkat belajar dengan angka acak yang didistribusikan secara seragam dari [0,1]. Saya menduga itu membantu dengan masalah korelasinya.

Trik lainnya adalah saya membandingkan gradien saat ini dengan gradien sebelumnya di setiap sisi. Jika gradien hampir tidak menurunkan persen, maka saya mengalikan tingkat pembelajaran untuk tepi itu hingga 5.

Saya tidak punya pembenaran khusus untuk salah satu dari trik itu, tetapi mereka tampaknya bekerja dengan cukup baik.

Semoga ini membantu.

Bill Davy
sumber