Derin Öğrenmede Yapay Sinir Ağları Nasıl Öğrenir?

Esma Bozkurt
5 min readFeb 20, 2023

Derin öğrenme, veri işlemede insan beyninin işleyişini taklit eden bir makine öğrenimi alt dalıdır. Amaç beyindeki sinir ağlarının modellenmesini oluşturmak ve problemlere insansı çözümler üretmektir. Bu şekilde makinelerin insan denetimi olmadan öğrenmesini sağlar. Bunun için de yapay sinir ağlarını (artificial neural networks) kullanır. Sinir ağları tek katmanlı veya çok katmanlı olabilir. Derin öğrenme modelleri çok katmanlı sinir ağlarının üzerine temellendirilmiştir.

Sinir ağlarındaki işleyişi anlayabilmek için nöronlardaki impulse iletimini düşünebiliriz. Burada dentrit uçlardan alınan veriler çekirdekte ağırlandırılarak (w ile çarpılarak) akson boyunca iletiliyor ve başka bir sinir hücresine bağlanıyor. Bir nörondan çıkan aksonlar (x‘ler) diğer nöronun girdileri olmuş oluyor. Bu şekilde sinirler arası iletim sağlanmış oluyor. Bunu bilgisayarda modelleyip eğitebilmemiz için bu işlemin algoritmasını bilmemiz gerekir yani girdilere bir dizi komutlar uygulayarak çıktı elde edebilmemiz gerekir. Peki bunu matematiksel olarak nasıl ifade edebiliriz?

Resimdeki [1] ve [2] değerleri katman numaralarını ifade etmekte olup üst kısımda tek katmanlı bir ağ yapısını ve alt kısımda basit bir çok katmanlı ağ yapısını görmektesiniz (1 gizli katman eklenerek 2 katmanlı olmuştur). Anlaşılabilir olması için ikisini aynı anda incelemek faydalı olacaktır.

Burada X girdi değerleri başlangıçta rastgele değerler verilen w ağırlıklarıyla (bu ağırlıklar girdilerin önemini yansıtıyor) çarpılıyor ve bias (modelleme sonucunda tahmin edilen veriler ile gerçek veriler arasındaki uzaklığı yansıtan hata/sapma değeri) eklenerek z değeri elde ediliyor, bu değerin ortak düğümde (nöron) bir aktivasyon fonksiyonuna (sigmoid) tabi tutulmasıyla elde edilen a değeri bizim çıkışımız oluyor ve bu a değeri istenilen y değeri ile bir loss fonksiyonuna (modelin hata oranı hakkında bilgi verir) tabi tutuluyor. İlk olarak bu loss fonksiyonu yüksek bir değerde olacaktır çünkü sistem daha yeni öğrenmeye başladı.

Daha sonra geriye giderek tüm işleri tersi yönde yapmamız gerekiyor. Sigmoidde türevini alarak geriye doğru gidiyoruz (geriye yayılım) ve elde edilen değerleri not ediyoruz. Bu işlemde yeni ağırlık değerleri önemli hale geliyor çünkü tekrar ileri giderken bu yeni ağırlık değerlerini kullanacağız. İleri beslemeli geriye yayılım algoritması adını verdiğimiz bu işleme loss’u minimuma yakınsayıp en iyi modeli bulana kadar devam ediyoruz.

Yukarıdaki resimde 4 nörona sahip 1 gizli katman ve tek nöronlu çıkış katmanı olmak üzere 2 katmanlı sinir ağını görüyorsunuz. Giriş katmanının (0.katman) katman sayısına etkisi yoktur. Bu değerler w(bulunduğu katmandaki nöron sayısı, girdi değerlerinin sayısı) ve b(bulunduğu katmandaki nöron sayısı, 1) olarak ifade edilir. Gizli katmanın girdileri x olup, çıkış katmanının girdileri a değerleridir:

Aktivasyon fonksiyonu olarak burada sigmoid kullanılmış olsa da, hyperbolic tangent, ReLU, Leaky ReLU vs. kullanılabilir. Bu fonksiyonlar katmanlarda kullanılır ve türevlenebilir olmalıdır. Çünkü geriye yayılımda türev işlemi alarak ağırlıkları güncelliyoruz.

Hyperbolic tangent (tanh), sigmoid’in -1 ile +1 arasında kaydırılmış halidir. Ortalaması 0 olduğundan ortalaması 0,5 olan sigmoid fonksiyonuna göre daha iyi performans sergiliyor diyebiliriz. Aynı şekilde üsteldir.

Ara katmanlarda tanh ve çıkış katmanlarında sigmoid kullanmak daha mantıklıdır. Özellikle çıkışta 0–1 aralığında bir değer istiyorsak sigmoid kullanmalıyız çünkü sigmoid 0–1 aralığındadır.

Son zamanlarda derin öğrenmede en çok ReLU aktivasyon fonksiyonu kullanılır. ReLU’da 0’dan küçük kısımlar türevlenebilir olmadığından işleme katılamaz ve o kısımda öğrenme gerçekleşmez. Leaky ReLU’da 0’dan küçük değerler de türevlenebilir olup her değer için bir sonuç olduğundan her durumda öğrenme gerçekleşiyor demektir.

Burada maliyet (cost) fonksiyonundaki y^ ve y ‘yi istenilen değer ile aldığımız değerin farkın ortalaması olarak ifade edebiliriz.

Gradyan iniş (Gradient Descent) algoritmasındaki amaç da maliyeti minimalize etmektir. Bunun için başka yöntemler de vardır. Modelimizi optimize edebilmek için minimuma yakınsama önemlidir. Buradaki alfa değeri öğrenme oranıdır (learning rate).

Geriye Yayılım Algoritması ve Zincir Kuralı (Backpropagation Algorithm & Chain Rule)

Geriye yayılımda türev alarak geriye doğru gidiyoruz demiştik. Bunu bir örnek üzerinden inceleyelim:

Örnekte sigmoid fonksiyonu kullanıldığını ve çıkışta f’in sonucunun (kendisinin türevi) 1 olduğunu varsayarak adım adım ilerleyelim. En sondaki 1/x işleminin türevini alarak geriye doğru gidelim:

İlk olarak d(1/x)/dx= (-1/x²) → x yerine 1.37 koyup kırmızıyla belirtilen 1 değeriyle çarpılır→ -0.53 :

Bir önceki işleme geçilir. +1 işlemindeki toplam türevinden d(c+x)/dx=1 gelecektir ve az önceki -0.53 değeriyle çarpılır → -0.53 :

Diğer işlemde e üzeri x in türevi yine kendisidir ve (e^-1.00)*-0.53 =-0.20 bulunur. Bulduğumuz -0.20 değerini bu sefer de bir gerideki çarpımın türevi d(ax)/dx=-1 ile çarparız ve diğer değerimiz 0.20 olur. Bu şekilde geriye doğru tüm işlemleri yaparsak yeni ağırlıkları hesaplamış oluyoruz:

Bu işlemi şu şekilde de ifade edebiliriz:

Çok katmanlı sinir ağlarında başlangıç değerleri tek katmanlıdaki gibi 0 seçilemez çünkü türevleri de kendisinin aynısı olacağından öğrenme gerçekleşmeyecektir. Dolayısıyla başlangıçta rastgele (random) değerler seçmeliyiz.

Son olarak iki katmanlı bir ağ modelinin Python kodunu aşağıda inceleyebilirsiniz. Bir sonraki yazımda görüşmek üzere!

Kaynak: deeplearning.ai

--

--