Derin Öğrenme, Yapay Sinir Ağları

Açıklama : Derin Öğrenme nedir? Yapay Sinir Ağları nedir? Aktivasyon Fonksiyonu nedir? Forward Propagation ve Back Propagation nedir?  Gradient Descent nedir?

Derin öğrenme, insan beynini simüle ederek, nesneleri tanımlamayı öğrenen ve karmaşık görevleri artan doğrulukla gerçekleştiren sistemleri mümkün kılar – hem de insan müdahalesi olmadan.
Bir hücrenin gövdesi var, çeşitli hücresel organizmalar var. Kuyruk kısmı axon ve diğer hücreler ile bağlantıyı sağlayan kısım ise dendrit’ler. Pozitif veya negatif yüklerimiz var axon’ların üstünde pozitif ve negatif yüklerin yerleri değiştirilerek bir bilgi sağlanıyor. Beynin çalışma kısmında temel prensip bu diyebilirsiniz. Ne kadar çok bağlantı varsa hücreler arasında o kadar işlem gücü vardır. Bilgisayarlarda kullandığımız Central Process Unit’ler yani işlemcilerden farkı paralel olarak işlemler yapıyor olması, örneğin bilgisayarlarda 8 çekirdek 16 çekirdek daha profesyonel bilgisayarlarda 32 çekirdeğe kadar çıkabilir. Bilgisayarda işlemi sırası ile yapması gerekiyor ama beynimiz kokuyu alırken görüntü işleme de yapabiliyor gibi düşünebilirsiniz ve dokunabilirsiniz gibi.
İnsan beyni, gerçek dünyadaki durumların bağlamını bilgisayarların yapamayacağı şekilde yorumlar. Sinir ağları ilk olarak 1950’lerde bu sorunu çözmek için geliştirildi. Yapay bir sinir ağı, bilgisayarın bir şeyleri öğrenebilmesi ve insan benzeri bir şekilde kararlar alabilmesi için insan beynini oluşturan nöron ağını simüle etme girişimidir. YSA’lar, normal bilgisayarların birbirine bağlı beyin hücreleriymiş gibi davranması için programlanarak oluşturulur.
Tek bir nöron var ise eğer siz linear toplamı düşünebilirsiniz.
a = w1*x1 + w2*x2 + w3*x3 + w4*x4     z = g(a)
  • Aktivasyon fonksiyonu = g(a)
  • Aktivasyon fonksiyonu burada y değerini kontrol etmek için yani bir nöronun aktif olup olmayacağına karar vermek için kullanılmaktadır.
  • Sigmoid Fonksiyonu: En yaygın kullanılan aktivasyon fonksiyonlarından birisidir, [0,1] aralığında çıktı üretir.
Aynı zaman da lojistik fonksiyon da diyebilirsiniz. Sizin tek bir nöron ve tek bir Layer’ınız (katmanlar) var ise o zaman lojistik regresyon oluyor. Tipik bir Neural Network’de 3 tane katman olur. Girdi katmanı-input Layer’lar (katmanlar) sizin Feature’larınızı (özellik) temsil edecektir. Çıktı katmanları sizin tahmin etmek istediğiniz kısımdan oluşacaktır. Gizli katman ise belki duymuş olabilirsiniz, black-box (kara kutu) dediğiniz yer olacaktır. Lojistik Regresyon tek bir nöron olduğu için her şeyi görebiliyorsunuz ama nöron sayısı arttıkça yukarıda ki sağdaki şekil gibi olacaktır. Linear Regression’da siz hangi x değeri veya input değeri önemli sizin için çıkarım yapabiliyorsunuz ama yukarıda ki sağdaki sinir ağlarında siz black-box (kara kutu) dediğiniz kısımdan kaynaklı hangi feature (özellik) sizin için önemliden ziyade bir X input’unuz var ve Y output’unuz var diyebilirsiniz. Yani model içerisinden bir çıkarım yapamıyorsunuz, sizin için önemli olan hangi değişkenlerden ziyade çıktınız olacaktır.
  • Forward Propagation (İleri Yayılım): 
  • İlk olarak ağırlıkları (w) rastgele bir şekilde veriyorsunuz, küçük sayılar düşünebilirsiniz. Artık elinizde ağırlıklar var ve forward propagation yapabilirsiniz ve output (y)’u hesaplayabilirsiniz. Sizin elinizde gerçek y değerleri de var. Yukarıda ki sağdaki mor hidden-layer (gizli katman)’da hatayı hesaplayabilirsiniz ve hatayı hesapladıktan sonra hidden-layer(gizli katman)’da nöronların aralarında linear bir bağlantı olduğu için hangisi daha çok hataya katkı yapıyor onu hesaplayabilirsiniz. Hataya göre Back Propagate (Geri Yayılım) yapacaksınız.

(hata-error)e = (y –  ŷ)

  • Back Propagation (Geri Yayılım)
  • Hidden-layer ve Output-layer arasındaki hataya göre weight (ağırlık)’leri güncelleyeceksiniz. Daha sonra aynı şekilde input-layer (girdi katmanı), hidden-layer (gizli katman) arasında ki ağırlıkları güncelleyeceksiniz.

Daha sonra yeni ağırlıklar ile ileri yayılım yapacaksınız,  aynı şekilde hatayı hesaplayacaksınız. Tekrar geri yayılım yaptıktan sonra ağırlıkları güncelleyeceksiniz. Bu şekilde belirli sayıda iterasyon yaptıktan sonra, ağırlıklar belirlenecektir. Eniyileme yapıyorsunuz gibi düşünebilirsiniz.

  • Gradient Descent 
  • Gradient Descent (Gradyan Azalma), rastgele alınan değişkenlerle başlayarak global minimum değerine ulaşmayı amaçlar.
  • Bu algoritma sık kullanılmaz ama çoğu algoritma Gradient Descent’den türemiştir. Ağırlıkları nasıl güncelliyorsunuz, bu kısımda ondan bahsedeceğim.
  • Loss Fonksiyonu 
    Wo sizin ilk verdiğiniz değer, algoritma bunun ne olduğunu bilmiyor, rastgele atıyorsunuz bunu. O noktada Loss fonksiyonunun kısmi türevini ağırlığa göre alırsanız, kısmi türev bize tanjant eğrisini verecek. Ağırlığı ne tarafa götürmeniz gerektiğini söyleyecek. Ağırlıkları arttırabilirsiniz ya da azaltabilirsiniz. Kısmi türev size ne tarafa götürmenizi söyleyecektir. Eğimin pozitif ya da negatif olmasına göre bunu yapacaksınız. Algoritma Loss fonksiyonunun ağırlığa göre kısmi türevi, loss fonksiyonunu minimize edecek şekilde değiştirmiş oluyorsunuz. Ayrıca öğrenme hızı da ne kadar hızlı gideceğinizi veriyor.

Loss fonksiyonu algoritmamızın performans kriteridir. Regresyon problemlerinde sıklıkla kullandığımız mean squared error (hata ortalamalar karesi) gibi. Loss fonksiyonun minimum olmasını istersiniz. α değerini çok küçük tutarsanız eğer çok fazla adım atmanız gerekecek ve çok fazla işlemci gücüne ihtiyacınız olacak. α değerini çok büyük tutarsanız da büyük adımlar atarak minimum noktayı kaçırmış olacaksınız. α  değerini sabit tutuyorsunuz Gradient Decent algoritmasında. 

  • Local Minima – Global Minima
İlk ağırlığı rastgele bir yere oluşturuyorsunuz demiştik, genel fonksiyonun nasıl olduğunu bilmiyorsunuz. Local Minima gidebileceğiniz en iyi yer oluyor ama büyük resmi göremedeğiniz için ve burada takılı kalıyorsunuz. Yine değişik algoritmalar uygulayabilirsiniz ama hiçbir Neural network algoritması Global Minima’yı garanti etmez. Global Minima’ya ulaşabilirsiniz ama ulaşmama ihtimaliniz daha yüksek. Eğer siz bir neural network çalıştırdıysanız, farkında olabilirsiniz. Her çalıştırdığınız da size başka sonuçlar verecek çünkü başlangıçda ki weight-(ağırlık)’ler farklı. Katsayılar gibi düşünebilirsiniz, Linear Regression’daki gibi.
Global minimum ise olabileceğiniz en iyi yer, Local Minima ise Local’deki en iyi yer etrafına bakılırsa diye düşünebilirsiniz.

Gelecek yazımda ise Scikit-Learn, Multi Layer Perceptron ile sıklıkla kullanılan fonksiyonlara devam edeceğim.