AlexNet, VGGNet, Inception: Nesne Sınıflandırma Ağlarının Gelişimi ve Çıkardığımız Dersler
Bu yazıda aşağıdaki nesne sınıflandırma ağlarını ve bu ağların getirdiği yenilikleri inceleyeceğiz:
- AlexNet (2012)
- VGGNet (2014)
- GoogLeNet (Inception V1) (2014)
Ayrıca getirilen yenilikler olarak aşağıdaki kavramları inceleyeceğiz:
- ReLu
- Local response normalization (LRN)
- Dropout
- 1x1 Konvulüsyon
- Global Avarage Pooling
Önbilgi:
Bu yazıda CNN (Convulution Neural Network) lerin nasıl çalıştığını bildiğinizi varsayayıyorum.
Eğer
- Kernel
- Loss Fonksiyonu
- Backpropogation
- Konvülsiyon
- Pooling
- Softmax
gibi kavramlar size tanıdık gelmiyorsa, CNN ile derin öğrenmeye giriş yazılarına bakmanızı tavsiye ediyorum.
Popüler CNN sınıflandırma ağları:
AlexNet (2012):
AlexNet, nesne sınıflandırma alanında derin öğrenme ağlarının populerliğini başlatan ve derin öğrenmeye ilginin tekrar artmasını sağlayan bir mihenk taşıdır.
İçerisinde 20 binden fazla kategoride 14 milyondan fazla resim bulunduran bir veri seti olan ImageNet’in 2010’dan 2017’ye kadar düzenlediği ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
yarışmasında, 2012 yılında en yakın rakibine göre hata payını %10.8 düşürerek büyük bir farkla birinci olmuştur.
AlexNet, 5 CNN ve sonda 3 tam bağşı katmanlardan oluşmaktadır. En son ise softmax ile 1000 kategoride değer verir.
Mimariye dikkat ettiğimizde dikey olarak iki ayrı yapıdan oluştuğunu görebiliriz. Bu 2 GPU üzerinde eğitilecek şekilde tasarlanmış olmasındandır.
AlexNet’in getirdikleri:
Aktivasyon Fonksiyonu:
Aktivasyon fonksyonu olarak standart f(x)=tanh(x) yerine hesaplaması çok daha basit lineer f(x)=max(0,x) kullanmıştır. Yapılan deneylerde iki aktivasyon fonksiyonu arasında çok fark olmadığı görülmüştür.
Local response normalization (LRN):
AlexNet sınırları (-1, 1) olan sin veya tanh aktivasyon fonksiyonları yerine sınırı (0,+∞) olan ReLu kullandığı için değerler sonsuza uzanabilir. Bunun önüne geçmek için AlexNet Local response normalization kullanmıştır.
Burada i filtrenin çıkış değeri, a(x,y), b(x,y) normalizasyondan önce ve sonraki pixel değerlerini, N kanal sayısını ifade etmektedir. Hiperparametrelerdeb (k,α,β,n) k sıfıra bölünmeyi engellemek için, α normalizasyon sabiti, β konstrast sabiti n ise kaç komşu pikselin göz önünde bulundurulacağını belirtmektedir.
Dropout:
Toplamda 60 milyon parametre ve 650,000 nöron içeren AlexNet’in ezberlemesini önlemek içinse sondaki tam bağlı katmanlarına %50 oranında dropout uygulanmıştır. Yani her eğitimde tam bağlı katmanlarda kurulan bağlantıların yarısı silinmektedir. Böylece nöronlar bazı bağlantılara çok güvenemeden hepsini genelleştirmek zorunda kalır.
VGGNET (2014):
ILSVRC 2014'te GoogleLeNet in ardından 2. olmuştur. VGG (Visual Geometry Group) yarışmasına 3 farklı ağ ile katılmıştır. Sırasıyla 11,16 ve 19 katmandan oluşan VGG-11, VGG-16 ve VGG-19.
Mimarisinde 3x3 konvolüsyon katmanlarından sonra max pooling katmanı, sonunda ise 3 adet Fully Connected (tam bağlı) katman barındırmaktadır.
VGG’nin en büyük katkısı derinliğin sınıflandırmada önemini göstermesidir.
3x3 Filtrelerin kullanımı:
VGG, 11x11 ve 7x7 gibi büyük konvolüsyon filtreleri yerine daha az işlem gerektiren 3x3 konvolüsyon filtresi kullanarak derinliğe odaklanmıştır.
Aslında arka arkaya 2 adet 3x3 filtre kullanmak 1 adet 5x5 filtre kullanmaya denk gelmektedir. Ancak anlamsal değeri daha fazladır.
Mimariden çıkarılan dersler:
Tek farkları fazladan LRN katmanı olan VGG-11 (%10.4) ve VGG-11 LRN (%10.5) incelendiğinde AlexNet’in getirdiği local response normalization katmanının sonucu kötüleştirdiği görülmektedir. Artık normalizasyon katmanı olarak LRN değil Batch Normalization (BN) kullanılmaktadır.
VGG-13'e baktığımızda hata oranının daha da azaldığını görüyoruz. Yani fazladan konvolüsyon katmanları sistemin daha iyi cevap vermesini sağlıyor.
VGG-13 (%9.9)’ten tek farkı fazladan 3 adet 1x1 konvolüsyon katmanı içeren VGG-16(Conv1) (%9.4) da ise daha da iyi bir sonuç elde edilmiş. Demek ki 1x1 katmanlar çözünürlüğü değiştirmeden lineerliği azaltarak sınıflandırmanın başarısına yardım ediyorlar. Ayrıca 1x1 conv katmanları GoogLeNet, ResNet ve MobileNet ağlarında da kullanılmıştır.
VGG-16(%8.8) ile VGG-19 (%9.0) u karşılaştırdığımızda ise fazla katmanların artık başarıyı düşürdüğünü gözlemliyoruz. Ayrıca fazla katman, parametre sayısını arttırmakta ve Loss fonksiyonunun minimize edilmesinin daha uzun sürmesine neden olmaktadır.
GoogLeNet (2014), (Inception v1):
ILSVRC 2014 yarışmasının birincisidir. 22 katmandan oluşmaktadır. Inception ismi derinliği göz önünde bulundurduklarından direk filmden gelmektedir.
Bakacağımız yenilikler:
- 1x1 Konvulüsyon
- Inception Modülü
- Global Avarage Pooling
1x1 Filtre:
GoogLeNet’te 1x1 konvulüsyon filtresi boyut ve işlem yükünü azaltmak için kullanılmaktadır. Bu sayede filtrelerin genişliği ve derinliği arttırılabilir.
Örneğin bir 5x5 filtreyi ele alırsak
Burada işlem sayısı: (14×14×48)×(5×5×480) = 112.9M
Eğer araya boyut azaltacak 1x1 filtre eklersek:
İlk işlem sayısı: (14×14×16)×(1×1×480) = 1.5M
İkinci işlem sayısı: (14×14×48)×(5×5×16) = 3.8M
Toplam işlem sayısı: 1.5M + 3.8M = 5.3M
Görüldüğü gibi çok daha az işlemle benzer sonuçlar elde edebiliyoruz. Inception kısmı burada devreye giriyor. 1x1 yardımı sayesinde düşürdüğümüz işlem yüküne farklı filtreler ekleyebiliriz.
Inception Module:
Önceki incelediğimiz ağlarda filtre boyutları sabitti ancak GoogLeNet farklı filtre boyutları içeren katmanlardan modüller oluşturmuş ve aynı anda farklı boyutlardan anlamsal değer çıkarmayı hedeflemiştir. 3x3 filtre küçük alanlara odaklanırken 5x5 filtre daha büyük alanlara odaklanmış ve modülün sonunda birleştirilmişlerdir. Bu sayede her modül farklı tiple anlamlar çıkarmıştır.
Global Avarage Pooling:
Önceki incelediğimiz ağlarda sonlarda tam bağlı katmanlar bulunur. 7x7 boyutundaki bir katmanın işlem yükünü incelersek 7×7×1024×1024 = 51.3M elde ederiz. GoogLeNet ise sonda tam bağlı katman kullanmak yerine, derinliği 1024 olan 7x7 katmanındaki her derinliğin ortalamasını alıp sonuç olarak bu ortalamayı kullanmıştır. Eğitilirken değiştirilen parametre sayısı sıfır (0)’a düşmüştür.
Mimari:
Modülleri öğrendikten sonra tüm mimari artık o kadar karmaşık gelmeyecektir.
Fark ettiyseniz aralarda 2 adet daha softmax katmanı var. Bu katmanlar yalnızca eğitim sırasında kullanılmış ve derin yapısından dolayı vanishing gradient problemini önlemek için yapılmıştır
Özet:
Bu yazımızda CNN gelişimine öncülük eden en popüler 3 ağı inceledik.
- AlexNet aktivasyon fonksiyonu olarak ReLu kullanan ilk ağ oldu.
- VGGNet daha küçük filtrelerle derinliğin önemini gösterdi.
- GoogLeNet ise 1x1 kovulüsyonları getirerek işlem sayısını azaltıp modüller içerisinde farklı boyutlarda filtreler kullandı.
Aşağıda hızlarını ve parametre sayılarını bulabilirsiniz. GoogLeNet( Inception)’in parametre sayısı AlexNet’ten çok daha az olmasına rağmen daha yavaş olduğunu fark ettiyseniz bunun sebebi yapması gereken noktalı sayı (FLOPS = Floating Point Operations Per Second) işlemlerinin daha fazla olmasıdır.
Bir sonraki yazımızda Vanishing/Exploding Gradient problemine bakıp ResNet ve MobileNet ağlarını inceleyeceğiz.
Kaynaklar:
- The History Began from AlexNet: A Comprehensive Survey on Deep Learning Approaches
- [AlexNet]
ImageNet Classification with Deep Convolutional Neural Networks - [VGGNet]
Very Deep Convolutional Networks for Large-Scale Image Recognition - [GoogLeNet]
Going Deeper With Convolutions - https://towardsdatascience.com/difference-between-local-response-normalization-and-batch-normalization-272308c034ac
- https://medium.com/coinmonks/paper-review-of-vggnet-1st-runner-up-of-ilsvlc-2014-image-classification-d02355543a11
- https://medium.com/coinmonks/paper-review-of-googlenet-inception-v1-winner-of-ilsvlc-2014-image-classification-c2b3565a64e7
- https://ikhlestov.github.io/pages/machine-learning/convolutions-types/
- https://github.com/jcjohnson/cnn-benchmarks