Saya menggunakan tensorflow untuk menulis jaringan saraf sederhana untuk sedikit riset dan saya punya banyak masalah dengan bobot 'nan' saat pelatihan. Saya mencoba banyak solusi berbeda seperti mengubah pengoptimal, mengubah kehilangan, ukuran data, dll. Tetapi tanpa hasil. Akhirnya, saya perhatikan bahwa perubahan dalam tingkat pembelajaran membuat perbedaan yang luar biasa dalam bobot saya.
Menggunakan tingkat pembelajaran 0,001 (yang saya pikir cukup konservatif), fungsi meminimalkan sebenarnya akan meningkatkan kerugian secara eksponensial. Setelah satu zaman, kerugian bisa melonjak dari angka ribuan menjadi satu triliun dan kemudian hingga tak terbatas ('nan'). Ketika saya menurunkan tingkat belajar menjadi .0001, semuanya bekerja dengan baik.
1) Mengapa satu urutan besarnya memiliki efek seperti itu?
2) Mengapa fungsi meminimalkan benar-benar melakukan kebalikan dari fungsinya dan memaksimalkan kerugian? Menurut saya itu seharusnya tidak terjadi, tidak peduli tingkat pembelajarannya.
Jawaban:
Anda mungkin menemukan Bab 8 Pembelajaran Mendalam sangat membantu. Di dalamnya, penulis membahas pelatihan model jaringan saraf. Ini sangat rumit, jadi saya tidak terkejut Anda mengalami kesulitan.
Satu kemungkinan (selain kesalahan pengguna) adalah bahwa masalah Anda sangat buruk. Metode keturunan gradien hanya menggunakan informasi turunan (gradien) pertama saat menghitung pembaruan. Ini dapat menyebabkan masalah ketika turunan kedua (Hessian) tidak dikondisikan.
Mengutip dari penulis:
Para penulis memberikan derivasi sederhana untuk menunjukkan bahwa ini bisa terjadi. Menggunakan gradient descent, fungsi biaya harus berubah (ke urutan kedua) oleh
di mana adalah gradien, adalah Hessian, dan adalah tingkat belajar. Jelas, jika turunan kedua besar, maka istilah pertama dapat membanjiri yang kedua, dan fungsi biaya akan meningkat, bukan menurun. Karena skala istilah pertama dan kedua berbeda dengan , salah satu cara untuk mengatasi masalah ini adalah dengan mengurangi (walaupun, tentu saja, ini dapat mengakibatkan belajar terlalu lambat).g H ε ε ε
sumber
Ada dua alasan utama. Yang pertama Anda tidak menggunakan data yang sama di langkah pertama daripada di yang kedua. Jika pada langkah pertama model mempelajari nilai-nilai tersebut dan jatuh ke minimum lokal maka sangat mungkin memberikan kerugian yang lebih besar untuk nilai-nilai baru.
Alasan kedua adalah bentuk fungsi biaya. Anda mencoba meminimalkan nilai dengan langkah-langkah kecil, panjang langkah-langkah itu diberikan oleh dua faktor: gradien dan tingkat pembelajaran. Gambar fungsi Anda seperti x ^ 2. Jika nilai Anda mendekati 0, gradien akan menjadi kecil daripada jika lebih jauh, tetapi jika tingkat pembelajaran Anda besar, alih-alih semakin mendekati 0, Anda sebenarnya meningkatkan kesalahan karena titik baru Anda didasarkan pada penilaian dan tingkat belajar lebih jauh ke 0 dari langkah sebelumnya Dan ini bisa terjadi beberapa kali.
Lihatlah tautan ini: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html
Jika Anda melihat angka-angka dengan alpha 0,01 dan alpha 0,12, Anda akan melihat bagaimana pada gambar pertama laju pembelajaran kecil dan gradien semakin mendekati minimum tetapi dalam kasus kedua laju pembelajaran sangat besar sehingga gradien bergerak lebih jauh dalam setiap langkah.
sumber