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.
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.
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 ‘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 ‘ta ise ’in değeri, bu katmanda kullanılması planlanmış Sigmoid fonksiyonuna sokulur.
(i) | |
(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 () , kendilerine karşılık gelen ağırlık () değerleriyle çarpılmış ve daha sonra da bu çarpım değerleri toplanarak () değerleri elde edilmiştir. (ii) Bu katmanda belirlenen aktivasyon fonksiyonu ReLU olduğundan değerleri, ReLU fonksiyonuna sokularak değerleri elde edilir.
(i) | |
(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:
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 , ve değerlerinin çarpılması ve çarpım değerlerinin toplanmasıyla oluşur. (ii) Daha sonra değeri, yine bu katman için belirlenmiş olan aktivasyon fonksiyonundan geçirilir ve değeri hesaplanır. Böylece ağın sonucu (tahmin değeri) elde edilmiş olur.
(i) | |
(ii) |
Diğer katmanlardan farklı olarak çıkış katmanındaki aktivasyon fonksiyonundan elde edilen sonuç (), 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:
Çı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ı):
Yukarıdaki formülde kullanılan 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 ’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 ( ve ). Anlatımın basitleştirilmesi açısından tek bir çıkış nöronunun hatası alınmış ve olarak değerlendirilmiştir.
Artık herhangi bir 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.
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:
Görüldüğü üzere, değişim miktarının hesaplanabilmesi için öncelikle 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.
Çı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.
Çıktı katmanındaki nöronların giriş değerlerinin (), bir önceki katmanla arasındaki ağırlık değerlerine göre () kısmi türevi alınır.
Yukarıdaki akışta anlatılan hesaplamalar, zincir kuralına tabi tutulur. Böylece 3 aşamalı basit bir çarpma işlemi ortaya çıkar.
Katmandaki ağırlıkların güncellenme denklemleri aşağıdaki şekilde gösterilebilir:
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:
Aynı şekilde formül içerisindeki teriminin hesaplanması gereklidir. Artık zincir kuralına göre hesaplama bilindiğine göre 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.
terimindeki değerinin, toplam hatayı gösterdiği bilinmektedir. Bu durumda aşağıdaki gibi bir formül elde edilebilir:
Eşitliğin sağ tarafındaki iki terimin açılımı yapılırsa aşağıdaki iki formül elde edilir:
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.
terimi, gizli katmandaki diğer nöronlar için genellendiğinde aşağıdaki matris gösterimi elde edilir:
Bir sonraki terim olan için türev değeri, aşağıda gösterildiği gibidir:
Yukarıda gösterilen kısmi türevin değeri, ‘in değerine göre ya 0 ya da 1 olacaktır.
Zincir kuralındaki son terim olan ifadesinin kısmi türev gösterimi aşağıdaki gibidir:
Anlatılan formülasyon, katman için genelleştirildiğinde aşağıdaki gibi gösterilebilir:
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.
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:
İlk adım olarak teriminin açılımı yazılır:
Yine eşitliğin sağ tarafındaki iki terimin açılımı yapıldığında aşağıdaki eşitlikler elde edilir:
Yukarıdaki eşitliklerin sağ tarafındaki ifadelerden ilk iki tanesi daha önceden hesaplanmıştı. Son terim olan ifadesinin cevabı ise daha önce de olduğu gibi, o nörona denk gelen ağırlıktır.
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:
Bu işlem bütün katman için genelleştirildiğinde aşağıdaki gösterim elde edilir:
Zincir kuralındaki son ifade olan ifadesinin kısmi türev gösterimi aşağıdaki gibidir:
Anlatılan formülasyon, katman için genelleştirildiğinde aşağıdaki gibi gösterilebilir:
Katmandaki ağırlıkların güncellenme denklemleri aşağıdaki şekilde gösterilebilir:
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
Doruk Sönmez
Latest posts by Doruk Sönmez (see all)
- Geri Yayılım Algoritması’na Matematiksel Yaklaşım - 28 Haziran 2018