Önceki Evrişimsel Katmanın delta terimleri ve ağırlıkları göz önüne alındığında, bir Evrişimsel Katmanın delta terimini nasıl hesaplayabilirim?


10

İki kıvrımlı katman (c1, c2) ve iki gizli katman (c1, c2) ile yapay bir sinir ağı eğitmeye çalışıyorum. Standart backpropagation yaklaşımını kullanıyorum. Geriye doğru geçişte, bir katmanın (delta) hata terimini bir önceki katmanın hatasına, bir önceki katmanın ağırlıklarına ve aktif katmanın geçerli katmanın aktivasyon fonksiyonuna göre gradyanına göre hesaplarım. Daha spesifik olarak, l tabakasının deltası şöyle görünür:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

Normal bir katmana bağlanan c2 eğimini hesaplayabiliyorum. H1'in ağırlıklarını delta ile çarpıyorum. Sonra bu matrisi c2 çıktısı biçiminde yeniden şekillendiririm, aktivasyon fonksiyonunun gradyanı ile çarpar ve işim biter.

Şimdi c2 bir delta terim var - Hangi boyutu 4D matris (featureMapSize, featureMapSize, filterNum, patternNum). Ayrıca 3 boyutlu bir matris olan c2 ağırlıkları var (filterSize, filterSize, filterNum).

Bu iki terim ve c1 aktivasyonunun gradyanı ile c1 deltasını hesaplamak istiyorum.

Uzun lafın kısası:

Önceki evrişimsel katmanın delta terimi ve o katmanın ağırlıkları göz önüne alındığında, evrişimsel bir katmanın delta terimini nasıl hesaplayabilirim?

Yanıtlar:


6

Ben ilk önce kolayca bir çok boyutlu o zaman aktarılabilir bir boyutlu dizi (giriş) için basitlik için aşağıdaki evrişimsel bir katman için hata türetiyorum:

Burada, uzunluğundaki in, dönş. tabaka ağırlıklarının çekirdek boyutu ile her bir ağırlık gösteren ve çıkış . Bu nedenle şunu yazabiliriz (toplamı sıfırdan not edin): burada ve aktivasyon fonksiyonu (örn. sigmoidal). Elinizdeyken artık tarafından verilen bazı hata fonksiyonu ve evrişimsel katmandaki (önceki katmanınızdan biri) hata fonksiyonunu düşünebiliriz.yl-1N-l-1mwwbenxl

xbenl=Σbir=0m-1wbirybir+benl-1
ybenl=f(xbenl)fEE/ybenl. Şimdi hatanın bağımlılığını önceki katman (lar) daki ağırlıklardan birinde bulmak istiyoruz: ; burada meydana geldiği tüm ifadelerin toplamı . Son terimin , birinci denklemden görebileceğiniz gerçeğinden kaynaklandığını da biliyoruz . Gradyanı hesaplamak için, şu şekilde hesaplanabilecek ilk terimi bilmemiz gerekir:
Ewbir=Σbir=0N--mExbenlxbenlwbir=Σbir=0N--mEwbiryben+birl-1

wbirN--mxbenlwbir=yben+birl-1
Exbenl=Eybenlybenlxbenl=Eybenlxbenlf(xbenl)
tekrar birinci dönem önceki katman ve hata lineer olmayan aktivasyon fonksiyonu.f

Gerekli tüm varlıklara sahip olduktan sonra artık hatayı hesaplayabilir ve verimli bir şekilde değerli katmana geri gönderebiliriz: Son adımın -s wrt -s yazarken kolay anlaşılır . transpoze ağırlık maxtrix (belirtmektedir ).

δbirl-1=Eybenl-1=Σbir=0m-1Exben-birlxben-birlybenl-1=Σbir=0m-1Exben-birlwbirflbenpped
xbenlybenl-1flbenppedT

Bu nedenle, bir sonraki katmandaki hatayı şu şekilde hesaplayabilirsiniz (şimdi vektör gösteriminde):

δl=(wl)Tδl+1f'(xl)

kıvrımlı ve alt örnekleme katmanı olur: burada örnek işlemi hatayı maksimum havuzlama katmanından geçirir.

δl=upsbirmple((wl)Tδl+1)f'(xl)
upsbirmple

Lütfen beni eklemek veya düzeltmek için çekinmeyin!

Referanslar için bakınız:

http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

ve bir C ++ uygulaması için (kurulum gerektirmeden): https://github.com/nyanp/tiny-cnn#supported-networks

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.