Hanya untuk bersenang-senang, saya mencoba mengembangkan jaringan saraf.
Sekarang, untuk backpropagation saya melihat dua teknik.
Yang pertama digunakan di sini dan di banyak tempat lain juga.
Apa yang dilakukannya adalah:
- Ini menghitung kesalahan untuk setiap neuron output.
- Ini mempropagandakannya ke jaringan (menghitung kesalahan untuk setiap neuron dalam).
- Ini memperbarui bobot dengan rumus: (di mana perubahan berat, kecepatan belajar, kesalahan neuron menerima input dari sinaps dan menjadi output yang dikirim pada sinaps).
- Mengulangi untuk setiap entri dataset, sebanyak yang diperlukan.
Namun, jaringan saraf yang diusulkan dalam tutorial ini (juga tersedia di GitHub) menggunakan teknik yang berbeda:
- Ini menggunakan fungsi kesalahan (metode lain memang memiliki fungsi kesalahan, tetapi tidak menggunakannya untuk pelatihan).
- Ini memiliki fungsi lain yang dapat menghitung kesalahan akhir mulai dari bobot.
- Ini meminimalkan fungsi itu (melalui gradient descent).
Sekarang, metode mana yang harus digunakan?
Saya pikir yang pertama adalah yang paling banyak digunakan (karena saya melihat berbagai contoh menggunakannya), tetapi apakah itu bekerja juga?
Secara khusus, saya tidak tahu:
- Bukankah lebih tunduk pada minimum lokal (karena tidak menggunakan fungsi kuadratik)?
- Karena variasi setiap bobot dipengaruhi oleh nilai output neuron outputnya, bukankah entri dataset yang kebetulan menghasilkan nilai lebih tinggi pada neuron (bukan hanya output) memengaruhi bobot lebih dari entri lain?
Sekarang, saya lebih suka teknik pertama, karena saya merasa lebih mudah diimplementasikan dan lebih mudah untuk dipikirkan.
Padahal, jika memang ada masalah yang saya sebutkan (yang saya harap tidak), apakah ada alasan sebenarnya untuk menggunakannya pada metode kedua?