:::: MENU ::::
Derin Öğrenme

Deep learning

“Deep learning” çalışması Yann LeCun, Yoshua Bengio ve Geoffrey Hinton tarafından yapılmış olup Nature 521.7553 (2015): 436-444.sayfaları arasında basılmıştır.

Derin öğrenmenin esprisi görüntü içerisinden çıkarılan özelliklerin insanlar tarafından değil, çeşitli işlemlerle otomatik olarak yapılmasıdır. Hesaplama kabiliyeti ve verinin gitgide büyümesiyle derin öğrenme farklı zor problemlere çözüm olmaya devam edecektir.

Eğitim aşamasında amaç hatayı veya uzaklığı minimize etmektir. Bir Derin Öğrenen Ağ milyonlarca veriyle öğrenirken, yüz milyonlarca ağırlık adı verilen parametreye sahiptir. Bu ağırlıkların ayarlanması ile öğrenme gerçekleşmiş olur.

Bir gradyan vektörü ile hata azaltılmaya çalışılır. En dik iniş yöntemiyle çözüm aranır. Genelde stochastic
gradient descent (SGD) ismi verilen yöntem kullanılır.

Giriş katmanındaki bilgiler transfer fonksiyonları yardımıyla farklı formlara dönüştürülmektedir:

Noktaların birbirine göre türevleri ve aralarındaki ilişkiler:

İleri Besleme ve Geri Yayılma işlemleri:

convolutional katmanlarda ortak özelliklere sahip alanlar belirlenmeye çalışır. pooling katmanında ise birbirine benzeyen kısımlar birleştirilmeye çalışılır.

Bir görüntüde motifler parçaları, parçaları objeleri oluşturur.
Ses ve metinde ise fonem -> hece -> kelime -> cümle şeklinde bir yapı vardır.

Pooling işlemi yukarıdaki geçişi sağlamaya çalışmaktadır.

ConvNet 1990’lı yıllarda da kulanılsada 2000’li yıllarda kısmen terk edilmişti, 2012 yılındaki ImageNet veri kümesi üzerinde elde edilen başarının ardından yeniden parladı. Bu başarının arkasında ConvNet+ReLU+Dropout vardır.

Bu başarının ardından dev firmalar bu konuyla ilgilenmeye başlamış, hatta NVIDIA, Mobileye, Intel, Qualcomm ve
Samsung firmaları ConvNet’i hızlı işleyebilen donanımlara yoğunlaşmışlardır.

Resimden metne dönüşüm ile ilgili bazı örnekler:

Cümlelerle eğitilen ağlar ile hangi kelimeden sonra hangi kelime gelir şeklinde yapılan bir çalışmada birbirine benzer kelimelerin ve kelime gruplarının benzer oranlarda, birbirlerine yakın oldukları görülmüştür:

recurrent neural network:

RNN’lerin gelişmişi : long short-term memory (LSTM) network

Gelecekte özellikle eğiticisiz öğrenmenin daha popüler olacağı öngörülmüştür.

İndirmek için:
deep-learning-nature2015


ImageNet Classification with Deep Convolutional Neural Networks

“ImageNet Classification with Deep Convolutional Neural Networks” çalışması Alex Krizhevsky, Ilya Sutskever ve Geoffrey E. Hinton tarafından yapılmış olup Advances in neural information processing systems dergisinde 2012 yılında basılmıştır.

Deep Learning furyasının başlangıç makalesidir.

ImageNet LSVRC-2010 veri kümesinde 1,2 milyon yüksek çözünürlüklü resim bulunmakta ve bu resimler 1000 kategoride sınıflanmaktadır. top-1 ve top-5 hata oranı olarak 37.5% ve 17.0% bulunarak o güne kadarki çalışmalardan daha başarılı olduklarını belirtmişlerdir.

Çalışmada 60,000,000 parametreli, 650,000 nöronlu, bazılarını max-pooling katmanının takip ettiği 5 evrişimsel(convolutional) katmanlı, 3 fully-connected katmana sahip sonunda da 1000 yollu softmax olan bir yapay sinir ağı kullanılmıştır.

Overfitting’den kaçmak için dropout algoritması kullanılmıştır. Evrişimsel(convolutional) katman hesapları GPU üzerinde yapılarak hızlanma sağlanmıştır.

Ayrıca ILSVRC-2012 yarışmasında da bu yapı top-5 test hatası %15.3 ile birinci olurken ikinci olan %26.2 hata ile olmuştur.

Giriş

Onbinlerce resmin olduğu veri kümeleri ile yapılan çalışmalardan iyi sonuçlar elde edilmişti. Örneğin MNIST veri kümesi üzerinde hata %0,3’ten daha aşağıya çekilerek insan ile hemen hemen aynı seviyeye getirilmiştir. Fakat obje tanıma işleminde böyle bir başarı henüz ortada yoktur. Bunun için çok büyük veri setleri gereklidir. Bu veri setleri segmente edilmiş ve sınıflandırılmış olmalıdır.

LabelMe : Yüzbinlerce tamamen segmente edilmiş resim içermektedir.
[B.C. Russell, A. Torralba, K.P. Murphy, and W.T. Freeman. Labelme: a database and web-based tool for image annotation. International journal of computer vision, 77(1):157–173, 2008.]

ImageNet: 22000 kategoride 15 milyondan fazla resim içermektedir.
[J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09, 2009.]

Milyonlarca resmin içindeki binlerce objeyi tespit etme işlemi oldukça büyük işlem gücü gerektiren bir süreçtir. Convolutional neural networks (CNNs) bir model oluşturarak derinlik(depth ve genişliğe (breadth) bağlı çıkarımlarla daha efektif bir eğitim gerçekleştirmektedir.

CNN çok avantajlı olmasına rağmen yine de büyük ölçekli yüksek çözünürlüklü resimlere bunu uygulamak hesaplama açısından çok maliyetlidir. Günümüz GPU teknolojisi bu işi yapmak için elverişlidir ve elimizde eğitim yapacak kadar da resim bulunmaktadır.

Bu çalışmada ;
Şimdiye kadar kurulmuş en büyük CNN yapısı kullanılmıştır.
CUDA üzerinde 2D convolution için optimize edilmiş bir yapı hazırlanmıştır. CUDA CONVNET olarak paylaşılmaktadır.
Eğitim süresini kısaltan yeni ve alışılmadık öznitelikler çıkarılmış ve bunlar izah edilmiştir.
1,200,000 etiketlenmiş resim ile çalışıldığından overfittiğing olmaktadır, bundan nasıl kaçınıldığı izah edilmiştir.
5 convolutional ve 3 fully-connected katman bulunmaktadır. Bunları azaltmak başarıyı düşürmektedir.
2 adet GTX 580 3GB GPU ile eğitim 5-6 gün sürmektedir.

Veri Kümesi

ImageNet içerisinde 15,000,000’dan fazla resim olan 22,000 kategoriye ayrılmış bir veri kümesidir. Resimler insanlar tarafından Amazon’s Mechanical Turk crowd-sourcing tool ile etiketlenmiştir. Bu çalışmada ise ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) veri kümesi kullanılmıştır. 1,200,000 eğitim resmi, 50,000 doğrulama resmi, 150,000 test resmi bulunmaktadır.
Test işlemi top-1 ve top-5 hata ölçütleriyle kıyaslanmaktadır.
Sistem tek bir çıktı vermekte ve gerçek çıktı ile kıyaslanmaktadır. Bu şekilde top-1 hatası bulunur.
Sistem 5 adet çıktı vermekte ve gerçek çıktı bunlardan biri değilse hatalı sayılmaktadır. Bu şekilde top-5 hatası bulunur.
Girdi resimleri 256*256 olacak şekilde ölçeklenmiştir. Dikdörtgen olan resimler ise kısa kenarı 256 olacak şekilde ölçeklenmiş, daha sonra 256*256 olacak şekilde merkezden kırpılmıştır. Başka bir işlem yapılmamış, ham RGB verisi ile sistem eğitilmiştir.

Mimari

ReLU Nonlinearity

Nöronların çıkışında klasik olarak tanh ve (1 + e^-x)^-1 gibi fonksiyonlar kullanılmaktadır. Bu fonksiyonlarda negatif değerlerde olduğundan eğitim sürecini uzattığı tespit edilmiştir. Bu yüzden negatif değerlerde 0, pozitif değerlerde kendi değerini veren Rectified Linear Unit (ReLU) aktivasyon fonksiyonu kullanılmıştır.

CIFAR-10 veri kümesi üzerinde tanh ve RELU testi yapılmış ve 6 kat hızlı eğitim yapıldığı görülmüştür.

ReLU ilk defa 2010 yılında önerilmiş olsada [V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th International Conference on Machine Learning, 2010.], 2009 yılında da tanh fonksiyonu mutlak değer içerisine alınarak negatifliğin etkisinden kurtulma çalışması [K. Jarrett, K. Kavukcuoglu, M. A. Ranzato, and Y. LeCun. What is the best multi-stage architecture for object recognition? In International Conference on Computer Vision, pages 2146–2153. IEEE, 2009.] yapılmıştır.

Çoklu GPU ile Eğitim

GTX 580 GPU’nun 3 GB belleği olduğundan eğitim için yetersizdir. O yüzden iki adet GPU kullanılmıştır. GPU’lar birbirlerinin belleklerine direk olarak yazma ve okuma işlemi yapma yeteneğine sahiptir. Ağ ortadan ikiye bölünmüştür. Belirli noktalarda iletişime izin verilmiştir. Bu yapı sütunlu (columnar) CNN yapısına [D.C. Cire¸san, U. Meier, J. Masci, L.M. Gambardella, and J. Schmidhuber. High-performance neural networks for visual object classification. Arxiv preprint arXiv:1102.0183, 2011.] benzemektedir fakat bu çalışmada sütunlar bağımsız değildir.

ReLU her ne kadar normalizasyon yapılması ihtiyacını kısmen ortadan kaldırsada “Local Response Normalization” ismi verilen bir yaklaşımla normalizasyon yapılmaktadır. Bu normalizasyon işlemiyle test hatası biraz daha düşürülmüştür. Ayrıca CIFAR-10 veri kümesinde ise test hatası %13’ten %11’e düşürülmüştür.

Pooling işlemi öznitelikleri anlamlı bir şekilde azaltmak için kullanılmaktadır:

Çalışmada Overlapping Pooling yaklaşımının Local Pooling yaklaşımından biraz daha iyi olduğu söylenmiştir.

Local Pooling: Patch Size ve Stride sayısının eşit olduğu işlemdir. 3×3’lük bir pool matrisi, 3’er adım atlayarak işlem yapması anlamına gelir.

Overlapping Pooling: Patch Size sayısının Stride sayısından büyük olduğu işlemdir. 3×3’lük bir pool matrisinin, 2 veya 1’er adım atlayarak işlem yapması anlamına gelir.

Ayrıca Average Pooling ve Max Pooling işlemleri yapılabilir. Max Pooling’in daha iyi olduğu söylenmektedir.

Bu bilgilerden sonra ağı komple izaha geçebiliriz:

8 katman ve ağırlıkları vardır.
5 katman convolutional
3 katman fullyconnected
fullyconnected’dan sonraki çıkış katmanında 1000-way softmax ile 1000 kategorik veriye ait olasılıkları içeren bir çıktı vektörü bulunmaktadır.
Eğitim sürecinde sınıflandırma başarısını maksimize etmeye çalışır.
2,4 ve 5.katmanlarda sadece aynı GPU içerisindeki veriler işlenmektedir.
2.katmandaki tüm kerneller, 3.katmanda birleşmektedir.
fullyconnected katmanlardaki tüm nöronlar bir önceki katmana tamamen bağlıdır.
Local Response Normalization 1. ve 2. katmanlarda yapılmıştır.
Max Pooling 1,2 ve 5.katmanlarda yapılmıştır.

İşlem adımları:
224x224x3’lük girdiyi 11x11x3’lük convolutional katman filtresi 4 piksel adımlarla uygulanarak 55×55 adet değer elde edilmektedir. 96 kernel 48-48 olacak şekilde 2 GPU’da tutulmaktadır.

Daha sonra her katmanda farklı convolutional katman filtreleri uygulanarak ağ aşağıdaki şekle getirilmektedir.

1000 kategorik veri olduğundan 10 bit ile çıktı temsil edilmektedir. 2^10=1024 olduğundan 1000 farklı nesne bu şekilde çıktı formatı olarak kullanılabilir. Bu şekilde ağın yaklaşık 60 milyon parametresi bulunmaktadır.

Overfitting ile Mücadele

Aşırı uyum veya ezberleme olarak çevrilebilecek overfitting istenmeyen bir durumdur. En basit mücadele yöntemi eğitim setini genişletmektir.

Çalışmada mevcut resimlerde otomatik olarak CPU ile hafif değişiklikler yapılarak GPU’da eğitim devam ederken, diske kaydetmeden ve hesaplama maliyetini artırmadan yeni resimler üretilmiştir.

256×256’lık ham resimlerden 224×224’lük resimler ve yatay yansımaları elde edilmiştir. Örnek bir yatay yansımayı aşağıda görebilirsiniz:

Bu işlem eğitim verisini 2048 kat artırmıştır.

Daha sonra RGB değerlerine PCA işlemi uygulanmıştır. Ortalaması 0, standart sapması 0.1 olan Gauss/Normal dağılımla üretilmiş rastgele sayıları içeren bir özdeğer vektörü ile bu işlem yapılmıştır. Bu işlem ile hata oranı %1 daha azalmıştır.

Dropout

Katmanların belirli oranda etkisizleştilmesi mantığına dayanmaktadır. Böylece hem eğitim süresi kısalmakta, hem de kimi veri kümeleri için ezberleme ortadan kalkmaktadır. Dropout ilk iki fully-connected katmana uygulanmıştır.

Daha fazla ayrıntı için:

Srivastava, Nitish, et al. “Dropout: a simple way to prevent neural networks from overfitting.” Journal of machine learning research 15.1 (2014): 1929-1958.
G.E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever, and R.R. Salakhutdinov. Improving neural networks by preventing co-adaptation of feature detectors. arXiv preprint arXiv:1207.0580, 2012.

Nasıl Öğreniyor?

Stokastik düşüş inişi (stochastic gradient descent) ile 128 örneklik batch grupları ile, 0.9 momentum ve 0.0005 azaltım ile öğrenme sağlanmıştır.

Her katmanda ağırlıklar 0 ortalama, 0.01 standart sapma ile normal dağılıma uygun olarak rastgele atanmıştır.

Nöronlara 2,4 ve 5. convolutional katmanlarda bias eklenmiştir. Ayrıca fully-connected gizli katmanlarda bu değer 1 alınmıştır. Bu aşama ilk adımlarda öğrenmeyi hızlandırıp, pozitif etkisiyle ReLU’nun etkisini artırmıştır. Diğer katmanlarda bias değeri 0 verilmiştir.

Öğrenme katsayısı (learning rate) 0.01 olarak başlatılmış, bitime kadar 3 kere değiştirilmiştir. Doğrulama hatası (validation error) iyileşmediği zaman değer 10’a bölünerek daha da küçültülmüştür.

Ağ 90 çevrim eğitilmiştir.

Sonuçlar

top-1 37.5% ve top-5 17.0% hata ile sınıflandırma yapılmıştır.

8 test resmi ve sonuçları aşağıda görülmektedir:

Verilen 5 test resmine en yakın eğitim verisinden getirdiği örnek resimler:

Ara katmanları azaltmak başarıyı düşürmektedir.

İndirmek için:

imagenet-classification-with-deep-convolutional-neural-networks


MATLAB ile Derin Öğrenmeye Giriş (Introducing Deep Learning with MATLAB)

Mathwork firması tarafından hazırlanan “Introducing Deep Learning with MATLAB” tanıtımını okurken aldığım notlar aşağıdadır. Dokümanı incelemek için tıklayınız.

Derin öğrenme, makine öğrenmesinin bir parçası olup bir sınıflandırma modelinin direk resim, müzik ve metinlerden öğrenmesini amaçlamaktadır. Genellikle sinir ağları mimarisi üzerine uygulanan derin öğrenme, birkaç katmanlı sinir ağının yüzlerce katmanlı hale gelmiş hali gibi düşünülebilir.

Bazı derin öğrenme uygulamaları:

-Otonom bir aracın yaya şeridi gördüğü anda daha dikkatli olması.
-ATM’nin sahte parayı reddetmesi.
-Görüntüden anlık çeviri yapmak.

Son yıllarda sınıflandırma başarısı giderek artmakta, böylece Derin Öğrenme popülerliğini artırmaktadır.

ImageNet ve PASCAL VoC gibi çok büyük veri kümelerine erişim imkanı sağlanması, GPU ile çok uzun süren hesaplamaların çok kısa sürelerde yapılabilmesi, ön tanımlı eğitim ile büyük veri kümelerinin daha küçük boyutlu verilerle temsilinin sağlanması Derin Öğrenme’nin popülerliğini artırmıştır.

Derin Sinir Ağı (Deep Neural Network):

Bir Derin Sinir Ağı Nasıl Öğrenir?

Başlangıçta ham girdi resmi verilir, daha sonraki katmanlarda ise modelin kendi oluşturduğu RELU (rectified linear units) bilgisi aktarılır ve sonuç olarak resim içerisindeki objeler tahmin edilmeye çalışılır.

Ham Girdi -> Convolution -> RELU (rectified linear units) -> Pooling -> aşamaları sürekli tekrar eder.

Dönüşümlü Sinir Ağları (Convolutional Neural Networks)

CNN veya ConvNet olarak kısaltılan Dönüşümlü Sinir Ağları, resim ve videolardan öğrenen en etkili derin öğrenme yaklaşımlarındandır.

Veriye convolution, pooling, rectified linear unit (ReLU) işlemleri onlarca veya yüzlerce katmanda tekrar edilerek veriden farklı öznitelik çıkarıp öğrenilmeye çalışılmaktadır.

Konvolüsyon(convolution), girdi görüntülerini her biri görüntülerden bazı özellikleri aktive eden bir dönüşümlü filtre kümesine yerleştirir.

Havuzlama (pooling), doğrusal olmayan örneklem azaltmayı gerçekleştirerek çıktıyı basitleştirerek ağın öğrenmesi gereken parametre sayısını azaltır.

Doğrultulmuş doğrusal birim (rectified linear unit (ReLU)), negatif değerleri sıfıra eşleyerek ve pozitif değerleri koruyarak daha hızlı ve daha etkili bir eğitim sağlar.

Özellik çıkarım aşamasından sonra sınıflandırma aşamasına geçilir:

Sonuncu katman, K’nın boyutlarının bir vektörünü çıkartan tamamen bağlı bir katmandır (K), burada, K, ağın tahmin edebileceği sınıfların sayısıdır. Bu vektör, sınıflandırılan herhangi bir görüntünün her sınıfının olasılıklarını içerir.

CNN mimarisinin son katmanı, sınıflandırma çıktısını sağlamak için bir softmax işlevi kullanır.

Derin Öğrenme ve Makine Öğrenmesi arasındaki farklar nedir?

Derin öğrenme, makine öğrenmesinin bir alt koludur. Makine öğrenmesi ile bir resimden özellikler çıkarılabilirken, derin öğrenme ile ham verilerden özellik çıkarımı yapılır. Derin öğrenme, yüzlerce, binlerce hatta milyonlarca veriye ihtiyaç duyar.

Makine Öğrenmesi Derin Öğrenme
Küçük veri setleriyle iyi sonuçlar Çok büyük veri setlerine ihtiyaç duyar
Eğitim hızlıdır Eğitim için yoğun hesaplama gerekir
İyi sonuçlar için farklı öznitelikler ve sınıflandırıcılara ihtiyaç duyar Öznitelikleri ve sınıflandırıcıları kendisi öğrenir
Doğruluk platoludur Doğruluk sınırsızdır

Yukarıdaki tablo aşağıdaki tablonun çevirisidir:

Derin Öğrenme Uygulaması

AlexNet, 2012 yılında yayınlanmış olan bir milyondan fazla resim ile eğitilmiş, yaklaşık 1000 kategoride sonuç veren bir önceden eğitilmiş resim sınıflandırma ağıdır.

Not: Mevcut MATLAB sürümün AlexNet entegrasyonunu desteklemediği için burada bırakıyorum. Siz kaynak dosyadaki uygulamayı inceleyebilirsiniz.