Derin Öğrenme - 1 - İleri Yayılım Algoritması

Bu makalede derin öğrenmeye giriş olarak bazı kavramların açıklaması ve forward propagation algortimasının açıklaması yapılmıştır.

Derin Öğrenme - 1 - İleri Yayılım Algoritması
anaresim

Eğer teknolojiyi takip ediyorsanız , derin öğrenmenin teknoloji dünyasında sıkça kullanıldığına şahit olmuşsunuzdur. Bu makale serisinde , dünyada gün geçtik daha çok konuşulan derin öğrenme hakkında giriş-orta seviyede bilgiler vermeye çalışacağım. 

Öncelikle , derin öğrenme alanında çalışacaklarına karar vermiş kişilerin terminolojiye hakim olmalarını düşünenlerdenim. Diğer bilgisayar bilimleri alanında olduğunu gibi bu alandadaki önümüze çıkan kelimelerin hepsi ingilizce ve yeni bir terim çıkarsa onunda ingilizce olma ihtimali yüksek olduğundan inglizce terimleri bilmemiz gerekmektedir. Çeşitli akademisyenler tarafından özenerek hazırlanan bilişim terimleri sözlüğü var olasada ben sizin türkçe karşılıklarına bakmadan doğrudan inglizceden öğrenmeniz taraftarıyım ama tabiki de zorda kalınca bakabilirsiniz.

Bu yüzden yeni başlayanlar için bu makalede konu ile alakalı kullanılan terimleri vermek istiyorum.

Kullanılacak Terimler

  • Artificial Neural Network - Yapay Sinir ağları
  • Activation functions - Aktivasyon Fonksiyonları
  • Bias - Yanlılık
  • Classification - Sınıflandırma
  • Deep Learning - Derin Öğrenme
  • Database - veri tabanı
  • Dataset - veri seti
  • Fully Connected - Tam/Sıkı Bağlı
  • Hidden Layer - Gizli Katman
  • Input Layer - Giriş Katmanı
  • Machine Learning - Makine Öğrenmesi
  • label - etiket
  • Loss Function - Kayıp/Yitim Fonksiyonu
  • Layer - Katman
  • Neuron - nöron
  • Output Layer - Çıkış Katmanı
  • Structured Data - Yapısal Veri
  • Supervised Learning - Gözetimli Öğrenme
  • Unsupervised Learning - Gözetimsiz Öğrenme
  • Weights  - Ağırlıklar
  • Unstructured Data - Yapısal Olmayan Veri

Deep Learnig konusuna geçmeden önce  bu alanda kullanılacak olan veri tiplerini bilmemiz gerekir. İki tip veri türü vardır:

Structured Data

Bu veri türü genel olarak nümerik datalardan oluşmaktadır. Databasedeki datalara örnek verebiliriz.

Örneğin bir bankaya ait datasetindeki veriler büyük olasılıkla nümerik datalardan oluşur.

Unstructured Data

Bu veri türü ise resimses, text gibi verilerden oluşmaktadır.Örneğin köpek yada kedileri ayırt etmek için topladığınız resimler, ses tanıma yapmak için kayıt ettiğiniz sesler ve bir film kritiklerini değerlendirmek için kullanıcı yorumlarından oluşan bir dataset buna örnek olarak verilebilir.

Supervised Learning

Deep learning uygulamaların büyük bir kısmı bu alanı kapsar. Supervised  learning yani gözetimli öğrenmede label(etiket)lerden faydalanırız. Örneğin siz kedi ve köpekleri tanıyan bir model geliştirmek istiyorsunuz diyelim , bu uygulamada kullanıcağınız dataset girdilerden(resimler) ve onlara karşılık gelen labellardan oluşmaktadır. Siz modeli eğitirken bu kedi veya şu köpek diye gösteriyorsunuz model bu gösterimden birşeyler öğreniyor. Bu öğrenmeye gözetimli öğrenme yada Öğretmenli öğrenme de denebiliyor.

Unsupervised Learning

Gözetimsiz(Öğretmensiz) öğrenmede ise dataset de labeller bulunmamaktadır.Modelden bu dataset içindeki verileri gruplamasını istediğimiz zaman bu yola başvururuz.

Bu ikisinden başka birkaç öğrenme şekli de vardır. Örneğin yarı gözetimli öğrenme , pekiştirmeli öğrenme , T-Learning ...

Deep learning aslında çok uzun yıllar önce machine learning tarafından kullanılan metotları kullanarak ve üstüne ciddi ölçüte gelişme kaydederek bu güne kadar gelmiştir. Machine learningte aslında yeni bir oluşum değildir. Çünkü önceleri bu kavramda istatistiksel metotlar kullanılarak çalışmalar yapılmıştır. Machine learning daha genel bir terimdir. Deep learning ise machine learning in bir alt kümesidir.

Klasik programlama ile machine learning i ayıran yöntem aşığadaki şekilde gösterilmiştir. Klasik programlamada eğer siz n e kadar olan sayıların formülü bilirseniz bunu rahatlıkla hesaplayabilirsiniz.Machine learning'te ise cevapları (örneğin ilk 10 sayının toplamı (10*11)/2 ) ve veriyi verirseniz , model size kuralları verebilir. Burada verinin ve cevapların şekli oluşturulacak olan kuralların doğru bilinmesini etkilemektedir.

Artificial Neural Network(ANN)

ANN'ler insanın beyinlerindeki nöronlarından esinlenerek oluşturulmuştur.Bu deep learning'in gelişmesi konusundaki önemli adımlardan biridir. Bir ANN  aşağıdaki gösterilen kısımlardan oluşur.

Input Layer

Input layer ne kadar layer olarak anılsada bazı kaynaklarda tam anlamıyla layer in görevlerini üstlenmediği için layer denmeyebilir. Input katmanın tek görevi vardır oda bir sonraki katmana girdileri yollamak.

Hidden Layer

Hidden layer bir çok nörondan(unit) oluşabilir. Bu layerin görevi gelen inputları çeşitli işlemlere sokarak bir sonraki layer a göndermektir(bu işlemleri daha sonra analatacağız). Tahmin edilebileceği üzeri bir artificial neural network de birçok hidden layer bulunabilir. Bunların kaçtane olacağı ise kesin birşey değildir. Bazı durumlarda az olduğunda iyi çalışırken bazı durumlarda başka şekilde etki gösterebilir.

Output Layer

Bu katmanın görevi ise son hidden layerden gelen bilgileri son işleme tabi tutarak bir çıktı üretmektir.

 

Model Nasıl Öğrenir ? 

Hidden layerlarda bir takım işlemleri yapıldığıını söylemiştik.Şimdi biraz daha detaya inelim. Bu hesaplamaları yaparken ilk yukardaki resimdeki hidden layer 1 'in ilk nöronuna bakalım.

Bu nörondaki işlemler için bizim ilk önce weight (ağırlık) matrisine sahip olmamız gerekiyor. Bu matris içinde rastgele dağılmış sayılardan oluşuyor(niye bu matrisi kullandığımızı ilerde göreceksiniz).Şimdi input layerdaki 1.nöronada Xdiyelim. 

Yeri gelmişken söylemekte fayda var bizim input layerımızdaki her bir input bir vektör ile gösterilir.Örneğin bir resimse bu [0,255] aralığında değer alan bir vektör olacaktır.

z diye bir vektör tanımlayalım ve w(weights matrisi) ile X1 i çarpıp bu vektöre ekliyelim.

z1 = w1. x1  olur. 

Şimdi ise başka bir parametre olan b(bias,yanlılık) parametresi devreye giriyor. Bias vektörü ile de z vektörünü toplayalım.

z nin son hali ,

z1 = w1. x + b  olur .   (Python da numpy kütüphanesi ile : z=np.dot(w,x1) + b

Daha işimimiz bitmedi , son bir şey hesaplamamız gerekmektedir. 

Hesapladığımız bu z değeri linear(doğrusal) yapıdadır. Deep learning te biz bu doğrusallığı bozmak isteriz.Çünkü doğrusallığı bozmazsak modelin öğrenim gücü çok düşecektir hatta birşey öğrenemeyecektir çünkü hesaplanan bu parametreler yine doğrusal olacaktır (doğrusal * doğrusal = doğrusal) yani aynı şeyi tekrar edip durmuş olacaktık. 

Doğrusallığı bozmak adına hesaplanan bu z değerini activation function'a göndermemiz gerekir. Daha sonra üstünden geçeceğiz fakat  en bilinen activation function'lar : relu,sigmoid,tanh,softmax dır.

a1 = g(z1)

Ve sonunda adeğerine ulaşmış oluyoruz. Unutmayın bunu sadece hidden layer 1 in ilk nöronuna uyguladık bu işlemi diğer nöronlara da uygulamamız gerekecektir. 

Peki hidden layer 2 için inputlar hangileri olacak?

Yukardaki model fully connected (sıkı bağlı) olduğundan hergangi bir hidden layer 'in inputu kendinden önce gelen hidden layer 'in çıktısı olmuş olacaktır. Yani Yukardaki hesapladığım abir sonraki layer 'in inputu olmuş olur.

Bu adımlardan sonra sırada loss function 'un hesaplanması var. Loss function labellara bakarak modelin ne kadar hatalı  çıktı ürettiğini bulur. (ilerde nasıl olduğu anlatılacaktır)

 

Yukardaki anlattığım adımlar literatürde forward propagation olarak geçiyor. Yani yukardakiler sadece girdilerin çeşitli hesaplamalar ile modellden geçip çıktıda üretilen hatanın hesaplanmasına kadar geçen süreci kapsıyor.Yukarda tek tek hesapladık fakat ilerde hesaplamayı kolaylaştırmak adına matrisler kullanacağız(W matrisi ,X matrisi gibi). Bu süreçten sonra ise backward propagation (geri yayılım) süreci başlıyor. Bu süreci bir sonraki yazıda anlatacağım fakat kısaca bu işlem , loss  hesaplandıktan sonra geri doğru gidip nöronlarda öğrenilen yanlış bilgiyi düzeltmeye çalışıyor ( öğrenme işlemi) .