Evrişimli sinir ağı ya da CNN, küçük yerel örüntüleri arayan ve sonra bunları daha büyük örüntüler hâlinde birleştiren bir sinir ağıdır. Görüntülerde ilk katmanlar çoğu zaman kenarları veya köşeleri, orta katmanlar dokuları ya da parçaları algılar; daha derin katmanlar ise bu sinyalleri son tahmini desteklemek için kullanır.
Temel fikir ağırlık paylaşımıdır. CNN, her piksel-konum çifti için ayrı bir ağırlık öğrenmek yerine aynı küçük filtreyi birçok konumda yeniden kullanır. Bu, ham görüntü üzerinde çalışan yoğun bir katmana göre onu çok daha ucuz hâle getirir ve aynı tür örüntüyü birden fazla yerde algılamasına yardımcı olur.
Evrişimli sinir ağı ne yapar?
Tam bağlı bir katmanda her çıktı aynı anda tüm girdi değerlerine bağlı olabilir. CNN ise daha yapısaldır. Genellikle filtre denen küçük çekirdekler kullanır ve bunlar her seferinde bir yerel yamaya bakar.
Tek kanallı bir girdi ve boyutlu bir çekirdek için, bir çıktı girdisi şu şekilde yazılabilir:
Bu, evrişim katmanının arkasındaki yerel ağırlıklı toplam fikridir. Birçok makine öğrenmesi kütüphanesinde uygulanan işlem teknik olarak ters çevrilmiş matematiksel evrişimden ziyade çapraz korelasyondur, ancak pratik sezgi aynıdır: çekirdek girdi üzerinde taranır ve bir özellik haritası üretir.
Özellik haritası, öğrenilen örüntünün nerede güçlü biçimde ortaya çıktığını gösterir.
Paylaşılan filtreler neden yardımcı olur?
Aynı dikey kenar bir görüntünün sol üst köşesinde de merkeze yakın bir yerde de görünebilir. Genelde modelin bunu her iki durumda da fark etmesini isteriz. CNN bunu, aynı filtre parametrelerini farklı konumlarda yeniden kullanarak sağlar.
Bunun iki pratik etkisi vardır:
- Ham görüntü üzerinde çalışan yoğun bir katmana kıyasla öğrenilen parametre sayısını azaltır.
- Ağın tek bir sabit konumu ezberlemek yerine tekrar eden yerel örüntüleri algılamasını teşvik eder.
Bu yeniden kullanım, CNN’lerin görüntü görevlerinde etkili olmasının nedenlerinden biridir.
Temel bir CNN mimarisi nasıl görünür?
Temel bir CNN çoğu zaman şu düzeni izler:
- evrişim katmanı
- ReLU gibi bir aktivasyon
- isteğe bağlı pooling veya downsampling
- daha fazla evrişim bloğu
- son tahmin katmanı
İlk katmanlar genellikle basit yerel yapıları yakalar. Daha derin katmanlar bu tepkileri birleştirerek daha büyük ve göreve daha özgü özellikler oluşturur.
Pooling zorunlu değildir, ancak kullanıldığında uzamsal boyutları küçültür; böylece sonraki katmanlar daha kompakt bir gösterimle çalışabilir. Yaygın bir örnek max pooling’dir; bu yöntem her küçük bölgede en büyük değeri tutar.
Eğer stride ve padding ise, boyutlu bir girdi ile boyutlu bir çekirdek, boyutlu bir çıktı üretir. Bir örneğin mantıklı olup olmadığını kontrol ederken bu boyut kuralı faydalıdır.
Çözümlü örnek: bir CNN özellik haritası nasıl oluşturulur?
Şu giriş görüntüsünü alın:
Şu çekirdeği kullanın:
Stride’ın olduğunu ve padding olmadığını varsayın. Girdi , çekirdek ise olduğundan çıktı olmalıdır. Her çıktı girdisi bir yamanın toplamıdır; çünkü çekirdekteki her değer ’e eşittir.
Sol üstteki çıktı değeri şöyledir:
Sağa doğru bir adım ilerideki yama şudur:
dolayısıyla
Tüm geçerli konumlar için hesaplama yapıldığında
elde edilir.
Bu çıktı özellik haritasıdır. Büyük değerler, çekirdeğin nerede güçlü bir eşleşme bulduğunu gösterir. Burada filtre, tam bir parlak blok görüldüğü yerlerde en güçlü tepkiyi verir.
Şimdi ReLU uygularsanız hiçbir şey değişmez; çünkü tüm girdiler zaten negatif değildir. Ardından stride’ı olan max pooling kullanırsanız, pooling sonrası çıktı
olur.
Bu yeni bilgi üretmez. En güçlü yakın tepkileri korur ve uzamsal ızgarayı küçültür.
Bu örnek basittir, ama temel mekanizmayı açıkça gösterir: bir filtre kayar, yerel ağırlıklı toplamlar hesaplar ve bir örüntünün nerede göründüğünü gösteren bir harita oluşturur.
Bir CNN eğitim sırasında ne öğrenir?
Yukarıdaki çekirdek elle seçildi, ancak gerçek bir CNN’de filtre değerleri veriden öğrenilir. Eğitim, bu değerleri ayarlar; böylece ortaya çıkan özellik haritaları görev için yararlı hâle gelir.
Görev görüntü sınıflandırma ise ağ, sınıfları ayırmaya yardımcı olan filtreler öğrenir. Görev segmentasyon veya nesne tespiti ise sonraki katmanlar bunun yerine bu çıktılar için eğitilir. Temel mekanizma aynıdır: ileri yayılım, kayıp, geri yayılım, parametre güncellemesi.
CNN öğrenirken yapılan yaygın hatalar
CNN’in sadece “görüntü sınıflandırıcı” olduğunu düşünmek
Görüntüler standart örnektir, ancak CNN’ler aslında yerel yapı ve paylaşılan filtrelerle ilgilidir. Yakın değerler önemliyse, aynı fikir görüntülerin ötesinde de yararlı olabilir.
Pooling’in her zaman gerekli olduğunu varsaymak
Yaygındır, ama evrensel değildir. Bazı mimariler uzamsal boyutu bunun yerine stride’lı evrişimlerle küçültür, bazıları ise daha fazla uzamsal ayrıntıyı daha uzun süre korur.
Stride ve padding’i göz ardı etmek
Özellik haritasının boyutu bu seçimlere bağlıdır. Stride veya padding’i değiştirirseniz yalnızca çıktının şeklini değil, her birimin hangi yerel komşulukları görebileceğini de değiştirirsiniz.
Katmanı sadece bir formül olarak görmek
Evrişim formülü önemlidir, ama mimari de önemlidir. CNN; evrişim, aktivasyon, katmanların üst üste gelmesi ve eğitimin birlikte çalışması sayesinde işe yarar.
Evrişimli sinir ağları ne zaman kullanışlıdır?
CNN’ler; görüntü sınıflandırma, nesne tespiti ve segmentasyon gibi bilgisayarlı görü görevlerinde yaygın olarak kullanılır. Ayrıca yerel örüntülerin anlamlı olduğu bazı sinyal işleme ve dizi ayarlarında da görülürler.
Özellikle, girdinin belirgin bir ızgara yapısı veya sıralı komşuluk yapısı olduğunda çok kullanışlıdırlar. Bu koşul zayıfsa, farklı bir mimari daha uygun olabilir.
CNN’leri anlamayı kolaylaştıran bir zihinsel model
CNN’i, küçükten başlayıp derinlikle birlikte daha soyut hâle gelen bir örüntü algılayıcı gibi düşünün. Bir katman, “Bu küçük örüntü burada görünüyor mu?” diye sorar. Sonraki katmanlar ise “Bu daha basit örüntüler birleşip daha anlamlı bir şeye dönüşüyor mu?” diye sorar.
Bu yüzden CNN’leri, yalnızca “evrişim” kelimesine değil, özellik haritalarına odaklandığınızda anlamak daha kolaydır.
Kendi sürümünüzü deneyin
Aynı girdiyi koruyun, ama çekirdeği şu şekilde değiştirin:
Özellik haritasını yeniden hesaplayın ve şimdi hangi bölgelerin büyük pozitif ya da negatif tepkiler ürettiğine bakın. Bu küçük değişiklik, farklı filtrelerin farklı örüntüleri nasıl algıladığını çok daha net gösterir.
Bir soruyla yardıma mı ihtiyacın var?
Sorunuzu yükleyin ve saniyeler içinde doğrulanmış adım adım çözüm alın.
GPAI Solver Aç →