Bu makale, Evrişimli Sinir Ağlarının (CNN) iç işleyişini araştırıyor. Bu ağlarda ne olduğunu merak ediyor olabilirsiniz? Nasıl öğrenirler?
Vgg16 modelini kedi ve köpek görüntü veri kümesi üzerinde eğitiyoruz. Öncelikle önceden eğitilmiş bir model kullanmanın neden iyi bir yol olduğunu açıklayın. Bunu yapmak için, bu modellerin ne öğrendiğini düşünmek önemlidir. Esasen, CNN filtreleri öğreniyor ve bunları görüntülere uyguluyor. Bunlar, Instagram özçekimlerine uyguladığınız filtrelerden farklı, ancak konsept o kadar da farklı değil. CNN küçük bir kare alır ve onu görüntüye uygulamaya başlar, bu kareye genellikle "pencere" denir.
İlk seviyede ağ, köşegenler gibi basit şeyleri öğrenebilir. Ağ, her katmanda bu bulguları birleştirebilir ve sürekli olarak daha karmaşık kavramları öğrenebilir. Bütün bunlar belirsiz geliyor ve Zeiler ve Fergus (2013) CNN öğrenimini görselleştirmek için harika bir iş çıkardı. Bu, gazetede kullandıkları CNN. Imagenet yarışmasını kazanan Vgg16 modeli buna dayanıyor.
Zeiler & Fergus'tan CNN (2013)
Bu resim şimdi dağınık görünüyor, panik yapmayın! Bu fotoğrafta hepimizin görebileceği bir şeyle başlayalım. İlk olarak, giriş resmi kare ve 224x224 pikseldir. Daha önce bahsettiğim filtre 7x7 pikseldir. Modelin bir girdi katmanı, 7 gizli katmanı ve bir çıktı katmanı vardır. Çıktı katmanındaki C, model tarafından tahmin edilen sınıfların sayısını ifade eder. Şimdi en ilginç şeylere bir göz atalım: Model farklı seviyelerde neler öğrendi!
CNN katman 2
Soldaki görüntü CNN'in öğrendiklerini temsil eder ve sağdaki görüntü gerçek görüntünün bir bölümünü temsil eder.
CNN'nin ikinci katmanında, Model, köşegenlerden daha ilginç bir şekil aldı. .
CNN katman 3
3. katmanda, modelin daha spesifik şeyler öğrenmeye başladığını görebiliriz.
CNN katman 4 ve 5
Son olarak, dördüncü ve beşinci katlar bu trendi sürdürüyor. Beşinci kat, köpek ve kedi sorunlarımız için çok faydalı olan zil seslerini topluyor. Aynı zamanda tek bisikletleri ve kuş / sürüngen gözlerini de alır. Lütfen bu görüntülerin her seviyede öğrenmenin sadece küçük bir bölümünü gösterdiğini unutmayın.
Umarım bu, önceden eğitilmiş modellerin kullanılmasının neden yararlı olduğunu açıklar. Vgg16 modeli, köpekleri ve kedileri tanımlama konusunda zaten çok şey biliyor. Kedi köpek problem eğitim setimizde sadece 25.000 görsel bulunmaktadır. Yeni model tüm bu özellikleri bu görüntülerden öğrenemeyebilir. İnce ayarlama adı verilen bir işlemle, Vgg16 modelinin son katmanını 1000 sınıf olasılığını vermeyecek şekilde değiştirebiliriz, ancak yalnızca 2 kedi ve köpek çıktı verebilir.
Kedileri ve köpekleri sınıflandırmak için kullanılan önceden eğitilmiş Vgg16 modeli doğal olarak bu iki kategoriyi çıkaramaz. Aslında 1000 kategoriye ayrılmıştır. Buna ek olarak, model "kediler ve köpekler" kategorisini bile çıkarmaz, ancak belirli kedi ve köpek türlerini çıkarır. Öyleyse, resimleri yalnızca kedi veya köpek olarak sınıflandırmak için bu modeli etkili bir şekilde nasıl değiştirebiliriz?
Bir seçenek, bu cinsleri manuel olarak kedi ve köpeklere eşlemek ve olasılıkları özetlemektir. Ancak, bu yöntem bazı önemli bilgileri göz ardı eder. Örneğin, resimde kemikler varsa, görüntü bir köpek olabilir. Ancak sadece her türün olasılığına bakarsak bu bilgi kaybolacaktır. Orada, modelin sonundaki doğrusal (yoğun) katmanı değiştiriyoruz ve onu yalnızca 2 sınıf çıktısı veren bir katmanla değiştiriyoruz. Vgg16 modeli aslında sonunda 3 doğrusal katmana sahiptir. Tüm bu katmanlarda ince ayar yapabilir ve onları geri yayılım yoluyla eğitebiliriz. Geri yayılım genellikle bir tür soyut sihir olarak kabul edilir, ancak sadece gradyanları hesaplamak için zincir kurallarını kullanır. Asla matematiğin detayları hakkında endişelenmenize gerek yok. TensorFlow, Theano ve diğer derin öğrenme kütüphaneleri bunu sizin için yapacak.
Ağın sonundaki doğrusal katmanı az önce tartıştık. Ancak sinir ağındaki tüm katmanlar doğrusal değildir. Sinir ağındaki her bir nöronun değerini hesapladıktan sonra, bu değerleri aktivasyon fonksiyonundan geçiriyoruz. Yapay sinir ağı temelde matris çarpımından oluşur. Yalnızca doğrusal hesaplamalar kullanırsak, bunları birbirine ekleyebiliriz. Bu çok derin bir ağ değil ... Bu nedenle, ağın her katmanında genellikle doğrusal olmayan etkinleştirme işlevleri kullanıyoruz. Doğrusal ve doğrusal olmayan fonksiyonları birlikte istifleyerek, teorik olarak her şeyi modelleyebiliriz. Bunlar en popüler üç doğrusal olmayan aktivasyon fonksiyonudur:
En sık kullanılan üç aktivasyon fonksiyonu: Sigmoid, Tanh ve düzeltilmiş doğrusal birim (ReLu)
Şu anda ReLu, en yaygın kullanılan doğrusal olmayan aktivasyon fonksiyonudur. Ana neden, gradyan kaybolma ve seyreklik olasılığını azaltmasıdır. Bu nedenleri daha sonra daha detaylı tartışacağız. Modelin son katmanı genellikle farklı bir etkinleştirme işlevi kullanır çünkü bu katmanın belirli bir çıktıya sahip olmasını istiyoruz. Softmax işlevi, sınıflandırma için çok popülerdir.
Vgg16 modelinde son katmanda ince ayar yapıldıktan sonra model 138.357.544 parametresine sahiptir. Neyse ki, tüm gradyanları manuel olarak hesaplamadık.