ResNet, MobileNet, Vanishing Gradient: Nesne Sınıflandırma Ağlarının Gelişimi ve Çıkardığımız Dersler
Önceki yazımızda AlexNet, VGGNet, Inception ağlarını incelemiştik. Bu yazımızda biraz daha modern ağlara ve Vanishing Gradient problemine getirilen çözüme bakacağız.
Önceki yazıya ulaşmak için:
Derinlik ve anlamsal zenginlik:
Yukarıda gördüğünüz grafik CNN katmanlarındaki tepkileri göstermektedir. Görüldüğü gibi ilk katmanlarda çizgi ve kenar bulma filtreleri oluşmuşken ilerleyen katmanlarda bunların birleşimlerini kullanarak daha karmaşık yapıları filtreleyen nöronlar oluşmuştur.
Derin öğrenme ağlarında derinlik arttıkça öğrenilen anlamsam değerler (feature) zenginleşir.
Her katman kendinden önceki katmanların öğrendiklerini birleştirerek yeni filtre oluşturur. Gözünüzde canlandırmak için şu şekilde düşünebilirsiniz:
Çizgi ve kenar ->Yuvarlak ve dikdörtgen -> Pencere, baca, yüz -> Ev ve araba
Yuvarlak şekilleri tanımayı öğrendikten sonra bir yuvarlağın içinde 3 yuvarlak ( gözler ve ağız ) birleştirerek yüz şeklini anlayabilir ya da dikdörtgeni öğrendikten sonra bir dikdörtgen içinde birden fazla dikdörtgen var’ı öğrenerek pencereler içeren bir evi tanıyabilir hale gelebilir.
Tabiki o nöronun tam olarak insanın düşüncesel yapısıyla eşlenik bir kavramı temsil etmesi gerekmez, yalnızca anlaşılması kolaylaştırılması için bu örnekler verilmiştir.
Bu linkte katmanların görselleştirmesini daha rahat incelyebilirsiniz. https://distill.pub/2017/feature-visualization/appendix/
The Vanishing/Exploding Gradient
Peki anlamsal değer artıyorsa neden daha derin ağlar kurmuyoruz? Bunun cevaplarından biri kaybolan ve patlayan gradient problemi.
Backpropogationda güncellenen nöron ağırlıklarının türevin zincir kuralı ile hesaplandığını biliyoruz. Arka arkaya koyduğumuz her katman bu zinciri gittikçe büyütüyor.
Peki şöyle bir durum düşünün:
10 katmanlı bir ağda hesaplanan aktivasyon fonksiyonlarının sonuçlarının hepsinin aynı ve 0.2 olduğunu varsayalım. Son katman 0.2 ye göre değişim gösterecektir, bir arkasındaki katman ise 0.2*0.2 =0.04 değişim gösterecektir. İlk katman ise 0.2¹⁰ = 0.0000001 değişim gösterecektir, yani neredeyse hiç.
Her katmanda nöron ağırlıkları gittikçe küçülmekte ve değişim ilk katmanlara neredeyse hiç ulaşmamaktadır. Bu yüzden loss fonksiyonu çok çok az değişmekte ve eğitim çok uzun sürmektedir
Aynı şekilde 1'in üzerindeki ağırlıklar içinse sonsuza gidebilir yani 1.2¹⁰ = 6.191 iken 1.8¹⁰= 357 ve 1.9¹⁰ = 613'e çıkar. Yani çok küçük ağırlık güncellemesi bile çok büyük değişimlere sebep olabilir.
İşte ResNet bu probleme çözüm sunmuştur.
Resnet (2015):
ILSVRC 2015’te Microsoft’un 152 katmanlı, o zamana kadar yapılmış en derin CNN ağı olan ResNet, %3.57 hata payıyla birinci olmuş ve %5 hata payı yapan insanı da geride bırakmıştır.
ResNet nispeten basit ve düz bir mimariye sahiptir. Her konvolüsyondan sonra ReLu ve aralarda max pooling içerir. Ancak onu etkili kılan derin olmasıdır.
Resnet The Vanishing/Exploding Gradient problemine çözüm önerisi olarak, gradient’in akışını fazla etkiye maruz bırakmadan daha kolay erken ve geç katmanlara gidebileceği Identity ve Projection bağlantılarını getirmiştir
Bu bağlantılardan identity basitçe önceki katmanın çıkışından
alınan değerleri, katman sonucuyla toplamaktadır. Katman boyutlarının farklı olduğu zamanlar ise projection bağlantısı kullanmakta ve toplanacağı katmanın boyutuna göre ölçeklendirme yapıldıktan sonra toplama işlemi uygulamaktadır. Bu bağlantılar öğrenilecek parametre içermediklerinden işlem yüküne etkileri yoktur. (Basit toplama işlemi dışında) Ancak değişimlerin katlanmaya maruz kalmadan ağın ilk katmanlarına dahi ulaşmasını sağlamaktadır. Bu şekilde 1202 katmana kadar ulaşmışlardır!
19 katmanlı VGG 19 19.6 milyar FLOPs içerirken 152 katmanlı ResNet sadece 11.3 milyar FLOPs içermekte ve daha doğru sonuçlar vermektedir.
Ayrıca ResNet her konvolüsyondan sonra batch normalizasyonu uygulamaktadır. Ve bu normalizasyonu ilk benimseyen ağlardandır.
Batch Normalizasyonu:
Toplu halde gelen imgeleri standartlaştırarak öğrenme süresini kısaltmaktadır.
MobileNet (2017):
Doğruluk oranlarını arttırmak için Nesne Tanıma ağları giderek büyümüş ve karmaşıklaşmıştır. Ancak MobileNet daha az işlem gücü isteyen bir ağ yaratmaya yönelmiştir.
MobileNet, mobil platformlar düşünülerek tasarlanmış, gereken işlem gücü ile doğruluk arasında seçim yapabildiğimiz verimli bir ağdır.
Bunu standart 3x3 konvolüsyon filtresini 2 parçaya ayırarak yapmaktadır. Standart 3x3 konvolüsyon filtresi, her renk kanalını işleme dahil ederek ağırlıklı toplamını almakta ve tek kanala indirmektedir.
Ancak MobileNet’in Depthwise Separable convolutions adını verdikleri işlem, her kanalı kendi içinde evriştirdikten sonra 1x1 konvolüsyona sokarak bu işlemi yapmaktadır. Böylece sonucun boyutları aynı olmasına rağmen eğitilmesi gereken parametre miktarı düşürülmüş olur. Bu yeni filtre, standart filtreye oranla yaklaşık 9 kat daha az işlem gerektirmektedir.
Ayrıca kullanılan donanıma ve eldeki probleme göre hız ve doğruluk arasında seçim yapmaya yarayan 2 hiperparametre sunmuşlardır, Giriş katmanı genişlik çarpanı α ve giriş katmanı çözünürlük çarpanı ρ. Bu hiperparametreler değiştirilerek, doğruluk oranı daha yüksek ancak daha
çok işlem gücü isteyen ağlar ya da işlem gücü istemi daha az ve doğruluk oranı daha düşük ağlar oluşturulabilmektedir.
Tablolarda görüldüğü üzere doğruluk ve işlem gücü arasında değişiklik yapabilmekteyiz. Örneğin genişlik çarpanını 1.0 dan 0.75'e çektiğimizde parametre sayısı ve işlem istemi neredeyse yarıya düşmüş ancak doğruluk sadece %2.2 düşmüştür.
Böylece hem gömülü sistemlerde hem de büyük işlem gücüne sahip sistemlerde kullanabiliriz.
MobileNet telefonlar ve gömülü sistemlerde derin öğrenme ağları kullanmayı kolaylaştırmıştır.
Nesne tanıma ağlarınının GPU ve CPU üzerindeki hız karşılaştırmalarını yukarıdaki tabloda görebilirsiniz. GPU üzerinde MobileNet çok büyük farklar göstermezken, CPU üzerinde diğer ağlardan çok daha verimli olduğunu gözlemliyoruz.
Özet:
Bu yazımızda Vanishing/Exploding Gradient problemini ve getirilen çözümü gördük.
Ayrıca daha derine ulaşmamızı sağlayan ResNet. Ve çok daha düşük işlem gücüyle gömülü sistemlerde kullanabileceğimiz MobileNet ağlarını inceledik.
Bir sonraki yazımızda nesnelerin sınırlarını veren Nesne Algılama ( Object Detection ) ağlarına giriş yapacağız.