Özet |
Derin Öğrenmeye Giriş Eğitimi
===============================
Özet
------
Bu eğitimin amacı, son dönemde makine öğrenmesinin birçok uygulama alanında etkileyici düzeylerde başarım sağlayan “derin öğrenme”ye ('deep learning') bir giriş sunmaktır. Eğitimde, hem derin öğrenmenin temel birkaç yaklaşımını ve arkalarındaki mantığı ele alacak; hem de yaygın kullanımdaki açık kaynak araçlara değinip bir veya iki basit uygulama yapmaya çalışacağız.
Derin öğrenme, görüntü, doğal dil ve ses işleme gibi birçok alanda özellikle de son yıllarda kimi durumlarda insan başarımını geçen düzeyde başarılı ve dolayısıyla popüler oldu [1,2]. Bu başarının arkasında, sadece çok büyük miktarlarda verinin ve bu veri kümelerini işleyecek donanım kaynaklarının mevcudiyeti değil; zor problemlerin çözümüne uygun derin yaklaşımların, bu kaynaklar üzerinde sonuca ulaşabilmesini yani yakınsayabilmesini ('converge') sağlayan algoritmik yenilikler yatmakta. Derin öğrenmenin, somut başarının önünü açan bu özelliklerinin yanındaki diğer temel ve çok önemli avantajı, uygulayıcıyı öz-nitelik mühendisliğinden ('feature engineering') kurtarması: Böylece, uygulayıcı eldeki problemin çözüme götürecek yönlerini kendi çabaları ve uzmanlığıyla keşfetmeye çalışmak yerine, bu keşif işini de derin öğrenme sistemine bırakabiliyor. Bu sebeple derin öğrenme yaklaşımlarına, eldeki problemin uygun bir temsilini öğrenme anlamında, “temsil öğrenmesi” ('representation learning') ismi de verilebiliyor [1,2].
Popülerliği son yıllarda artmış olsa da, derin öğrenmenin mevcut noktaya gelmesinin arkasında onlarca yıl geriye giden bir birikim var. Bu sürecin, esas olarak, hayvanların başarısından dolayısıyla biyolojik sinir ağlarından esinlenen yapay sinir ağlarıyla ('artificial neural networks') başladığı söylenebilir. Zamanla, tek katmanlı yapay sinir ağlarında yüksek başarım elde edilemeyişinin gösterilmesinden devamla çok katmanlı ağlara ('multi-layer perceptron') yönelinilmiş ve akabinde problem türlerine uygun çok katmanlı ağ mimarileri keşfedilmiştir. Daha sonra uygulamaya dair teknik problemlerin de aşılmasıyla, iki binli yıllarda ve verinin miktarının çok arttığı günümüzde farklı veri tiplerine uygun belli başlı öne çıkan mimarilerle çok başarılı uygulamalar geliştirilmiştir.
Eğitim kapsamında, yukarıda özetlenenleri somutlayacak bir yaklaşımla, teoriyi ve pratiği bir güne sığacak kadarıyla aktarmaya çalışacağız. Teoride, (yapay) nöronların ve sinir ağlarının temellerini ve bunlardan hareketle geliştirilen temel derin öğrenme mimarilerinin özelliklerini ele alacağız. Hangi problem için hangi mimarinin neden seçilebileceğine dair bir sezgi kazandırmaya çalışacağız. Pratikte ise, derin öğrenme sistemi geliştirmeyi, birbiriyle etkileşen çok sayıda doğrusal olmayan birimden oluşan bir sistemin parametrelerini eldeki problemi çözecek değerlere getirmek olarak düşündüğümüzde; bu işi yapacak algoritmaları nasıl gerçekleyebileceğimizi ve ilgili araçları aktaracağız. Buradaki önemli bir altbaşlık, derin öğrenmenin paralelleşmeye çok uygun olan ve milyonlarca parametrenin optimizasyonunu içermesinden dolayı da aslında paralel programlamayı mecbur kılan doğasından dolayı alandaki standart yaklaşım haline gelmiş olan GPU (“grafik işleme birimi” - 'graphical processing unit') kullanımı ve bu amaçla geliştirilmiş programlama çerçeveleri ('frameworks') olacak. Eğitimi, aktarılanları uygulayabileceğimiz bir veya iki örnek problemi ele alarak ve vakit el verirse çözerek tamamlayacağız.
Katılımcıların belirli bir düzeyde doğrusal cebir ve kalkülüs bilgisi ile programlama (tercihen Python) becerisine sahip olmaları faydalı olacaktır.
Eğitim İçeriği
---------------------
I. Giriş
A) Makine öğrenmesinin temel kavramları: Problem tanımı; problem türleri (eğitmenli ('supervised) / eğitmensiz ('unsupervised') eğitim); verikümeleri (eğitim ('training') / değerlendirme ('validation') / sınama ('test')); çeşitli yaklaşımlar (karar ağacı ('decision tree'), destek vektör makineleri ('support vector machines'))
B) Motivasyon: Yapay sinir ağları (biyolojik ve yapay nöron, sinaps, ağ mimarisi) ve yapay sinir ağlarının eğitimi (maliyet fonksiyonu ('cost function'), hatanın ağ birimlerine dağıtımı ve optimizasyon yöntemleri ('backpropagation', 'gradient descent'))
II. Derin öğrenme
A) Temel derin öğrenme mimarileri
- Çok katmanlı ileri-beslemeli ağ ('multilayer perceptron' – MLP)
- Konvolüsyonel sinir ağları ('convolutional neural networks' – CNN)
- Öz-yinelemeli sinir ağları ('recurrent neural networks' – RNN) ve alt-türleri ('long short term memory' – LSTM vb.)
- Eğitmensiz öğrenme için derin inanç ağları ('deep belief networks') ve boyut düşürme ('dimensional reduction') için öz-kodlayıcılar ('auto-encoders')
B) Derin öğrenmede eğitim yapma
1. Dikkat edilmesi gerekenler: Öğrenme hızı ve katman sayısı gibi hiper-parametrelerin ('hyper-parameters') seçimi; 'drop-out' gibi regülerizasyon ('regularization') yöntemleri
2. (GPU) Programlama için araçlar: Theano [3], Caffe [4], Tensorflow [5]; İstanbul'dan (Koç Üniversitesi) Julia ile yazılmış bir framework: Knet.jl [6]; görsel arayüz DIGITS [7]
III. Uygulamalar
A) Örnek problem ve verisetleri: MNIST [8] ve CIFAR10 [9]
B) Python ve/ya bir derin öğrenme aracı ile (A)'daki problemlerin çözümü
Referanslar
-----------------
[1] Jürgen Schmidhuber, “Deep Learning in Neural Networks: An Overview”, Neural Networks, 61, ss. 85-117 (2015)
[2] Yann LeCun, Yoshua Bengio, Geoffrey Hinton, “Deep Learning”, Nature, 521, ss. 436–444 (2015)
[3] Yangqing Jia ve ark., “Caffe: Convolutional Architecture for Fast Feature Embedding”, arXiv:1408.5093 (2014); http://caffe.berkeleyvision.org/ , https://github.com/BVLC/caffe
[4] Frédéric Bastien ve ark., “Theano: new features and speed improvements”, NIPS 2012 Deep Learning Workshop (2012); https://github.com/Theano/Theano
[5] http://www.tensorflow.org/ ; https://github.com/tensorflow/tensorflow
[6] https://github.com/denizyuret/Knet.jl; https://docs.google.com/document/d/1uyqKFEdCqS0HoA-acLUr9_C0EGmAx_0wiEwzXhMWUPw/edit
[7] https://github.com/NVIDIA/DIGITS; https://developer.nvidia.com/digits
[8] http://yann.lecun.com/exdb/mnist/
[9] http://www.cs.toronto.edu/~kriz/cifar.html
|