Sadece eğlence için, sinir ağı geliştirmeye çalışıyorum.
Şimdi, geri yayılım için iki teknik gördüm.
İlki burada ve diğer birçok yerde de kullanılıyor.
Yaptığı şey:
- Her çıkış nöronu için hatayı hesaplar.
- Ağa geri çoğaltır (her bir iç nöron için bir hata hesaplar).
- Ağırlıkları aşağıdaki formüle göre günceller: ( ağırlıktaki değişiklik , öğrenme hızı, sinapstan girdi alan ve sinapstan gönderilen çıktı olan nöronun hatası ).
- Veri kümesinin her girişi için gerektiği kadar tekrarlanır.
Bununla birlikte, bu derste önerilen sinir ağı (GitHub'da da mevcuttur) farklı bir teknik kullanır:
- Bir hata işlevi kullanır (diğer yöntemin bir hata işlevi vardır, ancak eğitim için kullanmaz).
- Ağırlıklardan başlayarak son hatayı hesaplayabilen başka bir işlevi vardır.
- Bu işlevi en aza indirir (gradyan iniş yoluyla).
Şimdi hangi yöntem kullanılmalı?
İlki en çok kullanılanı olduğunu düşünüyorum (çünkü bunu kullanarak farklı örnekler gördüm), ama aynı zamanda işe yarıyor mu?
Özellikle bilmiyorum:
- Daha çok yerel minimumlara tabi değil mi (ikinci dereceden işlevleri kullanmadığından)?
- Her bir ağırlığın varyasyonu, çıkış nöronunun çıkış değerinden etkilendiğinden, sadece nöronlarda daha yüksek değerler üreten veri kümesinin girişleri (sadece çıkış değerlerini değil) diğer girişlerden daha ağırlıkları etkilemez mi?
Şimdi, ilk tekniği tercih ediyorum, çünkü uygulamayı daha basit ve düşünmeyi daha kolay buluyorum.
Yine de, bahsettiğim problemler varsa (ki umarım öyle olmaz), ikinci yöntem üzerinde kullanmak için gerçek bir neden var mı?