Evrişimli katmanların nasıl çalıştığını anlama
İyi bilinen elle yazılmış rakam tanıma problemi için Keras ve Mnist veri setini kullanarak bir CNN ile çalıştıktan sonra, evrişimli katmanın nasıl çalıştığına dair bazı sorularla karşılaştım. Evrişim sürecinin ne olduğunu anlayabiliyorum.

İlk sorum şu: Filtreler nelerdir? Amaçlarını anlayabiliyorum. Bir görüntüdeki kenarları, şekilleri vb. Eşlemek için kullanılırlar. Ama nasıl başlatılıyorlar? Rastgele bir başlangıç değerleri mi var yoksa kullanılan standart görüntü filtreleri var mı? Rastgele bir değerle başlatılıyorlarsa, değerler ağın eğitim sürecinde değiştirilmelidir. Durum buysa, yeni bir soru yaratılır, birisi evrişimli katmanın filtresini nasıl geri yayar? Bu sürecin arkasındaki algoritma nedir?
İkinci olarak, Keras'taki evrişimli katmana bir aktivasyon fonksiyonu ekleyebileceğimi fark ettim. Çıktının tüm matrisi etkinleştirme işlevinden mi geçiyor? Bir aktivasyon işlevinin kullanımı evrişimli katmanın öğrenme sürecini nasıl değiştirir?
Son olarak, bir evrişimli katman yoğun bir katman gibi ağırlık ve önyargılara sahip midir? Evrişim sürecinden sonra çıktı matrisini bir ağırlık matrisiyle çarpıp, etkinleştirme işlevinden geçmeden önce bazı önyargılar ekliyor muyuz? Bu doğruysa, bu ağırlıkları ve önyargıları eğitmek için yoğun katmanlarla yaptığımız aynı süreci izliyor muyuz?
Yanıtlar
Filtreler neler?
Bir filtre / çekirdek, geri yayılım algoritması kullanılarak öğrenilen bir dizi öğrenilebilir ağırlıktır. Her filtreyi tek bir şablon / desen depoluyor olarak düşünebilirsiniz. Bu filtreyi karşılık gelen girişe dönüştürdüğünüzde, temel olarak depolanan şablon ile girişteki farklı konumlar arasındaki benzerliği bulmaya çalışıyorsunuz.
Ama nasıl başlatılıyorlar? Rastgele bir başlangıç değerleri mi var yoksa kullanılan standart görüntü filtreleri var mı?
Filtreler genellikle görünüşte rastgele bir değerde başlatılır ve daha sonra filtrelerin probleminizi çözmesi için değerleri optimize etmek için bir gradyan iniş optimize edici kullanırsınız.
Birçok farklı başlatma stratejisi vardır.
- Normal veya tek tip dağılım gibi bir dağılımdan örnek
- Tüm değerleri 1 veya 0 veya başka bir sabit olarak ayarlayın
- Pratikte çok iyi çalışan bazı sezgisel yöntemler de var, popüler olanı, onları burada tanıtan Xavier Glorot'un adını taşıyan sözde glorot başlatıcıdır. Glorot başlatıcıları da dağıtımdan örnek alır ancak çekirdek karmaşıklığına bağlı olarak değerleri keser.
- Belirli çekirdek türleri için, iyi performans gösteren başka varsayılanlar vardır. Örneğin bu makaleye bakın .
Rastgele bir değerle başlatılıyorlarsa, değerler ağın eğitim sürecinde değiştirilmelidir. Durum buysa, yeni bir soru yaratılır, birisi evrişimli katmanın filtresini nasıl geri yayar? Bu sürecin arkasındaki algoritma nedir?
Evrişim işlemini girdi görüntüsü ile rastgele ağırlıklardan oluşan bir matris arasındaki bir fonksiyon olarak düşünün. Modelinizin kayıp işlevini optimize ederken, ağırlıklar (ve önyargılar) son derece iyi ayırt edici uzaysal özellikler oluşturmaya başlayacak şekilde güncellenir. Model mimarinizde tanımladığınız optimize edici ile gerçekleştirilen backpropogation'ın amacı budur. Matematiksel olarak, geri dönüşün bir evrişim işleminde nasıl gerçekleştiğine (180 dönüş ile tam dönüşüm) giren birkaç kavram daha vardır. Eğer ilgileniyorsanız, bu bağlantıyı kontrol edin .
Çıktının tüm matrisi etkinleştirme işlevinden mi geçiyor? Bir aktivasyon fonksiyonunun kullanımı evrişimli katmanın öğrenme sürecini nasıl değiştirir?
Aktivasyon fonksiyonlarını sadece doğrusal olmayan "ölçekleme" fonksiyonları olarak düşünelim. Bir girdi verildiğinde, bir etkinleştirme işlevinin işi, verileri belirli bir aralıkta "sıkıştırmaktır" (örnek -> Her negatif değeri sıfıra ayarlayarak ve geri döndürerek girişi bir aralığa (0, inf) "sıkıştırır". olduğu gibi her pozitif değer)
Şimdi, sinir ağlarında, giriş özelliği, ağırlık matrisi ve önyargı (mx + c) üzerine doğrusal bir işlev uygulayan düğümlerde etkinleştirmeler uygulanır. Bu nedenle, CNN için de durum aynı. İleri geçişiniz giriş görüntüsünü aldığında, bir filtre uygulayarak (ağırlık matrisi) üzerinde bir evrişim işlevi yaptığında, bir önyargı ekler, çıktı daha sonra onu doğrusal olmayan bir şekilde 'ezmek' için bir etkinleştirme işlevine gönderilir. sonraki katman.
Aktivasyonların neden yardımcı olduğunu anlamak oldukça basit. Tüküren bir düğümüm varsa x1 = m0*x0+b0
ve bu daha sonra tükenen başka bir düğüme gönderilirse x2 = m1*x1+b1
, genel ileri geçiş tam x2 = m1*(m0*x0+b0)+b1
olarak x2 = (m1*m0*x0) + (m1*b0+b1)
veya ile aynıdır x2 = M*x0 + B
. Bu, sadece 2 doğrusal denklemin istiflenmesinin başka bir doğrusal denklem verdiğini ve bu nedenle gerçekte 2 düğüme gerek olmadığını, bunun yerine sadece 1 düğüm kullanıp x0'dan aynı sonucu x2 elde etmek için yeni M ve B değerlerini kullanabilirdim.
Bu, bir aktivasyon işlevi eklemenin yardımcı olduğu yerdir. Bir etkinleştirme işlevi eklemek, doğrusal olmayan model uzayını doğru bir şekilde keşfedebileceğiniz şekilde sinir ağı katmanlarını yığmanıza olanak tanır, aksi takdirde, yalnızca y=mx+c
keşfetmek için model alanıyla sıkışıp kalırsınız çünkü doğrusal işlevlerin tüm doğrusal kombinasyonları doğrusal bir modeldir.
Evrişimli bir katmanın ağırlığı ve yoğun bir katman gibi önyargıları var mı?
Evet öyle. Ağırlık matrisi (filtre) bir evrişim işlemi kullanılarak giriş görüntüsüne uygulandıktan sonra eklenirconv(inp, filter)
Evrişim sürecinden sonra çıktı matrisini bir ağırlık matrisi ile çarpıp aktivasyon işlevinden geçirmeden önce bazı önyargılar ekliyor muyuz?
Girdi görüntüsünün bir bölümü ile filtre arasında, daha büyük girdi görüntüsü üzerinde kıvrılırken bir iç çarpım işlemi gerçekleştirilir. Çıktı matrisi daha sonra önyargı (yayınlama) ile eklenir ve 'sıkıştırmak' için bir aktivasyon işlevinden geçirilir.
Bu doğruysa, bu ağırlıkları ve önyargıları eğitmek için yoğun katmanlarla yaptığımız aynı süreci izliyor muyuz?
Evet, tüm karışıma eklenen yeni bir işlem olan evrişim dışında, ileriye doğru geçişte tam olarak aynı süreci takip ediyoruz. Özellikle geri geçiş için dinamikleri değiştirir, ancak özünde genel sezgi aynı kalır.
Sezginin püf noktası -
- Bir özelliği ve bir filtreyi karıştırmayın. Nokta, dönüşüm, önyargı ve etkinleştirmeler gibi işlemleri kullanarak giriş görüntüsünden özellikleri (temel desenler) çıkarmanıza yardımcı olan şey bir filtredir.
- Her filtre, görüntünün (kenar gibi) üzerinde bulunan bazı basit desenlerin 2B haritasını çıkarmanıza olanak tanır. 20 filtreniz varsa, çıktıda kanallar olarak yığılmış 3 kanallı bir görüntü için 20 özellik haritası alırsınız.
- Farklı basit kalıpları yakalayan bu tür birçok özellik, eğitim sürecinin bir parçası olarak öğrenilir ve sonraki katman için temel özellikler haline gelir (başka bir CNN veya yoğun olabilir)
- Bu özelliklerin kombinasyonları, modelleme görevinizi gerçekleştirmenize izin verir.
- Filtreler, backprop kullanılarak bir kayıp işlevini en aza indirmeye yönelik optimize edilerek eğitilir. Geriye dönük mantığı izler:
- How can I minimize my loss?
- How can I find the best features that minimize the loss?
- How can I find the best filters that generate the best features?
- What are the best weights and biases which give me the best filters?
İşte CNN'lerle çalışırken akılda tutulması gereken iyi bir referans resim (sadece sezgiyi güçlendirmek için)

Umarım sorunuzu cevaplamıştır.
CNN, bir Yoğun Sinir ağının, örneğin İleri Geçiş ve Geri Yayımlamayı öğrendiği şekilde öğrenir .
Burada öğrendiklerimiz filtrelerin ağırlıklarıdır .
Yani, bireysel sorularınızın cevapları -
- Ama nasıl başlatılıyorlar? - Standart init. örneğin glorot_uniform
- daha sonra değerler ağın eğitim sürecinde değiştirilmelidir . Evet
- Bir kişi evrişimli katmanın filtresini nasıl geri yayar? Bu sürecin arkasındaki algoritma nedir? - GradientDescent ile ANN Backpropagation gibi
- Keras'taki evrişimli katmana bir aktivasyon işlevi ekleyebilirim. Çıktının tüm matrisi etkinleştirme işlevinden mi geçiyor? - Evet, çoğu zaman ReLU'yu tutuyoruz
- Bir aktivasyon fonksiyonunun kullanımı evrişimli katmanın öğrenme sürecini nasıl değiştirir? - YSA'da kullanmamızla aynı sebepten dolayı, yani Doğrusal Olmayan
- Evrişimli bir katmanın ağırlığı ve yoğun bir katman gibi önyargıları var mı? - evet
- Bu doğruysa, bu ağırlıkları ve önyargıları eğitmek için yoğun katmanlarla yaptığımız aynı süreci izliyor muyuz? Evet, sadece paylaşılan ağırlık / filtreler / evrişim ve havuzlama kavramlarını ekliyoruz
Yukarıdaki cevapları açıklığa kavuşturmak için CNN'in bazı önemli noktalarını açıklamaya çalışacağım -
- Her filtre nD hacmi boyunca bir evrişim yapar, örneğin RGB için 3-D
- Böylece piksellerle eleman bazında çarpma yapar, çıktı toplanır ve bir Aktivasyon fonksiyonundan geçer.
- Bu, bir Özellik haritasının tek öğesi olur
- Her filtre bir özellik haritası oluşturur.
- Filtre derinliği, örneğin ilk RGB görüntüsü için 20 filtre kullandıysanız , özellik haritalarının sayısına eşit olacaktır . 20 özellik haritası oluşturacak ve bu katmanda 5x5 filtre kullanırsanız filtre boyutu = 5x5x20 .
- Her filtre parametre ekler = boyutu, örneğin son örnek için 25
- Basit bir NN gibi görselleştirmek istiyorsanız. Aşağıdaki resme bakın . Tüm teta çarpılır, toplanır ve bir aktivasyon işlevinden geçer. Geri yayılım, Yoğun sinir ağında olduğu gibi gerçekleşir

$\hspace{6cm}$İmaj Kredisi - Jeremy Jordan
Siyah beyaz bir sezgi geliştirmek için bu referansları okuyabilirsiniz.
CS231n: Kış 2016
Jeremy Jordan blogu
Numpy Implementation
Bazı yönlerden, kıvrımlar standart mimariden radikal bir sapma getirmez. Filtrelenmiş girdiye (maks, min, ortalama, vb.) Uygulanan işlemler sürekli olduğundan, bu filtreler ağın kayıplı bir "katmanı" oluşturur. Filtre parametrelerinin eğitilebileceğini sezmekte haklısınız - bu nedenle 2x2 kareyi [0,1,2,0] 'a göre dönüştüren ve daha sonra bir eğitim periyodunda maksimumu veren bir filtre [.1,' e göre dönüşebilir. 9,1.7,0] ve bir sonrakinde maks. Bu eğitim SGD kullanılarak yapılabilir. Geçiş matrisini, bir işlevle birlikte bir ağırlık ve önyargı kümesi olarak eşdeğer olarak ifade edildiğini düşünebilirsiniz - ancak her pakette olduğu gibi somutlaştırılmamış olabilir (ben keras kullanmadım).
Bununla birlikte, bildiğim kadarıyla, filtre işlevi eğitim sırasında değişime tabi değildir - "maksimum" katman "ortalama" katmanına dönüşmeyecektir. Bunun neden olduğunu düşünün.
Aktivasyon fonksiyonları konusunda - sadece sonuca daha fazla doğrusal olmayanlık katarlar. Ek olarak, eğer monoton iseler (bu genellikle böyledir), o zaman maks, min, ortalama vb. Gibi birçok yaygın filtre işlemiyle gidip gelebilmeleri gerekir. Böylece katman çıktısı Max (Relu (Filter (Giriş))) veya Relu (Maks (Filtre (Giriş))), eski durum muhtemelen biraz daha kendine özgüdür.
İlk sorum şu: Filtreler nelerdir?
Derin Öğrenmede Konvansiyon, evrişimde kullanılan ağırlıklara ya filtreler ya da eşanlamlı olarak çekirdek demektir. Diğer alanlar bu iki terim arasında bir ayrım yapar - benim kitabımda, ağırlık dizisi çekirdektir ve bu ağırlıklarla bir evrişim gerçekleştiren işlem filtredir. Yani filtre, görüntü gibi bir miktar girdi alan ve size iyi, filtrelenmiş bir görüntü veren bir işlevdir . Evrişimli filtrelerden bahsettiğimizi anlayarak, çekirdeği eğitmek filtreyi eğitmekle eşdeğerdir, çünkü filtre tamamen çekirdekteki ağırlıklarla tanımlanır.
(Matematiksel olarak konuşursak, evrişimli filtreler, kompakt destekli doğrusal zamanla değişmeyen filtreler sınıfıdır .)
Ama nasıl başlatılıyorlar?
Sayısız yol var, diğer cevaplara bakın.
birisi evrişimli katmanın filtresini nasıl geri yayar
Filtreler ve çekirdekler arasında bir ayrım yapmanın anlaşılmasının karşılığını tam da burada alır. Aslında yaptığınız şey, evrişim işlemine iki argüman iletmektir: çekirdek ve girdi .$$ f(k,x) = k\star x $$ Filtre $f$ kısmen çekirdeğe uygulandı: $$ f_k = \backslash x \mapsto f(k,x) $$Yani bir sen sonuçta ne ilgileniyorsanız; eğitimden sonra çekirdek sabitlenecektir, bu nedenle filtre yalnızca$x$. Ancak filtreyi (en azından genel çerçevelerde) gerçekten geri yayamazsınız çünkü bu bir işlevdir. Geri yayınladığınız şey çekirdektir ve bu, diğer parametreleri geri yayınladığınız gibi çalışır:$f$ Türevleri ile birlikte (her iki argümandan!) $x$ ileri geçişte, ve sonra geriye doğru geçişte, size her ikisinde de gradyan katkılarını söyleyen ikili bir vektör aracılığıyla gönderin $x$ ve $k$. İçindeki biri$x$ önceki katmana geri geçersiniz, $k$ öğrenme güncellemesi için kullanıyorsunuz.
İkinci olarak, Keras'taki evrişimli katmana bir etkinleştirme işlevi ekleyebileceğimi fark ettim.
Evet, ancak aktivasyon aslında evrişim işleminin bir parçası değil. En iyisi ayrı bir katman olarak anlaşılır, ancak herhangi bir parametresi olmadığı ve CNN'ler tipik olarak her evrişimden sonra bir Relu içerdiğinden, Keras'ın bunun için bir kısayolu vardır.$$ g(k,x) = \operatorname{Relu}(f_k(x)) $$ $$ g_k = \bigl(\backslash x\mapsto \operatorname{Relu}(f_k(x))\bigr) = \operatorname{Relu} \circ f_k $$ Bunu geri yaymak için, evrişime ulaşmadan önce önce aktivasyon türevinden geriye doğru geçişi çekersiniz.
Son olarak, bir evrişimli katman yoğun bir katman gibi ağırlık ve önyargılara sahip midir?
Evet, ağırlıklar çekirdekte ve tipik olarak önyargılar da ekleyeceksiniz, bu tamamen bağlantılı bir mimari için olduğu gibi tam olarak aynı şekilde çalışır.
Bir şey olduğu , katlamalı mimarileri önemli ve çoğu zaman gerçekten çok iyi açıklanamayan böyle bir tabaka sadece tek evrışimlı filtre ancak böyle filtrelerin bir bütün “banka” kendi çekirdek ile her aslında olmasıdır. Böylece, her girdi için, kanal adı verilen tam bir çıktı ailesi elde edersiniz :$$ f_i(\mathbf{k},x) = f(k_i,x) $$Daha sonra, bunların hepsini bir sonraki katmana geçirirsiniz, yani katmanların da birden fazla kanalı kabul etmesi gerekir - bu yine birden çok çekirdeğe sahip olarak ele alınır, yani tam bir çekirdek matrisine sahip olursunuz . Buna matematiksel olarak bakmanın bir yolu, sinyal akışının uzayda vektörler içermemesidir.$I$ görüntü sayısı, ancak tensör-ürün alanında $\mathbb{R}^m\otimes I$, nerede $m$kanal sayısıdır. Ve "kanal alanında", aslında tamamen bağlantılı bir performans sergiliyorsunuz. (İnsanlar hakkında konuştuğunda$1\times1$ evrişimli katmanlar, aslında anlamlı bir evrişim gerçekleştirmedikleri anlamına gelir, sadece kanallar arasında tamamen bağlı bir matris.)