Skip to main content

Geri Yayılım Algoritması’na Matematiksel Yaklaşım

Geri Yayılım Algoritması

Bir yapay sinir ağı, her birinde özel hesaplamaların yapıldığı nöronlardan oluşmaktadır ve bu nöronların özelleştiği 3 tür katmandan bahsedilmektedir. Bunlar; girdi katmanı, gizli katman ve çıktı katmanıdır. Girdi katmanı, göreve özel olarak türü değişen verilerin sinir ağına sunulduğu katmandır. Veriler, bir ses kaydı (Doğal Dil İşleme), bir görüntü (Görüntü İşleme) veya bir metin (Duygu Analizi) gibi farklı türlerde olabilir.

i = \begin{bmatrix}i_1&i_2&i_3\end{bmatrix}

Verinin türüne göre, yapay sinir ağının gerçekleştireceği işlemler farklılık gösterecektir. Örneğin bir görüntü verisinde, öncelikle renk ayrıştırma veya nesnelerin kenarlarını ayırt etme işlemleri yapılırken; metinsel bir veride öncelikle kelimeleri köklerine ayrıştırma işlemi gerçekleştirilir.

Bir sinir ağındaki katmanlar arasında, her bir katmandaki nöronu bir sonraki katmandaki nöronlara bağlayan bağlantılar ve her bir bağlantının sayısal olarak bir değeri vardır. Bu değerlere ağırlık denir.

 

W_{ig}=\begin{bmatrix}w_{i1g1}&w_{i1g2}&w_{i1g3}&w_{i1g4}\\w_{i2g1}&w_{i2g2}&w_{i2g3}&w_{i2g4}\\w_{i3g1}&w_{i3g2}&w_{i3g3}&w_{i3g4}\end{bmatrix}

W_{gk}=\begin{bmatrix}w_{g1k1}&w_{g1k2}&w_{g1k3}&w_{g1k4}\\w_{g2k1}&w_{g2k2}&w_{g2k3}&w_{g2k4}\\w_{g3k1}&w_{g3k2}&w_{g3k3}&w_{g3k4}\\w_{g3k1}&w_{g3k2}&w_{g3k3}&w_{g3k4}\end{bmatrix}

W_{ko}=\begin{bmatrix}w_{k1o1}&w_{k1o2}\\w_{k2o1}&w_{k2o2}\\w_{k3o1}&w_{k3o2}\\w_{k4o1}&w_{k4o2}\end{bmatrix}

 

Ağırlık değerleri, bağlı oldukları her bir nöronun, eğitimin sonucunda alınacak çıktı değeri için ne kadar öneme sahip olduğunu gösterir.

1. Katman

Girdi katmanına ait nöronlardaki her bir değer, kendisine bağlı olan ağırlık değeriyle çarpılır. Bir sonraki katmanda yer alan nöronların her birine denk gelen çarpım değerleri toplanır.

Gizli katmanda, o katmana özel olarak belirlenmiş aktivasyon fonksiyonuna dayalı olarak bir takım hesaplamalar yapılmakta ve her bir nöronda hesaplanan değer, bir sonraki katmana yine ağırlık değerleriyle çarpılarak aktarılmaktadır. Gizli katmandaki bir nöron, iki bölüme ayrılabilir:

 

 

(i) İlk bölüm olan g_{1(input)}‘te, girdi katmanındaki veriler ve onlarla bağlantılı ağırlık değerlerinin çarpılmış daha sonra bu değerler toplanmıştır. (ii) İkinci bölüm olan g_{1(output)}‘ta ise g_{1(input)}’in değeri, bu katmanda kullanılması planlanmış Sigmoid fonksiyonuna sokulur.

 

i_1 w_{i1g1}+i_2 w_{i2g1}+i_3 w_{i3g1}+b_{g1}=g_{1(input)} (i)
\sigma(g_{1(input)})=\frac{1}{1+e^{-g_{1(input)}}} (ii)

 

Yukarıdaki işlemler 1.katmandaki bütün nöronlara uygulandığında aşağıdaki matris işlemi ortaya çıkacaktır:

 

Sigmoid işlemi:

 

 

(ii) numaralı işlem, bir sonraki katmanda ReLU aktivasyon fonksiyonu kullanılarak tekrarlanacaktır.

2.Katman

Bir önceki katmandaki nöronların her birinin çıkış değeri (Sigmoid fonksiyonundan elde edilen değer), bir sonraki katman ile arasında bulunan ağırlıklarla çarpılır ve yine bir sonraki katmandaki her bir nörona denk gelen çarpımlar toplanarak o nöronun girdisi oluşturulur.

Bu katmanda da, bir önceki katmanda olduğu gibi iki aşamadan bahsedilebilir. (i) Önceki gizli katmandan elde edilen çıkış değerleri (g_{x(output)}) , kendilerine karşılık gelen ağırlık (W_{gk}) değerleriyle çarpılmış ve daha sonra da bu çarpım değerleri toplanarak (k_{x(input)}) değerleri elde edilmiştir. (ii) Bu katmanda belirlenen aktivasyon fonksiyonu ReLU olduğundan k_{x(input)} değerleri, ReLU fonksiyonuna sokularak k_{x(output)} değerleri elde edilir.

 

g_{1{(output)}}w_{g1k1}+g_{2(output)}w_{g2k1}+g_{3(output)}w_{g3k1}+g_{4(output)}w_{g4k1}+b_{k1}=k_{1(input)} (i)
ReLU(k_{1(input)})=\max (0,k_{1(input)}) (ii)

 

Bir önceki katmanda olduğu gibi burada da gösterilen işlemler bütün katmana uygulandığında aşağıdaki matris işlemi oluşacaktır:

ReLu işlemi:

ReLU(x)=\max(0,x)

3.Katman

Bir önceki katmanda kullanılan ReLu fonksiyonundan elde edilen sonuçlar için yine daha önceki katmanlarda gerçekleştirilen denk gelen ağırlıklarla çarpma ve her bir nörona denk gelen çarpım değerlerinin toplanması işlemleri aynen bu katmanda da tekrarlanır.

Yine daha önceki katmanlarda olduğu gibi çıkış katmanındaki nöronlar da iki bölüme ayrılabilir. (i) İlk bölüm olan o_{x(input)}, k_{x(output)} ve w_{ko} değerlerinin çarpılması ve çarpım değerlerinin toplanmasıyla oluşur. (ii) Daha sonra o_{x(input)} değeri, yine bu katman için belirlenmiş olan aktivasyon fonksiyonundan geçirilir ve o_{x(output)} değeri hesaplanır. Böylece ağın sonucu (tahmin değeri) elde edilmiş olur.

k_{1{(output)}}w_{k1o1}+k_{2(output)}w_{k2o1}+k_{3(output)}w_{k3o1}+k_{4(output)}w_{k4o1}+b_{o1}=o_{1(input)} (i)
Softmax(o_{1(input)})=\frac{e^{o_{1(input)}}}{\sum_{x=1}^{2}e^{o_{x(input)}}} (ii)

Diğer katmanlardan farklı olarak çıkış katmanındaki aktivasyon fonksiyonundan elde edilen sonuç (o_{x(output)}), yapay sinir ağının tahmin (çıkarım) sonucunu belirtecektir. Sınıflandırma problemleri için çıkış katmanında kullanılan nöron sayısı önemlidir ve veri setinde kaç tane sınıf etiketi (kedi, köpek, kuş vs.) varsa o kadar nöron bulunur.

Bir önceki katmanda olduğu gibi burada da gösterilen işlemler bütün katmana uygulandığında aşağıdaki matris işlemi oluşacaktır:

 

Softmax işlemi:

Softmax(x_{j})=\frac{e^{x_{j}}}{\sum_{k=1}^{K}e^{x_{k}}}

Çıkış katmanında aktivasyon fonksiyonu olarak Softmax kullanılmasının sebebi, veri setindeki her bir sınıf için bir olasılık değeri hesaplanmasıdır. Aynı zamanda Softmax fonksiyonu, giriş değerlerini 0 ve 1 aralığına çeker ve bu değerlerin toplamları 1 olacak şekilde bölme işlemi uygular. Örnek bir uygulama şu şekilde olacaktır:

Resim 1: Softmax işlemi

Bir yapay sinir ağında, girdi katmanından çıktı katmanına kadar gerçekleştirilen bütün bu ileri yönlü hesaplama akışına İleri Yayılım Algoritması adı verilmektedir.

Daha önce de bahsedildiği gibi ileri yayılım algoritması sonucunda elde edilen değerler, sinir ağının oluşturduğu tahmin değerleridir. Bu yüzden tahmin değerleri çoğu zaman %100 doğrulukta olamamaktadır ve tahmin değeriyle gerçek değer arasında bir fark olacaktır. Bu hatanın olabildiğince küçültülmesi için farklı yöntemler geliştirilmiştir. Yazının geri kalanında, hatanın küçültülmesi için kullanılan yöntemlerden biri olan Geri Yayılım Algoritması açıklanacaktır.

Geri yayılım algoritmasına göre, ileri yayılım algoritması sonucunda hesaplanan hata değeri, sinir ağı üzerinde çıktı katmanından girdi katmanına doğru olacak şekilde çeşitli türev işlemlerine dâhil edilerek “geriye doğru yayılmış” olur. Bunun için öncelikle hata değerinin hesaplanması gerekir.

 

Hata

Mean Square Error (Kareler Ortalama Hatası):

E=\frac{1}{2n}\sum_{k=1}^{K}(y_{k}-o_{k(output)})^{2}

Yukarıdaki formülde kullanılan n notasyonu, veri setinin eğitim için ayrılan kümesinde kaç tane veri olduğunu gösterir. Formülasyonun adındaki “ortalama” ifadesi buradan gelmektedir. Bu yazıda anlatılan sinir ağı yapısına göre K=2’dir. Çünkü çıktı katmanında 2 tane nöron kullanılmıştır ve dolayısıyla hata miktarı hesaplanabilecek 2 tane tahmin değeri vardır (E_1 ve E_2). Anlatımın basitleştirilmesi açısından tek bir çıkış nöronunun hatası alınmış ve n=1 olarak değerlendirilmiştir.

E=\frac{1}{2}\sum_{k=1}(y_{k}-o_{k(output)})^{2}

Artık herhangi bir k değeri için o_{k(output)} değerinin, yapay sinir ağındaki ağırlık değerleri kullanılarak hesaplandığı bilinmektedir. Buna göre, sinir ağındaki ağırlık değerlerinde yapılacak değişiklikler ağın üreteceği tahmin değerlerini ve dolayısıyla toplam hata değerini de etkileyecektir. Amaç, hata değerinin küçültülmesi olduğuna göre, bir sonraki adımda belirlenmesi gereken şey; sayısal olarak hangi ağırlık değerlerinin hata fonksiyonunu en küçük seviyede tuttuğudur. İşte geri yayılım algoritması, belirtilen ağırlık değerlerinin bulunmasına yardımcı olan ve yapay sinir ağları konusunda en çok kullanılan algoritmalardan birisidir.

\Delta W_{ko}=-\eta \frac{\partial E}{\partial W_{ko}}

Yukarıda gösterilen formül, çıktı katmanı ile bir önceki gizli katman arasındaki ağırlık değerlerinin her birisi için değişim miktarını göstermektedir. Basitliğin ve anlaşılırlığın sağlanabilmesi için tek bir ağırlık değeri üzerinde yapılacak işlem, aşağıda gösterildiği gibidir:

\Delta w_{k1o1}=-\eta \frac{\partial E_1}{\partial w_{k1o1}}

Görüldüğü üzere, değişim miktarının hesaplanabilmesi için öncelikle \frac{\partial E_1}{\partial w_{k1o1}} değerinin hesaplanması gereklidir. Bahsedilen değerin hesaplanması, aşağıdaki adımlar takip edilerek gerçekleştirilir:

Hata değerinin, çıktı katmanındaki nöronların çıkış değerine göre kısmi türevi alınır. Anlatım kolaylığı açısından formülasyonda sadece 1. çıktı katmanı nöronunun (o_{1(output)}) hata değeri üzerinden gidilmiştir.

\frac{\partial E_1}{\partial o_{1(output)}}=\frac{\partial (\frac{1}{2}(y_1-o_{1(output)})^{2})}{\partial o_{1(output)}}

\frac{\partial E_1}{\partial o_{1(output)}}\frac{\partial E_1}{\partial o_{1(output)}}=-\frac{1}{2}\cdot 2(y_1-o_{1(output)})=(o_{1(output)}-y_1)

\begin{bmatrix}\frac{\partial E_1}{\partial o_{1(output)}} \\ \frac{\partial E_2}{\partial o_{2(output)}}\end{bmatrix}=\begin{bmatrix}o_{1(output)}-y_1\\ o_{2(output)}-y_2\end{bmatrix}

Çıktı katmanındaki nöronların çıkış değerlerinin (o_{k(output)}), yine çıktı katmanındaki nöronların giriş değerlerine (o_{k(input)}) göre kısmi türevi alınır.

\frac{\partial o_{1(output)}}{\partial o_{1(input)}}=\frac{\partial (\frac{e^{o_{1(input)}}}{e^{o_{1(input)}}+e^{o_{2(input)}}})}{\partial o_{1(output)}}

\frac{\partial o_{1(output)}}{\partial o_{1(input)}}=\frac{e^{o_{1(input)}}\times(e^{o_{1(input)}}+e^{o_{2(input)}})}{(e^{o_{1(input)}}+e^{o_{2(input)}})^{2}}

\begin{bmatrix}<br /> \frac{\partial o_{1(output)}}{\partial o_{1(input)}}\\\frac{\partial o_{2(output)}}{\partial o_{2(input)}}\end{bmatrix}=\begin{bmatrix}\frac{e^{o_{1(input)}}\times(e^{o_{1(input)}}+e^{o_{2(input)}})}{(e^{o_{1(input)}}+e^{o_{2(input)}})^{2}}\\\frac{e^{o_{2(input)}}\times(e^{o_{1(input)}}+e^{o_{2(input)}})}{(e^{o_{1(input)}}+e^{o_{2(input)}})^{2}}\end{bmatrix}

Çıktı katmanındaki nöronların giriş değerlerinin (o_{k(input)}), bir önceki katmanla arasındaki ağırlık değerlerine göre (W_{ko}) kısmi türevi alınır.

\frac{\partial o_{1(input)}}{\partial w_{k1o1}}=\frac{\partial (k_{1{(output)}}w_{k1o1}+k_{2(output)}w_{k2o1}+k_{3(output)}w_{k3o1}+k_{4(output)}w_{k4o1}+b_{o})}{\partial w_{k1o1}}

\frac{\partial o_{1(input)}}{\partial w_{k1o1}}=k_{1{(output)}}

\begin{bmatrix}\frac{\partial o_{1(input)}}{\partial w_{k1o1}}\\ \frac{\partial o_{1(input)}}{\partial w_{k2o1}}\\ \frac{\partial o_{1(input)}}{\partial w_{k3o1}}\\ \frac{\partial o_{1(input)}}{\partial w_{k4o1}}\end{bmatrix}=\begin{bmatrix}k_{1{(output)}}\\ k_{2{(output)}}\\ k_{3{(output)}}\\ k_{4{(output)}}\end{bmatrix}

\begin{bmatrix}\frac{\partial o_{2(input)}}{\partial w_{k1o2}}\\ \frac{\partial o_{2(input)}}{\partial w_{k2o2}}\\ \frac{\partial o_{2(input)}}{\partial w_{k3o2}}\\ \frac{\partial o_{2(input)}}{\partial w_{k4o2}}\end{bmatrix}=\begin{bmatrix}k_{1{(output)}}\\ k_{2{(output)}}\\ k_{3{(output)}}\\ k_{4{(output)}}\end{bmatrix}

Yukarıdaki akışta anlatılan hesaplamalar, zincir kuralına tabi tutulur. Böylece 3 aşamalı basit bir çarpma işlemi ortaya çıkar.

\frac{\partial E}{\partial w_{k1o1}}=\frac{\partial E}{\partial o_{1(output)}}\frac{\partial o_{1(output)}}{\partial o_{1(input)}}\frac{\partial o_{1(input)}}{\partial w_{k1o1}}

\frac{\partial E}{\partial w_{k1o1}}=(o_{1(output)}-y_1)\times \frac{e^{o_{1(input)}}\times(e^{o_{1(input)}}+e^{o_{2(input)}})}{(e^{o_{1(input)}}+e^{o_{2(input)}})^{2}}\times k_{1(output)}

Katmandaki ağırlıkların güncellenme denklemleri aşağıdaki şekilde gösterilebilir:

W_{ko}^{(yeni)}=\begin{bmatrix}w_{k1o1}-\eta \frac{\partial E}{\partial w_{k1o1}}&w_{k1o2}-\eta \frac{\partial E}{\partial w_{k1o2}}\\w_{k2o1}-\eta \frac{\partial E}{\partial w_{k2o1}}&w_{k2o2}-\eta \frac{\partial E}{\partial w_{k2o2}}\\w_{k3o1}-\eta \frac{\partial E}{\partial w_{k3o1}}&w_{k3o2}-\eta \frac{\partial E}{\partial w_{k3o2}}\\w_{k1o1}-\eta \frac{\partial E}{\partial w_{k1o1}}&w_{k1o1}-\eta \frac{\partial E}{\partial w_{k1o1}}\end{bmatrix}

Yukarıda anlatılan hesaplama, aşağıdaki şekilde gösterilen katmanlar arasındaki ağırlıkların güncellenmesi için yapılmıştır.

Bir sonraki adım, daha önceki katmanlar arasında kullanılan ağırlıkların güncellenmesi olacaktır. Bu aşamada gerçekleştirilecek işlemler, yukarıda anlatılandan daha farklı bir mantıkta olmayacaktır. Sadece formülasyonda küçük değişiklikler yapılarak önceki katmanlardaki ağırlık değerlerinin de güncelleme formülü çıkarılabilir.

Daha önce olduğu gibi yine bir ağırlıkta meydana gelecek değişim değerinin hesaplanması gerekir. Bunun için daha önce kullanılan ağırlık değişim formülü, diğer ağırlıklar için yazıldığında aşağıdaki formül elde edilir:

\Delta W_{gk}=-\eta \frac{\partial E}{\partial W_{gk}}

Aynı şekilde formül içerisindeki \frac{\partial E}{\partial W_{gk}} teriminin hesaplanması gereklidir. Artık zincir kuralına göre hesaplama bilindiğine göre \frac{\partial E}{\partial W_{gk}} terimi, zincir kuralından elde edilebilir. Daha önceki zincir kuralındaki terimlerden farklı olarak, burada öncelikle hata değerinin, gizli katmandaki nöronların çıktı değerlerine göre kısmi türevi alınır.

\frac{\partial E}{\partial w_{g1k1}}=\frac{\partial E}{\partial k_{1(output)}}\frac{\partial k_{1(output)}}{\partial k_{1(input)}}\frac{\partial k_{1(input)}}{\partial w_{g1k1}}

\frac{\partial E}{\partial k_{1(output)}} terimindeki E değerinin, toplam hatayı gösterdiği bilinmektedir. Bu durumda aşağıdaki gibi bir formül elde edilebilir:

\frac{\partial E}{\partial k_{1(output)}}=\frac{\partial E_1}{\partial k_{1(output)}}+\frac{\partial E_2}{\partial k_{1(output)}}

Eşitliğin sağ tarafındaki iki terimin açılımı yapılırsa aşağıdaki iki formül elde edilir:

\frac{\partial E_1}{\partial k_{1(output)}}=\frac{\partial E_1}{\partial o_{1(output)}}\frac{\partial o_{1(output)}}{\partial o_{1(input)}}\frac{\partial o_{1(input)}}{\partial k_{1(output)}}

\frac{\partial E_2}{\partial k_{1(output)}}=\frac{\partial E_2}{\partial o_{2(output)}}\frac{\partial o_{2(output)}}{\partial o_{2(input)}}\frac{\partial o_{2(input)}}{\partial k_{1(output)}}

Yukarıdaki formüllerde, eşitliğin sağ tarafındaki ilk iki terim zaten daha önceden hesaplanmıştı. Üçüncü terimin cevabı ise direkt olarak o nörona denk gelen ağırlıktır.

\frac{\partial o_{1(input)}}{\partial k_{1(output)}}=\frac{\partial (k_{1{(output)}}w_{k1o1}+k_{2(output)}w_{k2o1}+k_{3(output)}w_{k3o1}+k_{4(output)}w_{k4o1}+b_{o})}{\partial k_{1(output)}}

\frac{\partial o_{1(input)}}{\partial k_{1(output)}}=w_{k1o1}

\frac{\partial E_1}{\partial k_{1(output)}} terimi, gizli katmandaki diğer nöronlar için genellendiğinde aşağıdaki matris gösterimi elde edilir:

Bir sonraki terim olan \frac{\partial k_{1(output)}}{\partial k_{1(input)}} için türev değeri, aşağıda gösterildiği gibidir:

ReLU(x)=\max (0,x)

\left\{\begin{matrix}x>0,&\frac{\partial(ReLU(x))}{\partial x}=1\\x\leqslant 0,&\frac{\partial(ReLU(x))}{\partial x} = 0\end{matrix}\right.

\frac{\partial k_{1(output)}}{\partial k_{1(input)}}=\frac{\partial(ReLU(k_{1(input)}))}{\partial k_{1(input)}}

Yukarıda gösterilen kısmi türevin değeri, k_{1(input)}‘in değerine göre ya 0 ya da 1 olacaktır.

\begin{bmatrix}\frac{\partial k_{1(output)}}{\partial k_{1(input)}}\\ \frac{\partial k_{2(output)}}{\partial k_{2(input)}}\\ \frac{\partial k_{3(output)}}{\partial k_{3(input)}}\\ \frac{\partial k_{4(output)}}{\partial k_{4(input)}}\end{bmatrix}=\begin{bmatrix}\frac{\partial(ReLU(k_{1(input)}))}{\partial k_{1(input)}}\\\frac{\partial(ReLU(k_{2(input)}))}{\partial k_{2(input)}}\\\frac{\partial(ReLU(k_{3(input)}))}{\partial k_{3(input)}}\\ \frac{\partial(ReLU(k_{4(input)}))}{\partial k_{4(input)}}\end{bmatrix}

Zincir kuralındaki son terim olan \frac{\partial k_{1(input)}}{\partial w_{g1k1}} ifadesinin kısmi türev gösterimi aşağıdaki gibidir:

\frac{\partial k_{1(input)}}{\partial w_{g1k1}}= \frac{\partial (g_{1{(output)}}w_{g1k1}+g_{2(output)}w_{g2k1}+g_{3(output)}w_{g3k1}+g_{4(output)}w_{g4k1}+b_{g})}{\partial w_{g1k1}}

\frac{\partial k_{1(input)}}{\partial w_{g1k1}}=g_{1(output)}

Anlatılan formülasyon, katman için genelleştirildiğinde aşağıdaki gibi gösterilebilir:

\begin{bmatrix}\frac{\partial k_{1(input)}}{\partial w_{g1k1}}\\\frac{\partial k_{1(input)}}{\partial w_{g2k1}}\\\frac{\partial k_{1(input)}}{\partial w_{g3k1}}\\\frac{\partial k_{1(input)}}{\partial w_{g4k1}}\end{bmatrix}=\begin{bmatrix}g_{1(output)}\\g_{2(output)}\\g_{3(output)}\\g_{4(output)}\end{bmatrix}

\begin{bmatrix}\frac{\partial k_{2(input)}}{\partial w_{g1k2}}\\\frac{\partial k_{2(input)}}{\partial w_{g2k2}}\\\frac{\partial k_{2(input)}}{\partial w_{g3k2}}\\\frac{\partial k_{2(input)}}{\partial w_{g4k2}}\end{bmatrix}=\begin{bmatrix}g_{1(output)}\\g_{2(output)}\\g_{3(output)}\\g_{4(output)}\end{bmatrix}

\begin{bmatrix}\frac{\partial k_{3(input)}}{\partial w_{g1k3}}\\\frac{\partial k_{3(input)}}{\partial w_{g2k3}}\\\frac{\partial k_{3(input)}}{\partial w_{g3k3}}\\\frac{\partial k_{3(input)}}{\partial w_{g4k3}}\end{bmatrix}=\begin{bmatrix}g_{1(output)}\\g_{2(output)}\\g_{3(output)}\\g_{4(output)}\end{bmatrix}

\begin{bmatrix}\frac{\partial k_{4(input)}}{\partial w_{g1k4}}\\\frac{\partial k_{4(input)}}{\partial w_{g2k4}}\\\frac{\partial k_{4(input)}}{\partial w_{g3k4}}\\\frac{\partial k_{4(input)}}{\partial w_{g4k4}}\end{bmatrix}=\begin{bmatrix}g_{1(output)}\\g_{2(output)}\\g_{3(output)}\\g_{4(output)}\end{bmatrix}

Bütün bu işlemler tamamlandıktan sonra, en son yazılan zincir kuralı tekrar hatırlanırsa, yine 3 aşamalı bir çarpma işlemi oluşacaktır.

\frac{\partial E}{\partial w_{g1k1}}=\frac{\partial E}{\partial k_{1(output)}}\frac{\partial k_{1(output)}}{\partial k_{1(input)}}\frac{\partial k_{1(input)}}{\partial w_{g1k1}}

Katmandaki ağırlıkların güncellenme denklemleri aşağıdaki şekilde gösterilebilir:

Son olarak girdi katmanı ile ondan bir sonraki gizli katman arasındaki ağırlıkların güncellenmesi gerekir. Bahsedilen güncelleme işlemi, yine daha önceki işlemlerden çok da farklı olmayacaktır. Daha önce de olduğu gibi en çok dikkat edilmesi gereken konu, katmanlara özel olarak kullanılan aktivasyon fonksiyonlarının türevleridir.

 

Öncelikle toplam hatanın, bu katmanda güncellenecek olan ağırlık değerlerine göre kısmi türevi alınmalıdır. Bahsedilen durum aşağıdaki zincir kuralında görülebilir:

\frac{\partial E}{\partial w_{i1g1}}=\frac{\partial E}{\partial g_{1(output)}}\frac{\partial g_{1(output)}}{\partial g_{1(input)}}\frac{\partial g_{1(input)}}{\partial w_{i1k1}}

İlk adım olarak \frac{\partial E}{\partial g_{1(output)}} teriminin açılımı yazılır:

\frac{\partial E}{\partial g_{1(output)}}=\frac{\partial E_1}{\partial g_{1(output)}}+\frac{\partial E_2}{\partial g_{1(output)}}

Yine eşitliğin sağ tarafındaki iki terimin açılımı yapıldığında aşağıdaki eşitlikler elde edilir:

\frac{\partial E_1}{\partial g_{1(output)}}=\frac{\partial E_1}{\partial k_{1(output)}}\frac{\partial k_{1(output)}}{\partial k_{1(input)}}\frac{\partial k_{1(input)}}{\partial g_{1(output)}}

\frac{\partial E_2}{\partial g_{1(output)}}=\frac{\partial E_2}{\partial k_{1(output)}}\frac{\partial k_{1(output)}}{\partial k_{1(input)}}\frac{\partial k_{1(input)}}{\partial g_{1(output)}}

Yukarıdaki eşitliklerin sağ tarafındaki ifadelerden ilk iki tanesi daha önceden hesaplanmıştı. Son terim olan \frac{\partial k_{1(input)}}{\partial g_{1(output)}} ifadesinin cevabı ise daha önce de olduğu gibi, o nörona denk gelen ağırlıktır.

\frac{\partial k_{1(input)}}{\partial g_{1(output)}}= \frac{\partial (g_{1{(output)}}w_{g1k1}+g_{2(output)}w_{g2k1}+g_{3(output)}w_{g3k1}+g_{4(output)}w_{g4k1}+b_{k})}{\partial g_{1(output)}}

\frac{\partial k_{1(input)}}{\partial g_{1(output)}}=w_{g1k1}

Bu işlemler genelleştirildiğinde aşağıdaki matris gösterimi elde edilir:

Daha sonra  ifadesinin hesaplanması aşağıda gösterildiği gibi yapılmaktadır:

\frac {\partial g_{1(output)}}{\partial g_{1(input)}}=\frac {\partial (Sigmoid(g_{1(input)}))}{\partial g_{1(input)}}

\frac {\partial g_{1(output)}}{\partial g_{1(input)}}=Sigmoid(g_{1(input)})\times (1-Sigmoid(g_{1(input)}))

Bu işlem bütün katman için genelleştirildiğinde aşağıdaki gösterim elde edilir:

\begin{bmatrix}\frac {\partial g_{1(output)}}{\partial g_{1(input)}}\\\frac {\partial g_{2(output)}}{\partial g_{2(input)}}\\\frac {\partial g_{3(output)}}{\partial g_{3(input)}}\\\frac {\partial g_{4(output)}}{\partial g_{4(input)}}\end{bmatrix}=\begin{bmatrix}Sigmoid(g_{1(input)})\times (1-Sigmoid(g_{1(input)}))\\Sigmoid(g_{2(input)})\times (1-Sigmoid(g_{2(input)}))\\Sigmoid(g_{3(input)})\times (1-Sigmoid(g_{3(input)}))\\Sigmoid(g_{4(input)})\times (1-Sigmoid(g_{4(input)}))\end{bmatrix}

Zincir kuralındaki son ifade olan \frac {\partial g_{1(input)}}{\partial w_{i1g1}} ifadesinin kısmi türev gösterimi aşağıdaki gibidir:

\frac {\partial g_{1(input)}}{\partial w_{i1g1}}=\frac {\partial (i_1w_{i1g1}+i_2w_{i2g1}+i_3w_{i3g1}+b_i)}{\partial w_{i1g1}}

\frac {\partial g_{1(input)}}{\partial w_{i1g1}}=i_1

Anlatılan formülasyon, katman için genelleştirildiğinde aşağıdaki gibi gösterilebilir:

\begin{bmatrix}\frac {\partial g_{1(input)}}{\partial w_{i1g1}}\\\frac {\partial g_{1(input)}}{\partial w_{i2g1}}\\\frac {\partial g_{1(input)}}{\partial w_{i3g1}}\end{bmatrix}=\begin{bmatrix}i_1\\i_2\\i_3\end{bmatrix}

\begin{bmatrix}\frac {\partial g_{2(input)}}{\partial w_{i1g2}}\\\frac {\partial g_{2(input)}}{\partial w_{i2g2}}\\\frac {\partial g_{2(input)}}{\partial w_{i3g2}}\end{bmatrix}=\begin{bmatrix}i_1\\i_2\\i_3\end{bmatrix}

\begin{bmatrix}\frac {\partial g_{3(input)}}{\partial w_{i1g3}}\\\frac {\partial g_{3(input)}}{\partial w_{i2g3}}\\\frac {\partial g_{3(input)}}{\partial w_{i3g3}}\end{bmatrix}=\begin{bmatrix}i_1\\i_2\\i_3\end{bmatrix}

\begin{bmatrix}\frac {\partial g_{4(input)}}{\partial w_{i1g4}}\\\frac {\partial g_{4(input)}}{\partial w_{i2g4}}\\\frac {\partial g_{4(input)}}{\partial w_{i3g4}}\end{bmatrix}=\begin{bmatrix}i_1\\i_2\\i_3\end{bmatrix}

Katmandaki ağırlıkların güncellenme denklemleri aşağıdaki şekilde gösterilebilir:

W_{ig}^{(yeni)}=\begin{bmatrix}w_{i1g1}-\eta \frac{\partial E}{\partial w_{i1g1}} & w_{i1g2}-\eta \frac{\partial E}{\partial w_{i1g2}} & w_{i1g3}-\eta \frac{\partial E}{\partial w_{i1g3}} & w_{i1g4}-\eta \frac{\partial E}{\partial w_{i1g4}} \\w_{i2g1}-\eta \frac{\partial E}{\partial w_{i2g1}} & w_{i2g2}-\eta \frac{\partial E}{\partial w_{i2g2}} & w_{i2g3}-\eta \frac{\partial E}{\partial w_{i2g3}} & w_{i2g4}-\eta \frac{\partial E}{\partial w_{i2g4}} \\w_{i3g1}-\eta \frac{\partial E}{\partial w_{i3g1}} & w_{i3g2}-\eta \frac{\partial E}{\partial w_{i3g2}} & w_{i3g3}-\eta \frac{\partial E}{\partial w_{i3g3}} & w_{i3g4}-\eta \frac{\partial E}{\partial w_{i3g4}}\end{bmatrix}

 

Referanslar

Kullanılan formüller için: https://medium.com/@14prakash/back-propagation-is-very-simple-who-made-it-complicated-97b794c97e5c

Softmax görüntüsü için: https://github.com/Kulbear/deep-learning-nano-foundation/wiki/ReLU-and-Softmax-Activation-Functions

The following two tabs change content below.

Doruk Sönmez

Latest posts by Doruk Sönmez (see all)

Bir Cevap Yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.