Convolutional Neural Network

Convolutional Neural Network (ConvNet yada CNN) nedir, nasıl çalışır?


Facebook’a bir resim yüklediğinizde size “X kişisini etiketlemek istermisiniz?” şeklinde bir önermede bulunur. Peki o kişiyi nasıl bildiğini merak ettiniz mi?
Veya Google’ın resim arama algoritması nasıl çalışır hiç düşündünüz mü?
İşte tüm bunların arkasında bir sinir ağı vardır. Daha net olmak gerekirse, Convolutional Neural Networkten (ConvNet yada CNN) söz ediyoruz. (Türkçeye Evrişimsel Sinir Ağları olarak çevriliyor). CNN biyoloji ve bilgisayar bilimlerinin garip bir karışımı gibi görünse de, bu, resim tanıma için kullanılan çok etkili bir mekanizmadır.


Fikrin Arkasındaki Biyoloji

Cnn verilen görüntüleri ayırt etmek için bir uçağı uçak ya da yılanı yılan haline getiren benzersiz özellikleri kullanırlar. Aslında bu süreç beynimizde de bilinçsizce oluyor.
Örneğin, bir uçak resmine baktığımızda, iki kanat, motor, pencere gibi özellikleri birbirinden ayırarak uçağı tanımlayabiliriz. Cnn de aynı şeyi yapar, ancak daha önce eğriler ve kenarlar gibi alt düzey özellikleri tespit ederler ve daha soyut kavramlara kadar bunları oluştururlar.

Evrişimsel Sinir Ağlarının Yapısı

Konuştuğumuz işlevselliği elde etmek için, Cnn görüntüyü çeşitli katmanlarla işler. Bu katmanları yazının bir sonraki bölümünde ayrıntılı olarak inceleyeceğiz ancak şu an sadece bu katmanlara ve amaçlarına genel bir bakış yapalım:
  • Convolutional Layer — Özellikleri saptamak için kullanılır
  • Non-Linearity Layer — Sisteme doğrusal olmayanlığın (non-linearity) tanıtılması
  • Pooling (Downsampling) Layer — Ağırlık sayısını azaltır ve uygunluğu kontrol eder
  • Flattening Layer — Klasik Sinir Ağı için verileri hazırlar
  • Fully-Connected Layer — Sınıflamada kullanılan Standart Sinir Ağı




Temel olarak, Cnn, sınıflandırma sorununun çözümü için standart Sinir Ağı kullanır, ancak bilgileri belirlemek ve bazı özellikleri tespit etmek için diğer katmanları kullanır.
Haydi her katmanın ve işlevlerinin detaylarına dalalım.

Convolutional Layer

Bu katman CNN’nin ana yapı taşıdır. Resmin özelliklerini algılamaktan sorumludur. Bu katman, görüntüdeki düşük ve yüksek seviyeli özellikleri çıkarmak için resme bazı fitreler uygular. Örneğin, bu filtre kenarları algılayacak bir filtre olabilir. Bu filtreler genellikle çok boyutludur ve piksel değerleri içerirler.(5x5x3) 5 matrisin yükseklik ve genişliğini, 3 matrisin derinliğini temsil eder.
Şimdi mu filtrenin nasıl uygulandığına bakalım;

Örnek
Örneğin basit olması için sadece 1 kanal işlenecektir.
Resimin 5×5 boyutunda ve 1 ve 0 ‘lardan oluşan bir resim olduğunu varsayalım. Filtremizi 3×3 boyutunda oluşturalım.

Filtre
Şimdi, filtrenin nasıl uygulandığına bir bakalım,
Öncelikle, filtre görüntünün sol üst köşesine konumlandırılır. Burada, iki matris arasında (resim ve filtre) indisler birbirisi ile çarpılır ve tüm sonuçlar toplanır, daha sonra sonucu çıktı matrisine depolanır. Ardından, bu filtreyi sağa 1 piksel (“basamak” olarak da bilinir) kadar hareket ettirip işlemi tekrarlanır. 1. Satır bittikten sonra 2 satıra geçilir ve işlemler tekrarlanır. Tüm işlemler bittikten sonra çıktı matrisi oluşturulur. Burada çıktı matrisinin 3×3 olmasının nedeni 5×5 matrisinde 3×3 filtresi yatayda ve dikeyde 3 kez hareket etmesinden kaynaklanır.
Eğer resim 6×4 ve filtre 3×3 boyutunda olsaydı çıkış matrisi 4×2 boyutunda olurdu.
Peki çıktı matrisi bize ne anlatıyor? Bu matrise genellikle Feature Map denir. Filtre tarafından temsil edilen özellikte görüntünün bulunduğu yeri gösterir. Kısacası, filtreyi görüntü üzerinden hareket ettirerek ve basit matris çarpımını kullanarak, özelliklerimizi tespit ediyoruz.
Genellikle, birden çok özelliği tespit etmek için birden fazla filtre kullanlır, yani bir Cnn ağında birden fazla konvolüsyonel (Convolutional) katman bulunur. Aşağıdaki animasyona bir göz atın, burada bu işlem biraz daha görsel olarak anlatılıyor:

Bir adım daha

İlk filtreyi uyguladığımızda, bir Feature Map oluşturuyor ve bir özellik türünü tespit ediyoruz. Ardından, ikinci bir filtre kullanıp başka bir özellik türünü algılayan ikinci bir Feature Map oluştururuz.
Yukarıdaki örnekte görebildiğimiz gibi bu filtreler basit olabilir, ancak görüntüde bazı karmaşık özellikler çıkarmak istiyorsanız bu filtreler karmaşık hale gelebilirler. 
Daha önce bahsettiğimiz, ancak ayrıntılı olarak açıklamadığımız bir başka şey, stride (büyük adım).
Bu terim genellikle padding terimi ile birlikte kullanılır. Stride, filtrenin giriş görüntüsünün etrafında nasıl evrildiğinini denetler. Yukarıdaki örnekte Stride 1 piksel idi, ancak daha büyük olabilir. Bu, Feature Map’in çıktısının boyutunu etkiler.
Cnn’nin ilk aşamalarında, ilk filtreleri uygularken, diğer Convolutional Katmanlar için mümkün olduğunca çok bilgiyi korumamız gerekir. İşte padding bu nedenden dolayı kullanılır. Feature Map’in orijinal giriş görüntüsünden daha küçük olduğunu fark etmişsinizdir. Bu nedenle Padding, (aşağıdaki resimde olduğu gibi)resmin boyutunu korumak için bu haritaya sıfır değerler katacaktır:

Non-linearity

Tüm Convolutional katmanlarından sonra genellikle Non-Linearity(doğrusal olmayan) katmanı gellir. Peki görüntüdeki doğrusallık neden bir problemdir? Sorun şu ki, tüm katmanlar doğrusal bir fonksiyon olabildiğinden dolayı Sinir Ağı tek bir perception gibi davranır, yani sonuç, çıktıların linear kombinasyonu olarak hesaplanabilir.
Bu katman aktivasyon katmanı (Activation Layer) olarak adlandırılır çünkü aktivasyon fonksiyonlarından birini kullanılır. Geçmişte, sigmoid ve tahn gibi doğrusal olmayan fonksiyonlar kullanıldı, ancak Sinir Ağı eğitiminin hızı konusunda en iyi sonucu Rectifier(ReLu) fonksiyonu verdiği için artık bu fonksiyon kullanılmaya başlanmıştır.
ReLu Fonksiyonu f (x) = max (0, x)
ReLu fonksiyonunun Feature Map’a uygulandığında aşağıdaki gibi bir sonuç üretilir.

Feature Map’taki siyah değerler negatiftir. Relu fonksiyonu uygulandıktan sonra siyah değerler kaldırılır onun yerine 0 konur.

Evrişimsel Sinir Ağlarının Mimarileri

Basit bir Cnn kurmanın yolu, birkaç Convolutional Katmanı arka arkaya koymak ve her birinden sonra ReLU katmanı eklemektir. Ve bundan sonra Pooling katmanı(ları) ve Flattening katmanı eklenmelidir.daha sonra ReLu katmanı kadar Fully-Connceted katmanı eklenir.Aklınızda bulunsun Cnn’nin en son katmanı Fully Connected katmanı olmalıdır.Örnek olarak;
Giriş Resmi -> [[Conv -> ReLU]*N -> Pool?]*M -> Flattening -> [FC -> ReLU]*K -> FC
şeklinde tanımlanabilir.
Bazı yaygın ConvNet isimleri;
LeNet — Bu ağ, Convolutional Networks’ün ilk başarılı uygulaması sayılır. 1990’lı yıllarda Yann LeCun tarafından geliştirildi ve posta kodlarını, basit basamakları vb. okumak için kullanıldı.
AlexNet — Bu ağ, 2012’de ImageNet ILSVRC challenge’ta sunuldu. Diğer ağlardan oldukça başarılı bir performans göstermiştir.
GoogLeNet — ILSVRC 2014’ün kazananı bu ağ olmuştur. Ağdaki parametrelerin sayısını önemli ölçüde azaltmak için avarage pooling katmanlarını kullandılar.
VGGNet — Bu ağ, ağ derinliğinin Sinir ağları için ne kadar önemli olduğunu kanıtlamıştır. 16 tane Convolutional katman bulunur.


Yorumlar

Bu blogdaki popüler yayınlar

Android Activity Lifecycle