Diverging jaringan saraf bukannya konvergen

9

Saya telah mengimplementasikan jaringan saraf (menggunakan CUDA) dengan 2 lapisan. (2 Neuron per lapisan). Saya mencoba membuatnya belajar 2 fungsi polinomial kuadrat sederhana menggunakan backpropagation .

Tetapi alih-alih konvergen, ia menyimpang (output menjadi tak terhingga)

Berikut ini beberapa detail tentang apa yang saya coba:

  • Saya telah menetapkan bobot awal ke 0, tetapi karena itu menyimpang saya telah secara acak bobot awal (Kisaran: -0,5 hingga 0,5)
  • Saya membaca bahwa jaringan saraf mungkin berbeda jika tingkat belajar terlalu tinggi sehingga saya mengurangi tingkat belajar menjadi 0,000001
  • Dua fungsi yang saya coba tambahkan adalah: 3 * i + 7 * j + 9 dan j * j + i * i + 24 (Saya memberikan layer i dan j sebagai input)
  • Saya telah mengimplementasikannya sebagai satu layer sebelumnya dan yang dapat memperkirakan fungsi polinomial lebih baik daripada yang dilakukannya sekarang
  • Saya sedang berpikir untuk mengimplementasikan momentum dalam jaringan ini, tetapi saya tidak yakin ini akan membantunya belajar
  • Saya menggunakan fungsi aktivasi linier (seperti tidak ada)
  • Ada osilasi di awal tetapi output mulai menyimpang saat salah satu bobot menjadi lebih besar dari 1

Saya telah memeriksa dan memeriksa kembali kode saya, tetapi sepertinya tidak ada masalah apa pun dengannya.

Jadi, inilah pertanyaan saya: apa yang salah di sini?

Pointer apa pun akan dihargai.

Shayan RC
sumber

Jawaban:

8
  1. Dengan jaringan saraf, Anda selalu perlu menginisialisasi bobot secara acak untuk memecah simetri.
  2. Jika Anda tidak menggunakan fungsi aktivasi non-linear di unit tersembunyi, maka Anda mungkin tetap dengan satu lapisan. Jaringan Anda sekarang hanyalah komposisi dari dua fungsi linear, yang tentu saja hanya fungsi linear lainnya.
  3. Tingkat pembelajaran itu tampaknya sangat kecil. Jika saya menggunakan tingkat pembelajaran tetap, saya biasanya menemukan nilai antara 0,1 dan 0,0001 untuk bekerja dengan baik untuk sebagian besar masalah. Ini jelas tergantung masalah jadi ambil pengalaman saya apa adanya.
  4. Selain memeriksa kode Anda terhadap matematika yang telah Anda pelajari, saat melakukan optimasi berbasis gradien akan sangat membantu untuk secara analitik menghitung gradien yang diperlukan menggunakan perbedaan hingga dan membandingkannya dengan nilai yang Anda hitung dalam kode Anda. Lihat di sini untuk diskusi tentang bagaimana Anda dapat melakukan ini. Saya telah menangkap banyak kesalahan dengan cara ini dan melihat tes seperti ini lulus selalu membantu saya merasa lebih yakin akan kebenaran kode.
alto
sumber