Geri yayılma demosu
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$

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 \(w_{ij}\). Bunlar ağ parametreleridir.

Etkinleştirme işlevi

Her düğümün toplam girişi \(\color{input}x\), etkinleştirme işlevi \(f(\color{input}x\color{black})\)ve çıkışı \(\color{output}y\color{black}=f(\color{input}x\color{black})\)vardır. \(f(\color{input}x\color{black})\) 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(\color{input}x\color{black}) = \frac{1}{1+e^{-\color{input}x}}\).

Hata fonksiyonu

Amaç, tahmin edilen çıkışın \(\color{output}y_{output}\) tüm girişler için \(\color{input}x_{input}\)hedefe yakın olması için ağın ağırlıklarını otomatik olarak öğrenmektir \(\color{output}y_{output}\).

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(\color{output}y_{output}\color{black},\color{output}y_{target}\color{black}) = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2 \).

İleri sarma

İlk olarak \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) 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. \( \color{output}y_1 \color{black} = \color{input} x_{input} \)

İleri sarma

Şimdi ilk gizli katmanı güncelleriz. Önceki katmandaki düğümlerin çıktısını \(\color{output}y\) alırız ve sonraki katmandaki düğümlerin \(\color{input}x\) girişini hesaplamak için ağırlıkları kullanırız.
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

İleri sarma

Ardından, ilk gizli katmandaki düğümlerin çıkışını güncelleriz. Bunun için \( f(x) \)işlevini kullanıyoruz.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

İleri sarma

Bu 2 formülü kullanarak ağın geri kalanına yayılır ve ağın son çıkışını elde ederiz.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

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 \(\color{dweight}\frac{dE}{dw_{ij}}\).
Hata türevlerini aldıktan sonra basit bir güncelleme kuralı kullanarak ağırlıkları güncelleyebiliriz:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
burada \(\alpha\) 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 (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)) ağırlıkı artırır, aksi takdirde hata arttığında hata artarsa (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)) ağırlığı düşürün.

Ek türevler

Ayrıca, hesaplamaya yardımcı olmak için \(\color{dweight}\frac{dE}{dw_{ij}}\)her bir düğüm için iki tür daha bilgi depolarız: hata şu şekilde değişir:
  • düğümün toplam girişi \(\color{dinput}\frac{dE}{dx}\) ve
  • düğümün çıkışı \(\color{doutput}\frac{dE}{dy}\).

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 = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2\) esnasında şunları yapıyoruz:
$$ \color{doutput} \frac{\partial E}{\partial y_{output}} \color{black} = \color{output} y_{output} \color{black} - \color{output} y_{target}$$

Sırt yayılımı

Zincir kuralını \(\color{doutput} \frac{dE}{dy}\) kullanabiliriz \(\color{dinput}\frac{dE}{dx}\) .
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
Burada \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) \(f(\color{input}x\color{black})\) 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.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

Sırt yayılımı

Zincir kuralını kullanarak \(\frac{dE}{dy}\) aynı zamanda önceki katmandan da yararlanabiliriz. Tam bir tur attık.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Sırt yayılımı

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

Son.

Hesaplanıyor...