Geri yayılma algoritması
Geri yayılma algoritması, büyük nöral ağları hızla eğitmek için gereklidir. Bu makalede, algoritmanın işleyiş şekli açıklanmaktadır.
Lütfen aşağı kaydırın...
Basit nöral ağ
Sağda bir giriş, bir çıkış düğümü ve her biri iki düğümden oluşan iki gizli katman bulunan bir nöral ağ görürsünüz.
Komşu katmanlardaki düğümler ağırlıklarla bağlantılıdır wij. Bunlar ağ parametreleridir.
Etkinleştirme işlevi
Her düğümün toplam girişi x, etkinleştirme işlevi f(x)ve çıkışı y=f(x)vardır.
f(x) doğrusal olmayan bir işlev olmalıdır. Aksi takdirde, nöral ağ yalnızca doğrusal modelleri öğrenebilir.
Yaygın olarak kullanılan bir etkinleştirme işlevi Sigmoid işlevidir:
f(x)=11+e−x.
Hata fonksiyonu
Amaç, tahmin edilen çıkışın youtput
tüm girişler için xinputhedefe yakın olması için ağın ağırlıklarını otomatik olarak öğrenmektir youtput.
Hedeften ne kadar uzakta olduğumuzu ölçmek için bir hata işlevi kullanıyoruz E.
Sık kullanılan bir hata işlevi: E(youtput,ytarget)=12(youtput−ytarget)2.
İleri sarma
İlk olarak (xinput,ytarget) giriş örneğini alıp ağın giriş katmanını güncelleriz.
Tutarlılık için girdiyi diğer tüm düğümler gibi değerlendiririz ancak etkinleştirme işlevi olmadan çıkışının girişine eşit olmasını bekleriz. y1=xinput
İleri sarma
Şimdi ilk gizli katmanı güncelleriz. Önceki katmandaki düğümlerin çıktısını y alırız ve sonraki katmandaki düğümlerin x girişini hesaplamak için ağırlıkları kullanırız.
İleri sarma
Ardından, ilk gizli katmandaki düğümlerin çıkışını güncelleriz.
Bunun için f(x)işlevini kullanıyoruz.
İleri sarma
Bu 2 formülü kullanarak ağın geri kalanına yayılır ve ağın son çıkışını elde ederiz.
Hata türevi
Geri yayılma algoritması, tahmini çıkışı belirli bir örnek için istenen çıkışla karşılaştırdıktan sonra ağın her ağırlığının ne kadar güncelleneceğine karar verir.
Bunun için hatanın her ağırlıkla ilgili olarak nasıl değiştiğini hesaplamamız gerekir dEdwij.
Hata türevlerini aldıktan sonra basit bir güncelleme kuralı kullanarak ağırlıkları güncelleyebiliriz:
burada α pozitif bir sabittir. Öğrenme hızı olarak adlandırılır. Bu seviyeyi empatik olarak incelememiz gerekir.
[Not] Güncelleme kuralı çok basittir: Ağırlık arttığında hata azalırsa (dEdwij<0) ağırlıkı artırır, aksi takdirde hata arttığında hata artarsa (dEdwij>0) ağırlığı düşürün.
Ek türevler
Ayrıca, hesaplamaya yardımcı olmak için dEdwijher bir düğüm için iki tür daha bilgi depolarız:
hata şu şekilde değişir:
- düğümün toplam girişi dEdx ve
- düğümün çıkışı dEdy.
Sırt yayılımı
Hata türevlerini geri yatmaya başlayalım.
Bu özel giriş örneğinin tahmini çıkışına sahip olduğumuz için hatanın bu çıkışla nasıl değiştiğini hesaplayabiliriz.
Hata işlevimiz E=12(youtput−ytarget)2 esnasında şunları yapıyoruz:
Sırt yayılımı
Zincir kuralını dEdy kullanabiliriz dEdx .
Burada ddxf(x)=f(x)(1−f(x)) f(x) Sigmoid etkinleştirme işlevi olduğunda.
Sırt yayılımı
Bir düğümün toplam girişine göre hata türetimi alır almaz o düğüme gelen ağırlıklarla ilgili hata türevlerini alabiliriz.
Sırt yayılımı
Zincir kuralını kullanarak dEdy aynı zamanda önceki katmandan da yararlanabiliriz. Tam bir tur attık.
Sırt yayılımı
Yalnızca hatanın tüm türevlerini hesaplayana kadar önceki üç formülü tekrarlamamız yeterlidir.