Derin Öğrenme


Yapay zeka, makine öğrenmesi, sinir ağları, derin öğrenme gibi terimler bilgisayarların açıkça programlanmadıkları görevleri yerine getirebilecek şekilde çalışabilmeleri durumunu ima ediyor. Bu konularla ilgili daha önce hiç bir teknik yazı okumadıysanız bu ders notları size hitap edecektir, çok az teknik detayla ve minimum Python bilgisi ile dilim döndüğü kadar konuyu anlatmaya çalışacağım.


Öncelikle bu terimleri sınıflandırmalıyız, yapay zeka ve makine öğrenmesi terimleri oldukça genel terimlerdir. Bunların ortak yöntemleri olduğu gibi birbiri ile kesişmeyen ayrı uygulamaları ve yöntemleri de vardır; tam olarak bu terimlerin hiyerarşisi konusunda ortak bir fikir de yoktur. Ama derin öğrenme denilen şey makine öğrenmesi yöntemlerinden birisi; sinir ağları (neural networks) denilen başka bir yöntemin ardışık olarak uygulanması olarak açıklanabilir ve bu yöntem günümüzde en modern ve etkili yöntem olarak kabul ediliyor.


Peki makine nasıl öğrenir? Bu aslında öğrenmeyi nasıl tanımladığınıza bağlı. Esasında makine öğrenmez (çünkü o bir makinedir), sadece çok hızlı bir şekilde deneme yanılma yapar. Ona çok sayıda soru ve bunların cevaplarını verirseniz, makine bunlar arasında rastgele bir eşleşme kurar ve bu eşleşmenin gerçek cevaplarla ne kadar örtüştüğünü test eder. Bu işlemi defalarca tekrarlar ve her seferinde eşleşmenin hatasını ölçüp eşleşmeyi daha doğru olacak şekilde bir miktar düzeltir. Böylece makine bir şablona sahip olur ve makineye benzer bir soru (daha önce hiç görmediği bir soru) sorduğunuzda ürettiği eşleşmeye göre bir cevap verir. Sonuç olarak makine bir soruya nasıl cevap vereceği konusunda açık olarak programlanmamıştır fakat benzer soru ve cevapları inceleyerek bir tahmin üretebilir duruma gelmiştir. Makine öğrenmesi denilen olay kabaca budur, burada eşleşmeyi düzeltme aşaması makinenin öğrenme aşaması olarak adlandırılır. Bu sürecin her bir aşaması için farklı yöntemler vardır, ele alınan probleme en uygun yöntemi seçerek çalışırız.


Bu derslerde size bu aşamaları nasıl kodlayabileceğinizi çok kaba bir şekilde açıklayacağım. Makine öğrenmesi çalışmalarında bu amaca yönelik özel modüller (tensorflow, pytorch, keras gibi) kullanılır ama biz bu derslerde çok temel Python elemanlarını kullanarak el yordamıyla çok basit programlar yazacağız, amacım size süreci açıklamak.

Özet: Bu derste bir program ile bir sorunun cevabının nasıl tahmin edildiği açıklanıyor. Bu işlem son derece basit aslında; tahmin işlemi dediğimiz işlem sadece girişi verisini belirli bir sayı ile çarpmaktan ibaret.

Anahtar Kelimeler: Forward Propagation · Input · Output · Prediction · Tahmin · Weight
Özet: Hazır parametreler verildiğinde nasıl tahmin üretildiğini bir önceki derste gördük, bu olay öğrenilmiş olan parametrelerin uygulanmasıdır. Bu derste bu parametrelerin nasıl öğrenildiğine bakacağız, deneme yanılma tekniğini biraz değiştirerek akıllıca bir strateji geliştireceğiz.

Anahtar Kelimeler: Alpha · Delta · Error · Gradient Descent · Hata Ölçümü · Öğrenme · Prediction · Training
Özet: Bu derste derin öğrenme konusuna giriyoruz, önceki derste gördüğümüz öğrenme adımını geliştirerek bir derin sinir ağı tasarlayacağız. Bu sinir ağının öğrenmesine de derin öğrenme diyeceğiz.

Anahtar Kelimeler: Activation · Back Propagation · Batch Size · Derin Öğrenme · Derin Sinir Ağı · Generalization · Gizli Katman · Gradient Descent · Hidden Layer · Katman · Layer · Memorization · Mini Batch Gradient Descent · Nonlinearity · Overfitting · Regularization · Relu · Stochastic Gradient Descent
Özet: Makine öğrenmesinin hello world uygulamaları MNIST veri seti ile yapılır. Bu veri setinde farklı insanlar tarafından el yazısı ile yazılmış rakamların resimleri yer alır, bir sonraki derste resimlere bakarak hangi rakama ait olduğunu tahmin eden bir sinir ağı tasarlayacağız. Bu derste bu veri setini tanıyacağız.

Anahtar Kelimeler: Flatten · Keras · Label · Mnist · Tensorflow · X_Train · Y_Train
Özet: Bu derste MNIST veri seti üzerinde sinir ağının öğrenme aşamasını gerçekleştireceğiz, bunu daha önce daha basit veri setleri üzerinde yapmıştık. Fakat şimdi göreceğiz ki MNIST veri setinde training aşamasında kullanmadığımız ve sinir ağının hiç görmediği veriler üzerinde tahminlerimiz yeterince iyi olmayacak, bunun sebebi öğrenme aşamasının tarining verilerine göre gereğinden fazla spesifik olmasıdır. Sinir ağımız genel kurallar çıkarmak yerine fazla detaya odaklanmış ve ezbere kaçmıştır, bu olay overfitting olarak adlandırılır. Bu derste overfitting ile mücadele etmenin basit bir kaç yöntemini öğreneceğiz.

Anahtar Kelimeler: Dropout · Mini Batch Gradient Descent · Mnist · Normalizasyon · One-Hot Encoding · Overfitting · Regularization · Test Accuracy · Training Accuracy · Validation Set
Özet: Daha önce sinir ağlarımızda sadece relu aktivasyon fonksiyonunu kullandık fakat tek seçenek bu değildir. Farklı amaçlara göre uygun bir aktivasyon kullanabiliriz, bu derste bu konuya değineceğiz.

Anahtar Kelimeler: Aktivasyon Fonksiyonu · Cross Entropy · Regresyon · Relu · Sigmoid · Softmax · Tanh
Özet: Overfitting ile mücadele etmenin temel yolu sinir ağının parametre sayısını (kapasitesi denir) azaltmaktır, bunun en mantıklı yollarından birisi benzer girdiler için aynı weight değerlerini tekrar kullanmaktır. Konvolüsyonel sinir ağlarının temel fikri budur, bu derste bu konuyu tartışacağız.

Anahtar Kelimeler: Cnn · Convolution Kernel · Convolutional Layer · Convolutional Neural Network · Konvolüsyon · Konvolüsyonel Katman · Max Pooling · Mean Pooling · Sum Pooling

KAYNAKÇA

  1. A. W. Trask, Grokking Deep Learning, Manning Publications Co., New York, 2019.