DERİNE DAHA DERİNE: Evrişimli Sinir Ağları

Bilgisayarlı görü neden gerekli?

Nvidia- Evrişimli Sinir Ağları Kullanılarak Medikal Anomali Tespiti

Derin Öğrenme’ (Deep Learning) denince akla ilk gelen Evrişimli 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
“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

Geldiğimiz noktada, 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ğı modeliyle 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şimli 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.

İki boyutlu evrişim işlemi gösterimi

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.

Yatay ve Dikey Filtreleme İşlemi-Coursera-deeplearning.ai

Bu hesaplama işlemini sinir ağındaki bir katman olarak hayal edelim. Giriş görüntüsü ve 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. Aşağıdaki görselden evrişim işlemi akışını inceleyebilirsiniz.

Convolutional Neural Networks — CS231n

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. Geleneksel 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.

Yatay ve Dikey Kenar Bulma-Coursera-deeplearning.ai

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şimli 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): 6x6, kenar bulma filtresi (f): 3x3 olduğu durumda evrişim işlemi sonucu elde edilen çıkış görüntüsü: (n-f+1)x(n-f+1)=4x4 boyutlu olur. Eğer bu şekilde boyutun azalması istenmiyorsa -giriş ve çıkış boyutunun eşit olması isteniyorsa- ne yapılmalı?

Piksel 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.

Piksel Ekleme Gösterimi

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.

Ö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 şekli de yanındaki pikselin değerinin kopyalanmasıdır.

Kaydırma Adımı Gösterimi

Ortaklama (Pooling)

Bu katmanda genellikle maksimum ortaklama 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ı bilgilerin de kaybolmasına sebep olduğu için başarımdan ödün vermektedir.

Ortaklama İşlemi Gösterimi

Özellikle lokasyon bilgisinin çok önemli olmadığı problemlerde bile oldukça güzel sonuçlar vermektedir. Seçilen ortaklama boyutu içindeki piksellerin en büyüğünü çıkışa aktarır. Yandaki örnekte 2x2 max-ortaklama işlemi 2 adım (piksel) kaydırılarak uygulanmıştır. İlgili 4 elemanın olduğu alandaki en büyük değer çıkışa aktarılır. Çıkışta 4’te 1 boyutlu bir veri elde edilmiş olur.

KLASİK AĞLAR

Bir evrişimsli 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 öğrenmeye 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
IMAGENET

LeNet-5

1998 yılında yayınlanmış olan ve ilk başarılı sonucu veren evrişimli 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.

LENET-5

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şimli 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.

AlexNet

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.

VGG-16

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 IN 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: 1x1 evrişim işlemi!

Ancak 1x1 element işlemin matris üzerinde bir etkisi olmaz dediğinizi duyar gibiyim :)

Basit Evrişim İşlemi Sorunsalı

Ancak giriş matrisi çok kanallıysa işler değişir! Örneğin giriş matrisi 100 kanallıysa ve buna 30 kanallı bir 1x1 evrişim filtresi hacimsel olarak uygulandığında çıkış matrisinin kanal sayısı filtre sayısına eşit, yani 30 olur. O zaman 1x1 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 1x1 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.

Naive Inception Module

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 5x5 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 1x1 evrişim katmanı kullanılarak işlem yükünü optimize etmeye odaklanmıştır.

Network in Network

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; 1x1 evrişim katmanında: (28x28x16)x(1x1x192)=2,4 milyon parametre ve 5x5 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 1x1 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’.

GoogLeNet

TRANSFER ÖĞRENME (TRANSFER LEARNING)

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.

Veri Artırma Yöntemlerine Örnek Gösterimler-Coursera-deeplearning.ai
  • 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? ;)

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.