Published on

15 Dakikada Python ile Yapay Zekaya Giriş (Bölüm 2)

Eveet, önceki yazıda makine öğrenmesine reklam havasında bir giriş yaptık. Şimdi, gelelim meşhur Derin Öğrenme hakında öğrenmeye.


Derin Sinir Ağlarına Giriş

Bu yapay zeka terimleri hakkında TDK'yı ciddi bir mesaiye çağırıyorum bir kez daha. Neyse, konuyu dağıtmadan başlayalım.

Bu böl & parçala & öğren yaklaşımıyla devam edelim. Derin ne demek hepimiz biliyoruz. Sinir (sinir sisteminde olan) ne demek diye baktığımızda ise şöyle bir tanım çıkıyor karşımıza:

Yani aslında bizim sinir sistemimizin yapı taşları olan nöronlar bunlar.

ne demek diye bakalım?

Baktık bakmasına da bu bizim aradığımız tanım değil (sesteşler). Aslında örgü tanımı biraz daha bizim aradığımıza yakın.

dediğimizde, içerisinde bulunan şeylerin diğer şeylere bağlı olduğu bir yapı aklımıza gelsin.

Bu iki tanımı birleştirirsek; sinir ağını, birbirine bağlanmış nöronlardan oluşan ve tüm nöronların aynı amaç uğruna çalıştığı bir yapı olarak düşünebiliriz. Bu ağdaki her nöronun farklı bir görevi var ve bütün nöronlar birbirleriyle bilgileri paylaşıyor.

DNNUnderstand

Yani aslında bu yapay sinir ağları bizim sinir sistemimizi taklit ediyor. Misal, kolumuzu kaldırmak istediğimizde beynimizde üretilen sinyal milyonlarca nöron aracılığıyla kaslara gönderiliyor, bu sinyali alan kas harekete geçiyor. Ya da dışarıda bir kuş görüğümüzde, ışık gözümüze düşüyor oradan beynin ilgili kısmına nöronlar aracılığıyla iletiliyor, ilgili kısımda ona gelen bilgiyle ışığın düşmesiyle oluşan görüntünün bir kuşa ait olduğunu tanıyor. Örnekleri çoğaltabiliriz ama yeter şimdilik.

Peki bu yapay sinir ağları nasıl çalışıyor?

Son yazımızda yaptığımız makine öğrenmesinin tanımı bir hatırlayalım.

Bir bilgisayar programının, G görevi üzerindeki, P ile ölçülen performansı, D deneyimi ile iyileşiyorsa; o programın D deneyiminden öğrendiği söylenebilir. - Tom Mitchell, 1997

Varsayalım ki MNIST veri setindeki rakamları doğru şekilde tanıma görevimiz olsun. Bu durumda, G doğru şekilde rakamları tanıma, P yaptığımız tanımlamanın doğruluk oranı ve D de resimlere tekrar tekrar bakmak olacaktır.

Gelin bu MNIST tanımlama olayına biraz daha dalalım. Bakalım yapay sinir ağları bu işi nasıl çözüyormuş.

MNIST Rakam tanıma örneği

Rakamlar hakkında iki yazıdır bayadır konuştuk konuşmasına da bu bilgisayar rakamları nasıl görüyor?

MNIST setinden bi 8 rakamı örneğine bakalım. Bu MNIST setinde bütün resimler siyah-beyaz, ve hepsinin boyutu 28x28 piksel. Bilgisayar garibim de bu 8 rakamını şöyle görüyor:

Her bir resim 28x28 boyutunda olduğu için, tek bir resmi temsil etmek için 28 x 28 = 784 adet piksel değeri kullanıyoruz. Bu resimleri işlemesi için bir yapay sinir ağı kuracaksak, ilk katmanda 784 adet nöron olması gerekiyor çünkü her biri bir adet piksel değerini okuyacak.

Biraz karışık gözükebilir ama gözünüz korkmasın abartılacak bir durum yok.

Aynı katmanda olan her bir nöron diğerinden bağımsız olarak çalışıyor, yani her biri farklı bir şey öğreniyor. Ancak, (ilk katmandakiler hariç, onlar gariban) tüm nöronlar, önceki katmandaki nöronlarnı tüm sonuçlarına erişebiliyor.

Şimdi kendimizi bu ikinci katmandaki bir nöronun yerine koyalım. Bizden önceki 784 nöronun hepsinden bir bilgi alıyoruz, onlar da tek bir tane piksel görmüşler gelmişler bize fikirlerini belirtiyorlar. Biri diyor gir altıya gir kesin altı bu biri diyor bak bombe gördüm ben, bombe varsa dokuzdur. Bizim de tüm bu bilgileri alıp bir sonraki katmandakilere iletmemiz gerekiyor. Neyse bakıyoruz ediyoruz bize gelen bilgileri güzel bi özetleyip bir sonraki katmandakilere iletiyoruz. İletiyoruz iletmesine de bizden sonraki katmanlarda ne oluyor ne bitiyor hiç haberimiz yok. Bir sonraki nöronlar verdiğimizi alıyor bir kelam etmeden dönüp yollarına devam ediyorlar.

Şimdi, verdiğimiz bilgi doğru mu yanlış mı bilmiyoruz bekliyoruz öyle çünkü en sondaki, rakamın hangisinin olduğunun tahmin edildiği katmanla bir iletişimimiz yok. Tüm bu katmanların çabalarının sonucunda yapılan tahminin doğru olup olmadığını sadece o son katman biliyor. Ne yapabiliriz bu durumda?

Gider bir sonraki katmandaki nörondan rica ederiz, kankam bir baksana be doğru mu bilmişiz diye sorarız. Sorduk tamam da bu gariban da bilmiyor ki. Sana zahmet bir sonrakine sor o da ondan sonrakine sorsun böyle sona kadar gitsin diyoruz. Bir şekilde sondaki nöronlara ulaşıyor bu haber o da dönüp diyor ki Ya biz 6 dedik ama rakam 8 imiş, sadece altta bombe olduğu bilgisi bizi yanılttı diyor. Bu haber ileriden aktarıla aktarıla bize kadar geliyor biz de mevzuya uyanıyoruz, demek ki diğer bombeler de önemliymiş diyoruz. Bir sonraki bilgiler geldiği zaman da ona göre toplayıp iletiyoruz sonraki katmana.

Böyle böyle tüm nöronlar kendilerini düzelterek, resimlerin üzerinden tekrar tekrar geçiyor ve her geçişlerinde sondaki hata, geriye doğru elden ele tüm nöronlara iletiliyor.

İşte buna geri yayılım (backpropagation) deniliyor ve yapay sinir ağlarının, deneyimle öğrenmesi için çok kilit bir yöntem.

Bazı temel Derin Öğrenme Terimleri

Bu yapay zeka, derin öğrenme konusunda okumalar yapacaksanız; bu terimleri çok çok duyacaksınız. İyisi mi kısaca bir özetleyelim.

Gözetimli Öğrenme = Elimizde veri var ve gidip bir uzmana tek tek etiketletmişiz. Yapay zeka da bu etiketleri kullanarak öğreniyor (MNIST sınfılandırması).

Gözetimsiz Öğrenme = Elimizde veri var ama uzman bulamadık etiketleyecek. Yapay zeka modeli artık bu verilere bakıp bakıp bir şeyler öğrenip onları güzelce gruplandırıyor. (Müşterileri alışveriş alışkanlıklarına göre gruplandırma).

Pekiştirmeli Öğrenme = Birbirinden bağımsız durumların var ve her durumda alabileceğin aksiyonlar var. Yapay zeka modelinin aldığı her aksiyon, durumu değiştiriyor. Modelini de bir ödül fonksiyonu ile eğitiyorsun, iyi hareket yaptıysa ödül, kötü hareket yaptıysa ceza alıyor. (Satranç oynama, otonom araba sürüşü, vs.)

Maliyet Fonksyionu = Modelin çıktısının hata payını ölçmek için kullanılan fonksiyon.

Aşırı Öğrenme = Modelin, eğitim setinde o kadar çok vakit harcamış ki orada mükemmel sonuç alıyor ama yeni bir şey gördüğü zaman kafa karışıyor beceremiyor. Öğrenmek yerine, eğitim setini ezberlemiş aslında.

Eksik Öğrenme = Modelin, eğitim setindeki tüm verileri kullanmış ama hala bir şey öğrenememiş. Daha fazla bilgiye ihtiyacı var o yüzden hiçbir durumda iyi çalışmıyor.

Sınıflandırma = Modelin, her bir girdi için bi sınıf veya etiket tahmin ediyor.

Regresyon = Modelin, çıktı olarak bir sayı tahmin ediyor.

Eğitim seti = Eğitim sırasında modelin erişebildiği veri seti. (Okul dersi)

Test seti = Eğitimin dışında kalan set. (Sınav)

Geçerleme seti = Eğitim setinin, modelin ayarlarını düzeltmek için kullanılan kısmı (çıkmış sınav soruları).

Küme büyüklüğü = Eğitim setinden, bir adımda alınan veri sayısı.

Döngü = Modelin, eğitim setini baştan aşağıya kaç defa gözden geçirdiği sayı.

Eveet uzun bir listeydi ama umarım bu terimler hakkında bir bilgi vermiştir. Türkçeleri kafa karıştırdıysa, asıl hallerini yazının ingilizce halinde bulabilirsiniz.

Bu yazım da burada biter. Bu serinin bir sonraki ve son yazısında Evrişimli Sinir Ağları (TDK el at be) hakkında konuşacağız. Görüşmek üzere!