Loading [MathJax]/jax/output/HTML-CSS/jax.js
Geri yayılma demosu

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+ex.

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(youtputytarget)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.
xj=
iin(j)wijyi+bj

İleri sarma

Ardından, ilk gizli katmandaki düğümlerin çıkışını güncelleriz. Bunun için f(x)işlevini kullanıyoruz.
y=f(x)

İleri sarma

Bu 2 formülü kullanarak ağın geri kalanına yayılır ve ağın son çıkışını elde ederiz.
y=f(x)
xj=
iin(j)wijyi+bj

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:
wij=wijαdEdwij
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(youtputytarget)2 esnasında şunları yapıyoruz:
Eyoutput=youtputytarget

Sırt yayılımı

Zincir kuralını dEdy kullanabiliriz dEdx .
Ex=dydxEy=ddxf(x)Ey
Burada ddxf(x)=f(x)(1f(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.
Ewij=xjwijExj=yiExj

Sırt yayılımı

Zincir kuralını kullanarak dEdy aynı zamanda önceki katmandan da yararlanabiliriz. Tam bir tur attık.
Eyi=jout(i)xjyiExj=jout(i)wijExj

Sırt yayılımı

Yalnızca hatanın tüm türevlerini hesaplayana kadar önceki üç formülü tekrarlamamız yeterlidir.

Son.

1y1xinput2y2x2dE/dy2dE/dx2fw12dE/dw3y3x3dE/dy3dE/dx3fw13dE/dw4y4x4dE/dy4dE/dx4fw24dE/dww34dE/dw5y5x5dE/dy5dE/dx5fw25dE/dww35dE/dw6youtputx6dE/dy6dE/dx6fw46dE/dww56dE/dwEytarget
Hesaplanıyor...