Derine Daha Derine: Evrişimsel Sinir Ağları

0
1156
DERİNE DAHA DERİNE: EVRİŞİMSEL SİNİR AĞLARI
DERİNE DAHA DERİNE: EVRİŞİMSEL SİNİR AĞLARI

Bilgisayarlı görü neden gerekli?

‘Derin Öğrenme’ (Deep Learning) denince akla ilk gelen  Evrişimsel Sinir Ağları ’dır. Peki neden derin öğrenme, nedir derin öğrenme? Günümüzde yaşanan veri patlaması sonucu adını verdiğimiz ‘Büyük Veri’ (Big Data) beraberinde hesaplama karmaşıklığı getirdi. Ama esas mevzu verinin sadece büyük olması değil. Artık verilerden daha fazla şey beklememiz. Daha farklı bakmamız!

“For us Big Data, Small Data, Little Data, Fast Data, and Smart Data are all “Just Data.” The critical success factors for the use of data do not depend on its quantity, structure, or speed – it’s about using data to create true added value!” Alexander Thamm

say big data one more time
Say big data one more time

“Bizim için Büyük Veri, Küçük Veri, Hızlı Veri ve Akıllı Veri hepsi sadece ‘Veri’. Verilerin kullanımında kritik başarı faktörleri miktarına, yapısına veya hızına bağlı değildir-gerçek katma değeri yaratmak için verileri kullanmakla ilgilidir!” Alexander Thamm

Milyarlarca parametreyi hesaplamak için veriden farklı bilgiler çıkarmak gerektiği anlaşıldı. Görüntü Sınıflandırma (Image Classification), Nesne Bulma (Object Detection), Nesne Takip Etme (Object Tracking), Doğal Dil İşleme (Natural Language Processing), Stil Transferi (Style Transfering) gibi problemlerin çözümü için gereken motivasyon yine yapay sinir ağı tabanlıdır.

Verinin büyümesi ve veriden daha anlamlı bilgilere ulaşmak, öznitelik kestirimleriyle ilgili optimizasyon yapmayı zorunlu kılmaktadır. Klasik bir yapay sinir ağı modelleriyle daha önceki yazılarımda anlattığım gibi nöronlar ve katmanlar arasındaki bağlantılar ve öğrenilen parametreler çok büyük hesaplama zorlukları ortaya çıkarmaktadır. İşte tam bu noktada imdadımıza Yann LeCun yetişiyor. Evrişimsel Sinir Ağlarını tüm detaylarıyla yazımda anlatmaya çalışacağım.

İki Boyutlu Evrişim

İki boyutlu bilgiye uygulanacak olan filtrenin x ve y eksenine göre simetrisi alınır. Tüm değerler matriste eleman eleman çarpılır ve tüm değerlerin toplamı çıkış matrisinin ilgili elemanı olarak kaydedilir. Buna çapraz korelasyon ilişkisi de denir. Giriş verisi (örneğin; görüntü) tek kanallı iken bu işlem basitçe yapılabilmektedir. Ancak giriş verisi farklı formatlarda ve kanal sayısında olabilir.

F-2

Renkli görüntüler, Kırmızı-Yeşil-Mavi (RGB) 3 kanaldan meydana gelmektedir. Bu koşulda da evrişim işlemi 3 kanal için yapılır. Çıkış işaretinin kanal sayısı da uygulanan filtre kanalı/sayısı ile eşit olarak hesaplanır.

 

F-3

Bunu sinir ağındaki bir katman olarak hayal edelim. Giriş görüntüsü, filtre de aslında sürekli geri yayılımla güncellenen ağırlıklar matrisidir. Aktivasyon fonksiyonunu uygulanan çıkış matrisine en son skaler bir b (bias) değeri eklenir. İşlem akışını incelemek için aşağıdaki görüntüye tıklayınız.

F-4

 

Kenar Bulma

Kenar bilgileri, görüntüden elde edilen öznitelikler içinde en çok ihtiyaç duyulanlarından biridir. Giriş bilgisinin yüksek frekanslı bölgelerini simgelemektedir. Bu öznitelikleri elde etmek için dikey ve yatay olmak üzere iki filtre ayrı ayrı kullanılır. Geleneksek yöntemlerde- Sobel, Prewitt, Gabor gibi filtreler- filtre, görüntü üzerinde ‘evrişim ‘(convolution) işlemine tabii olur. Elde edilen çıkış, görüntünün kenar bilgilerini gösterir. 

F-5

 

Farklı kenar bulma filtreleri ile açısal kenarlar, karanlıktan aydınlığa, aydınlıktan karanlığa geçişler ayrı ayrı birer öznitelik olarak değerlendirilir ve hesaplanır. Genellikle kenarlar evrişimsel bir ağ modelinin ilk katmanlarında hesaplanmaktadır. Tüm bu hesaplamalar yapılırken giriş boyutu ve çıkış boyutu arasında farklılık meydana gelir. Örneğin; giriş görüntüsü (n): 6×6, kenar bulma filtresi (f): 3×3 olduğu durumda evrişim işlemi sonucu elde edilen çıkış görüntüsü: (n-f+1)x(n-f+1)=4×4 boyutlu olur. Eğer bu şekilde boyutun azalması istenmiyorsa -giriş ve çıkış boyutunun eşit olması isteniyorsa- ne yapılmalı?

Piksek Ekleme (Padding)

Evrişim işleminden sonra giriş işareti ile çıkış işareti arasındaki boyut farkını yönetmek elimizde olan bir hesaplamadır. Bu işlem giriş matrisine eklenecek ekstra pikseller ile sağlanır. İşte tam bu piksel ekleme işine (padding) denir. Giriş matrisi nxn, filtre (ağırlık) matrisi (fxf) olduğu durumda çıkış matrisinin giriş ile aynı boyutlu olması isteniyorsa; (n+2p-f+1)x(n+2p-f+1) formülü uygulanır. Burada ‘p’ ile gösterilen değer giriş matrisine eklenen piksel boyutudur yani padding değeridir. Bunu belirlemek için p=(f-1)/2 denkleminden faydalanılır. 

F-6

F-7

Kaydırma Adımı (Stride)

Bu değer evrişim işlemi için ağırlık matrisi olan filtreyi görüntü üzerinde birer piksellik adımlarla ya da daha büyük adımlarla kaydıracağının bilgisini verir. Bu da doğrudan çıkış boyutunu etkileyen diğer bir parametredir. 

F-8

Örneğin padding değeri p=1 iken, adım sayısı s=2 seçildiğinde çıkış matrisinin boyutu (((n+2p-f)/s)+1)x(((n+2p-f)/s)+1);  n=5 ve f=3 değerleri için hesaplanırsa çıkış boyutu (3)x(3) olur. Padding işleminde eklenen pikseller aşağıdaki örnekte olduğu gibi 0’lardan oluşabilir. Bir başka uygulanma şeklide yanındaki pikselin değerinin kopyalanmasıdır.

F-10

 

Pooling

Bu katmanda genellikle maksimum pooling yöntemi kullanılır. Ağın bu katmanında öğrenilen parametre yoktur. Giriş matrisinin kanal sayısını sabit tutarak yükseklik ve genişlik bilgisini azaltır. Hesaplama karmaşıklığını azaltmak için kullanılan bir adımdır. Ancak Hinton’ın kapsül teorisine göre verideki önemli bazı bilgilerinde kaybolmasına sebep olduğu için başarımdan ödün vermektedir. Özellikle lokasyon bilgisinin çok önemli olmadığı problemlerde yine de oldukça güzel sonuçlar vermektedir. Seçilen pooling boyutu içindeki piksellerin en büyüğünü çıkışa aktarır. Aşağıdaki örnekte 2×2 max-pooling işlemi 2 adım (piksel) kaydırılarak uygulanmıştır. İlgili 4 elemanın olduğu alandaki en büyük değeri çıkışa aktarılır. Çıkışta 4’te 1 boyutlu bir veri elde edilmiş olur.

KLASİK AĞLAR

Bir evrişimsel ağın içeriğinde yapılan işlemleri artık biliyoruz. Peki model nasıl oluşturulur? Bu soruya en kolay yanıt klasik ağ modellerini incelemektir. O halde derin öğrenme ya giriş yaptık demektir.

“I like to train Deep Neural Nets on large datasets.” Andrej Karpathy, Tesla AI
“Büyük veri setleri üzerinde Derin Sinir Ağları eğitmeyi severim.” Andrej Karpathy, Tesla AI

LeNet-5

1998 yılında yayınlanmış ve ilk başarılı sonucu veren evrişimsel sinir ağı modelidir. Yann LeCun ve ekibi tarafından posta numaraları, banka çekleri üzerindeki sayıların okunması için geliştirilmiştir. MNIST (Modified National Institute of Standards and Technology) veri seti üzerinde deneyler gösterilmiştir. Bu modelde sonradan geliştirilecek diğer modellerden farklı olarak boyut azalma adımlarında max-pooling yerine average (ortalama) pooling işlemi yapılmaktadır. Ayrıca aktivasyon fonksiyonu olarak ta sigmoid ve hiperbolik tanjant kullanılmaktadır. 

FC (Tam Bağlantı-Fully Connected) katmanına giren parametre sayısı 5x5x16=400 ve y çıkışında 0-9 arasındaki rakamları sınıflandırdığı için 10 sınıflı softmax bulunmaktadır. Bu ağ modelinde 60 bin parametre hesaplanmaktadır. Ağ boyunca matrisin yükseklik ve genişlik bilgisi azalırken derinlik (kanal sayısı) değeri artmaktadır.

AlexNet

2012 yılında evrişimsel sinir ağ modellerini ve derin öğrenmenin tekrar popüler hale gelmesini sağlayan ilk çalışmadır. Alex Krizhevsky, Ilya Sutskever and Geoffrey Hinton tarafından geliştirilmiştir. Temel olarak LeNet modeline, birbirini takip eden evrişim ve pooling katmanları bulunmasından dolayı, çok benzemektedir. Aktivasyon fonksiyonu olarak ReLU (Rectified Linear Unit), pooling katmanlarında da max-pooling kullanılmaktadır. 

Daha büyük ve daha derin olan bu ağ modeli paralel çift GPU (Grafik İşlem Birimi-Graphics Processing Unit) üzerinde iki parçalı bir modeldir. Yaklaşık olarak 60 milyon parametre hesaplanmaktadır. ImageNet ILSVRC yarışmasında sınıflandırma doğruluk oranını %74,3’ten %83,6’ya ani bir yükselme sağlayarak görüntü sınıflandırma probleminde bir kırılma noktasıdır.

VGG-16

Basit bir ağ modeli olup öncesindeki modellerden en önemli farkı evrişim katmalarının 2’li ya da 3’li kullanılmasıdır. Tam bağlantı (FC) katmanında 7x7x512=4096 nöronlu bir öznitelik vektörüne dönüştürülür. İki FC katmanı çıkışında 1000 sınıflı softmax başarımı hesaplanır. Yaklaşık 138 milyon parametre hesabı yapılmaktadır. Diğer modellerde olduğu gibi girişten çıkışa doğru matrislerin yükseklik ve genişlik boyutları azalırken derinlik değeri (kanal sayısı) artmaktadır. 

Modelin her evrişim katmanı çıkışında farklı ağırlıklara sahip filtreler hesaplanır ve katman sayısı artıkça filtrelerde oluşan öznitelikler görüntünün ‘derinliklerini’ simgelemektedir.

RESNET ve Neden ResNet?

Ağ modelinin gerçek anlamda derinleşmeye başladığı kendinden önceki modellerden farklı bir mantığı barındıran ResNet; artık değerlerin (residual value) sonraki katmanlara besleyen blokların (residual block) modele eklenmesiyle oluşmaktadır. ResNet bu özelliği ile klasik bir model olmaktan çıkmaktadır.

Doğrusal ve ReLU arasında iki katmanda bir eklenen bu değer aşağıdaki gibi sistemdeki hesabı değiştirir. Önceden gelen a[l]değeri, a[l+2] hesabına eklenmiş olur. 

Teorik olarak, modelde katman sayısı arttıkça başarımın artacağı düşünülür. Ancak gerçekte böyle olmadığı deneyimlenmiştir. Buradan hareketle ResNet modeli oluşturulmuştur. Böylece w[l+2]=0 olduğu durumda yeni teoriye göre a[l+2]=b[l+2] olur. Bu (vanishing gradient) istenmeyen bir durumdur.

Ancak artık değer (residual) beslemesi yeni çıkış eşitliğini iki önceki katmandan gelen a[l] değeri o an ki ağırlık 0 olsa bile öğrenme hatasını optimize eder. Daha hızlı eğitilir. 

AĞ İÇİNDE AĞ (NETWORK İN NETWORK)

2013 yılında Min Lin ve arkadaşlarının “Network in Network” makalesi ile modellerdeki hesaplama karmaşıklığına yeni ve ses getiren bir çözüm önermiştir. Google, bu öneri sayesinde altın tepsiyle sunulan modeli hemen kullanmıştır ve başarıya ulaşmıştır. Hesaplamada esneklik sağlanmış ve başarımı artırmak için varyasyonlu modellerin tasarlanmasına olanak tanınmıştır.

Peki ağ içinde ağ ne demek? Birçok kişinin neden yapıldığını anlamamasına karşın son derece basit bir matematiktir: 1×1 evrişim işlemi!

Ancak 1×1 element işlemin matris üzerinde bir etkisi olmaz dediğinizi duyar gibiyim 🙂

Ancak giriş matrisi çok kanallıysa işler değişir! Örneğin giriş matrisi 100 kanallıysa ve buna 30 kanallı bir 1×1 evrişim filtresi hacimsel olarak uygulandığında çıkış matrisinin kanal sayısı filtre sayısına eşit, yani 30 olur. O zaman 1×1 evrişim katmanı derinlikte boyut azaltmak demektir. Aşağıdaki örnekte de çıkış kanal sayısı filtre ile eşit şekilde hesaplanmaktadır.

Dikkat edilirse bundan önce anlattığım klasik ağ modellerinin tamamında modelin başından sonuna doğru ilerlerken matrislerin yükseklik ve genişlikleri pooling katmanları sayesinde azaltılıyordu. Ancak kanal sayıları artıyordu. O halde neden 1×1 evrişim katmanlarını modellere ekleyip kanal sayısını da istediğimiz gibi sınırlandırmayalım? Tabi bu soruyu Google ekibi sordu ve uyguladı. 2014 yılında “Inception” ile sonuçlar etkileyiciydi.

INCEPTION AĞLAR (GoogLeNet)

Şu ana kadar bahsi geçen ağ modellerinden farklı ve anlaşılması zor olanıdır. Ancak hesaplama karmaşıklığına ve büyüklüğüne bulunan çözüm beraberinde hız ve başarımı getirmektedir. En kolayı bunu bir örnekle açıklamak olur.

Inception ağ modeli modüllerden oluşmaktadır. Her bir modül, farklı boyutlu evrişim ve max-pooling işemlerinden meydana gelmektedir. Yukarıdaki görüntüde 3 farklı evrişim ve bir max-pooling işlemi sonucunca 28x28x256 boyutlu bir tensör elde edilmiştir. Bu çıkıştan sadece 5×5 evrişim işlemindeki parametre sayısını hesaplayıp işlem kompleksliğini değerlendirelim. 

Yalnızca bu işlem adımı için (28x28x32)x(5x5x192)=120 milyon parametre hesaplanması gerekir. Bunun gibi diğer evrişim ve max-pooling katmanlarını da aynı şekilde hesaplamak gerekir. C. Szegedy ve ekibi ‘Network in Network’ makalesine atıf yaparak her evrişim katmanından önce 1×1 evrişim katmanı kullanılarak işlem yükünü optimize etmeye odaklanmıştır. 

Böylece daha karmaşık bir ağ modelin ile daha az hesap ve daha hızlı bir tasarım yapılmaktadır. Bu koşulda; 1×1 evrişim katmanında: (28x28x16)x(1x1x192)=2,4 milyon parametre ve 5×5 evrişim katmanında: (28x28x32)x(5x5x16)=10 milyon parametre olmak üzere toplamda 12.4 milyon parametre hesaplanmaktadır. İlk duruma göre yaklaşık 10 kat daha az parametre hesabı son derece çarpıcıdır. Bu 1×1 evrişim işlemini ‘bottleneck’ (darboğaz) olarak tanımlamışlardır.

Her bir modüle ‘inception’ adı verilmektedir. Toplam 9 inception bloğundan oluşan modele, bu işlere (derin öğrenme) başlangıç değeri veren LeNet modeline atıf yaparak GoogLeNet adı verilmektedir. GoogLeNet modelinde modelin kendisi de genişlemektedir. Üstelik bu sadece versiyon 1. Bu modelin diğer bir ilginç özelliği de ilk kez bir akademik makalenin kaynakçasında bir ‘caps’ internet sayfasına atıf yapılmaktadır. Model adının esin kaynağı da bir Hollywood filmi olan ‘inception’. 

TRANSFER ÖĞRENME (TRANSFER LEARNİNG)

Bazı modellerin eğitilmesi, model karmaşıklığı ya da veri setinin büyüklüğü nedeniyle standart bilgisayar işlemcilerinde gerçekleştirmek imkansıza yakındır. Bu yüzden grafik işleme birimlerine ihtiyaç vardır. Günlerce bazen haftalarca süren eğitimler sonucunda bu eğitilmiş modeller farklı problemlerin çözümü içinde çeşitli şekillerde kullanılabilir. İşte tam da buna ‘Transfer Öğrenme’ denir. Örneğin; kullanacağınız veri seti yeterince büyük değilken bu işlem avantaj sağlamaktadır. ImageNet gibi 15 milyon farklı görüntüden oluşan veri setiyle eğitilmiş bir model varsa sizdeki veri seti çok az görüntüye sahipse bile öğrenme işlemi gerçekleştiği için çok daha başarılı sonuçlar üretilmiş olur. Peki transfer öğrenme kaç farklı şekilde yapılabilir?

  • Tüm modeli dondurup (eğitilebilir parametre=0, freeze=1) softmax çıkışını kendi probleminizin sınıf sayısına göre ayarlayarak,
  • Modelin birkaç katmanını sabit tutup son katmanlarını farklı tutarak tasarım yapmak,
  • Tüm ağı kendi veri setinizde eğitim için kullanılabilir (öğrenilebilir parametre=1, freeze=0)

Transfer öğrenme, yapay zeka çalışmalarında birçok problemin daha hızlı çözüm bulmasını sağlar. Çünkü açık kaynak kodlu bir sistem mevcuttur ve desteklenmektedir. GitHub’ta çalışmaların orijinalleri incelenip kendi problemlerinizde ön eğitim ya da transfer öğrenme için kullanılabilir. Burada kritik nokta derin öğrenme için tasarlanmış olan uygulamaların (framework) öğrenilmesi ve konfigürasyonların anlaşılmasıdır.

www.github.com

VERİ ARTIRMA (DATA AUGMENTATION)

Küçük veri setlerinde özellikle başarımı artırmak için verilerin çeşitli bozulma etkilerine maruz bırakılarak artırılmasıdır. Bu şekilde modelin farklı koşulları da öğrenmesinin sağlanmaktadır.

 

  • Görüntünün çeşitli eksenlere göre simetriklerinin alınması,
  • Rastgele bir örnek parçasının kesilip alınması,
  • Eksenlerinin değiştirilmesi,
  • Renk oranlarının değiştirilmesi,

gibi birçok farklı şekilde veriden elde edilen yeni veri parçaları oluşturularak çoğaltma/artırma yapılabilir. Böylece model ezberleme (overfit) eğiliminden uzaklaşmaktadır.

DERİNE DAHA DERİNE

Makine öğrenmesi yıllardır kullanılan yöntemlerin başında gelmektedir. Buna rağmen yazı boyunca bahsi geçen tüm bu modeller, hesaplama karmaşıklığından uzaklaştırmaktadır. Aynı zamanda modelin ve verilerin derinleşmesine sebep olmaktadır.

Birçok araştırmacı ve verilerin sahibi sayılabilecek büyük şirketler, başta Google-DeepMind, Facebook, Baidu özellikle görüntü ve ses konusunda derin öğrenme projeleri yürütmektedir. DARPA’da bu konuda büyük yatırımlar yaparak insansız hava araçlarından toplanan görüntülerin meydana getirdiği büyük verilerden anlamlı sonuçlar çıkarmak için derin öğrenme çalışmalarına destek sağlamaktadır.

Kısaca farkında olun ya da olmayın, yapay zeka artık bilim kurgu değil, günlük hayatımızın bir parçası haline gelmiştir! Derin öğrenme ile makine öğrenmesinin birçok pratik uygulaması gerçekleştirilmektedir. Sağlık hizmetlerinde hasta takibinden ilaç üretimine, otonom robotlardan araçlara kadar yaşamımızın bir parçasıdır. Kullandığımız telefondaki uygulamalar, karşımıza çıkan reklamlar, bizi bizden bazen daha iyi tanıyan o ‘şey’!

Sizin de ilginizi çekmiyor mu? 🙂

Kaynaklar

Bir sonraki yazıda ResNet V1-V2 ve Inception modüllerinin V1-V2-V3 ve V4 tipleri arasındaki farkı inceleyeceğim. Merak edenleri beklerim.

Kaynaklar

Serinin birinci yazısı için tıklayınız…

Yazar Merve Ayyüce Kızrak‘a teşekkürler

Facebook Yorumları