Evrişimli sinir ağları tam olarak matris çarpımı yerine evrişimi nasıl kullanır?


13

Yoshua Bengio'nun derin öğrenme Kitabı'nı okuyordum ve sayfa 224'te yazıyor:

Evrişimli ağlar, katmanlarından en az birinde genel matris çarpımı yerine evrişimi kullanan sinirsel ağlardır.

bununla birlikte, "matris çarpımını evrişim ile nasıl değiştireceğimin" matematiksel olarak hassas bir şekilde% 100 emin değildim.

Beni gerçekten ilgilendiren, 1D'deki giriş vektörleri için bunu tanımlamaktır ( ), bu yüzden resim olarak girdim olmayacak ve 2D'deki evrişimden kaçınmaya çalışmayacağım.xRd

Örneğin, "normal" sinir ağlarında, operasyonlar ve yem koğuş paterni Andrew Ng'in notlarındaki gibi kısaca ifade edilebilir:

f ( z ( l + 1 ) ) = a ( l + 1 )

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

burada , doğrusal olmayan geçmeden önce hesaplanan vektördür . Doğrusal olmayanlık, vektörü üzerinde pero girişi yapar ve , söz konusu katman için gizli birimlerin çıktısı / aktivasyonudur. f z ( l ) a ( l + 1 )z(l)fz(l)a(l+1)

Bu hesaplama benim için açıktır, çünkü matris çarpımı benim için açıkça tanımlanmıştır, ancak sadece matris çarpımını evrişim ile değiştirmek benim için net görünmüyor. yani

W(l)a(l)=z(l+1)
f(z(l+1))=a(l+1)

Yukarıdaki denklemi matematiksel olarak tam olarak anladığımdan emin olmak istiyorum.

Sadece matris çarpımını evrişim ile değiştirmeyle ilgili ilk sorun, genellikle in bir satırını nokta ürünle tanımlamasıdır . Böylece, nin bütününün ağırlıklar ile nasıl ilişkili olduğunu ve gösterildiği gibi boyutun vektörüyle açıkça bilir . Ancak, onu kıvrımlarla değiştirdiğinde, hangi satırın veya ağırlıkların içindeki hangi girdilere karşılık geldiği net değil . Ağırlıkları artık bir matris olarak temsil etmenin mantıklı olduğu bile açık değil (bu noktayı daha sonra açıklamak için bir örnek vereceğim)W(l)a(l)z(l+1)W(l)a(l)

Giriş ve çıkışların hepsinin 1D'de olduğu durumda, kişi evrişimi tanımına göre hesaplar ve sonra tekillikten geçirir mi?

Örneğin, girdi olarak şu vektöre sahip olsaydık:

x=[1,2,3,4]

ve aşağıdaki ağırlıklarımız vardı (belki backprop ile öğrendik):

W=[5,6,7]

o zaman evrişim:

xW=[5,16,34,52,45,28]

bununla doğrusal olmama ve sonucu gizli katman / gösterim olarak değerlendirmek doğru olur muydu (şu an için herhangi bir havuz oluşturmayı düşünmeyin )? yani aşağıdaki gibi:

f(xW)=f([5,16,34,52,45,28])=[f(5),f(16),f(34),f(52),f(45),f(28)])

( Bence stanford UDLF öğretici , kıvrımın herhangi bir nedenden dolayı 0'larla ikna ettiği kenarları keser, bunu düzeltmemiz gerekir mi?)

Bu nasıl olmalı? En azından 1D'de bir giriş vektörü için? Mı bir vektör artık değil?W

Hatta bence bunun nasıl göründüğüne dair sinirsel bir ağ çizdim:

resim açıklamasını buraya girin

Yanıtlar:


3

Bana doğru yolda olduğun gibi geliyor, ama belki de açıklığa kavuşturmaya yardımcı olabilirim.

Tek çıkış

giriş birimi ve 1 çıkışlı geleneksel bir sinir ağı katmanı düşünelim (ayrıca önyargı olmadığını varsayalım). Bu katmanın, çeşitli yöntemler (backprop, genetik algoritmalar, vb.) Kullanılarak öğrenilebilen ağırlık vektörü vardır , ancak öğrenmeyi görmezden geleceğiz ve sadece ileri yayılmaya odaklanacağız.nwRn

Tabaka, bir girdi alır ve bir aktivasyon için harita dot ürün hesaplayarak ile bir doğrusal olmayan uygulanması ve daha sonra :xRnaRxwσ

a=σ(xw)

Burada, elemanları çıkış biriminin genel aktivasyonunu hesaplamak için karşılık gelen öğelerinin ne kadar ağırlıklandırılacağını belirler . Bunu, giriş sinyalinin ( ) filtre ( ) ile aynı uzunlukta olduğu bir "evrişim" gibi düşünebilirsiniz .wxxw

Kıvrımlı bir ortamda, daha değerler vardır daha ; Şimdi için varsayalım . Biz nokta ürününü hesaplayarak bu ortamda çıkış birimi aktivasyonunu hesaplayabilir bitişik alt grupları ile :xwxRmm>nwx

a1=σ(x1:nw)a2=σ(x2:n+1w)a3=σ(x3:n+2w)amn+1=σ(xmn+1:mw)

(Burada, birçok nöral ağın yazarlarının yaptığı çapraz korelasyon ve evrişim arasındaki aynı can sıkıcı karışıklığı tekrarlıyorum; eğer bu uygun evrişimleri yapacak olsaydık, unsurlarını . Ayrıca "geçerli" yalnızca giriş sinyali ve filtrenin tamamen üst üste geldiği, yani herhangi bir dolgu olmadan hesaplanan elemanları tutan evrişim.)w

Bunu zaten sorunuza zaten söylüyorsunuz, ancak nokta yapmak için nokta ürününü kullanarak vanilya sinir ağı katmanlarıyla bağlantıyı dolaşmaya çalışıyorum. Vanilya ağ katmanları ile temel fark, eğer giriş vektörü ağırlık vektöründen daha uzunsa, bir evrişim ağ tabakasının çıktısını bir vektöre dönüştürür - evrişim ağlarında, tümüyle vektörlerdir! Bu çıktı vektörüne, bu katmandaki çıktı birimi için "özellik haritası" denir.

Çoklu çıkışlar

Tamam, bu yüzden ağ katmanımıza yeni bir çıkış eklediğimizi düşünelim, böylece girişi ve 2 çıkışı var. Bir vektör olacak birinci çıkış ve bir vektör için , ikinci çıkış için. (Katman çıktılarını belirtmek için üst simge kullanıyorum.)nw1Rnw2Rn

Bir vanilya tabakası için, bunlar normalde birlikte tek tek ağırlık vektörlerinin matrisin sütunları olduğu bir matrisine istiflenir . Sonra bu katmanın çıktısını hesaplarken, veya daha kısa matris gösteriminde, doğrusal olmayanlığın elemanlı olarak uygulandığı .W=[w1w2]

a1=σ(xw1)a2=σ(xw2)
a=[a1a2]=σ(xW)

Evrişimsel durumda, katmanımızın çıktıları hala aynı parametre vektörleri ve ile ilişkilidir . Tek çıkış durumunda olduğu gibi, evrişim katmanı her katman çıkışı için vektör değerli çıktılar üretir, bu nedenle ve (yine "geçerli" kıvrımlar olduğunu varsayarak). Her bir katman çıktısı için bir tane olan bu filtre haritaları, genellikle matrisinde araya getirilir .w1w2a1=[a11a21amn+11]a2=[a12a22amn+12]A=[a1a2]

Bunu düşünürseniz, evrişimsel durumdaki girdi, sadece bir sütun ("bir giriş kanalı") içeren bir matris olarak da düşünülebilir. Bu nedenle bu katmanın dönüşümünü , "evrişim" in aslında bir çapraz korelasyon olduğu ve sadece ve sütunları boyunca gerçekleştiği olarak yazabiliriz .

A=σ(XW)
XW

Bu gösterim kısayolları aslında oldukça yararlıdır, çünkü şimdi katmana başka bir çıktı eklemek için başka bir ağırlık sütunu eklediğimizi görmek kolaydır .W

Umarım bu yardımcı olur!


1

Bir kıvrımlı katman, tamamen bağlı bir ağın katı bir alt kümesidir, yani bir matris çarpımıdır. İleri geçişteki kıvrımlı bir katman aslında bir matris çarpımına eşdeğerdir:

  • bazı ağırlıklar bağlı / paylaşılıyor
  • bazı ağırlıklar sıfır

Geriye doğru geçişte, ağırlıklar hangi ağırlıkların ileri geçişte ne kadar katkıda bulunduğuna göre güncellenecektir. yani sıfır olan ağırlıklar hala sıfırdır. Birden çok çıktıya bağlanan ağırlıklar, tüm bu çıktılardan gradyan alacaktır (bu gramaj için nihai gradyan güncellemesini üretmek için gradyanlar birlikte toplanır).


0

Hayır, böyle olması gerekmiyor. Katlama işlemi, girişi daima örneğinizde olduğu gibi değil daha küçük (> 1 boyutlu filtreler için) yapar.

Bu basitçe öğeye dayalı bir çarpmadır. Girişin ilk 3 elemanı üzerinde evrişim yapılırken, çıkış . ( örnek için deeplearning.stanford.edu adresine bakın )15+26+37=38


matlab'da conv ([1, 2, 3, 4], [5,6,7]) denediniz mi? Terminale gidin ve kendiniz kontrol edin. Geleneksel evrişim tanımını kullanırsanız, vektörü [5,16,34,52,45,28] elle hesaplayabilirsiniz. Vektör her zaman küçülmez. Bu, evrişimi yapmaya başladığınız yere ve indeks aralığının dışındaki şeylere sıfır olarak davranıp davranmadığınıza bağlıdır. Bu yazıda önerdiğim gibi yaparsanız, boyutunda bir vektör alırsınız . Kenarları keserseniz (aralık dışına çıkan indeks cuz) boyutunda bir vektör alırsınız , burada N ve n söz konusu vektörlerin boyutudur. N - n + 1N+n1Nn+1
Charlie Parker

Bu web sayfasında kullanılan evrişim, matematiksel evrişimin tanımı değildir.
Charlie Parker

2
Evet, CNN için kullanılan evrişim olağan evrişim değildir. Bu herkes için kafa karıştırıcı, ama bu böyle :) CNN'nin doğası göz önüne alındığında, yani bir görüntüyü analiz etmek, her zaman ilk öğesiyle başlayacaktır , burada , filtre boyutudur ve daha sonra girişin üzerinden geçirilir. Bununla birlikte, sonun ötesine uzatılmayacak, bu nedenle çıktı tarafından küçülecektir . n n - 1nnn1
pir

1
Anlıyorum, sanırım şimdi baktığımda mantıklı. Ancak, küçük bir hata var. Giriş her zaman daha küçük yapmıyor, şimdi ve hatta CNN'de farklı kıvrım türlerinin farkındayım, Yoshua Bengio'nun kitabına göre 3 tür kıvrım (tam, geçerli, aynı) iro.umontreal.ca/ ~ bengioy / dlbook . Onları ayrıntılı olarak anlamıyorum ama en azından bunların farkındayım! Teşekkürler Felbo. Vizyon topluluğu kıvrımlar, kafa karıştırıcı ve rahatsız edici kelimelerini kullanmamalıdır. Her neyse, teşekkürler.
Charlie Parker

2
@CharlieParker Matlab'daki conv işlevi aynı 3 tür "şekle" (tam, geçerli, aynı) sahiptir, Matlab varsayılan olarak "tam" dır - mathworks.com/help/matlab/ref/conv.html adresindeki belgelere bakın . Çekirdeği çevirmeden yapılan bir evrişim çapraz korelasyon, yani xcorr(x, y) = conv(x, fliplr(y)). NN topluluğu, aslında çapraz bir korelasyon yaparken kıvrım söyleme eğilimindedir, ancak oldukça benzerdir.
lmjohns3
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.