1x1 konvolüsyonlar tamamen bağlı bir katmanla aynıdır?


55

Geçenlerde Yan LeCuns'in 1x1 konvolüsyonları hakkındaki yorumunu okudum :

Konvolüsyonlu Ağlarda, "tamamen bağlantılı katmanlar" diye bir şey yoktur. Yalnızca 1x1 evrişim çekirdekleri ve tam bir bağlantı tablosu olan evrişim katmanları vardır.

Çok nadiren anlaşılan bir gerçek, ConvNets'in sabit boyutlu bir girişe sahip olması gerekmiyor. Bunları, tek bir çıkış vektörü üreten (uzamsal boyutta olmayan) girişler üzerinde eğitebilir ve daha sonra daha büyük görüntülere uygulayabilirsiniz. Tek bir çıktı vektörünün yerine, çıktı vektörlerinin uzamsal haritasını elde edersiniz. Her vektör, giriş pencerelerini giriş üzerinde farklı konumlarda görür. Bu senaryoda, "tamamen birbirine bağlı katmanlar" gerçekten 1x1 evrişler gibi davranıyor.

Bunun için basit bir örnek görmek istiyorum.

Örnek

Tamamen bağlı bir ağınız olduğunu varsayalım. Sadece bir giriş katmanına ve bir çıkış katmanına sahiptir. Giriş katmanı 3 düğüme, çıkış katmanı 2 düğüme sahiptir. Bu ağ 32=6 parametreye sahiptir. Daha da somut hale getirmek için, çıktı katmanında ve ağırlık matrisinde bir ReLU aktivasyon işleviniz olduğunu varsayalım.

W=(011235)R2×3b=(813)R2

Yani ağ f(x)=ReLU(Wx+b) ile xR3 .

Konvolüsyon tabakası aynı olmak için nasıl görünür? LeCun'un "tam bağlantı tablosu" ile anlamı nedir?

Eşdeğer bir CNN elde etmek için sanırım aynı sayıda parametreye sahip olmak zorunda kalacak. Yukarıdan MLP sahip 23+2=8 parametreleri.

Yanıtlar:


29

Senin örnek

Örnekte 3 giriş ve 2 çıkış ünitemiz var. : Helezonlar uygulamak için şekle sahip bu birimlerin düşünmek [1,1,3]ve [1,1,2]sırasıyla. CNN terimlerinde, her biri uzaysal boyutlara sahip olan 3giriş ve 2çıkış özellik haritalarına sahibiz 1 x 1.

n x nk[n,n,k]1x1[1, 1, 3]221×11×1×number of channels of the input


w1=(011)R3w2=(235)R3b=(813)R2

f(x)=ReLU((w1xw2x)+(b1b2))xR3

Gerçek Kodda Dönüşüm

Gerçek hayattan bir örnek için, vgg-fcn uygulamama da bir göz atın . Bu dosyada verilen Kod VGG ağırlıklarını alır, ancak tam bağlı her katmanı evrişimli bir katmana dönüştürür. Sonuçta ortaya çıkan ağ vgg, şeklin girdi görüntüsüne uygulandığında aynı çıktıyı verir [244,244,3]. (Her iki ağı da dolgu olmadan uygularken).

Dönüştürülen evrişimli tabakalar fonksiyona dahil edilir _fc_layer(satır 145). 7x7FC6 için çekirdek boyutuna sahiptirler (VGG'den itibaren maksimal olan, pool5şeklin bir özellik haritasını çıkarır [7,7, 512]. Katman FC7ve evrişim FC8olarak uygulanır 1x1.

"Tam Bağlantı Tablosu"

% 100 emin değilim, ancak giriş özelliği haritasıyla aynı boyuta sahip bir filtre / çekirdeğe başvurabilir. Her iki durumda da (Kod ve Örneğiniz) uzaysal boyutlar, filtrenin uzaysal boyutunun girdiyle aynı uzaysal boyutla aynı olması bakımından maksimum düzeydedir.


"Dolayısıyla, sizin 1x1 evrimlerinizin çekirdeği [1, 1, 3] şeklindedir." Ne? Daha büyük bir yanlış anlaşılma var gibi görünüyor. Bir evrişim çekirdeğinin şekli [1, 1, 3] ise, o zaman birinin 1x1x3 evrişim olduğunu söyleyeceğini düşündüm? Öyleyse 1x1 evrişimi yalnızca çıktıyla ilgilidir, çekirdekle değil?
Martin Thoma

2
Benim için kernel = filterkatılıyor musun? >> "Yani 1x1 evrişimi yalnızca çıktıyla ilgilidir, çekirdeği değil mi? Hiç de değil. Bir 3x3evrişim keyfi bir çıktı şekline sahip olabilir." Gerçekten de, eğer dolgu malzemesi kullanılıyorsa ve stride=1sonra output shape = input shape. >> "Bir evrişim çekirdeğinin [1, 1, 3] şekli varsa, o zaman birinin 1x1x3 evrişim olduğunu söyleyeceğini düşündüm?" Hayır, hiç kimseyi 3x3x512konvolüsyonlardan bahseden duymadım . Bununla birlikte, gördüğüm tüm evrişim filtrelerinin girdi katmanının özellik haritalarının sayısına eşit üçüncü bir boyut boyutu var.
MarvMind

Başvuru için, Convolution DemoKarpathies CS321n kursuna bakınız: cs231n.github.io/convolutional-networks/#conv . Veya tensorflow API'sinde: tensorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d Filtrelerin şekle sahip olması gerekir [filter_height, filter_width, in_channels, out_channels].
MarvMind

Cevabınıza "1x1 konvolüsyon girişin 1 x 1 x kanal sayısıdır" ile ekleyebilir miyim? Kafamın kaynağı buydu ve bunu unutmaya devam ediyorum.
Martin Thoma

Tabi devam et!
MarvMind

4

nnimnnm

nnim

nnim

nnim

( Kaynak )


1
n=1

2

Eşdeğer çekirdek basitçe girdinin sahip olduğu şekle sahiptir ve bir tensör nokta ürünü hesaplar. (Kanal / derinlik boyutunu genellikle görmezden gelen “boyut” ile ilgili bir karışıklık olduğu anlaşılıyor çünkü “şekil” kelimesini kullanıyorum). Çekirdek olabileceği kadar büyük olduğundan, “çekirdeği giriş boyunca kaydırmak” yoktur. Alıntı Stanford CS 231n ders notları :

Herhangi bir FC katmanı bir CONV katmanına dönüştürülebilir. Örneğin, 7 × 7 × 512 boyutunda bir girdi hacmine bakan K = 4096 değerine sahip bir FC katmanı, F = 7, P = 0, S = 1, K = 4096, F değerlerine sahip bir CONV katmanı olarak eşit şekilde ifade edilebilir. = 7, p = 0, S = 1, = 4096 K. Başka bir deyişle, filtre boyutunu tam olarak giriş hacminin büyüklüğü olacak şekilde ayarlıyoruz ve bu nedenle çıktı, giriş hacmi boyunca yalnızca bir derinlik sütunu “uyduğundan” yalnızca 1 × 1 × 4096 olacaktır; ilk FC katmanı.

"F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096" burada her konv çekirdeğin 7x7x512 şeklinde ve 4096 tane filtre olduğuna inanıyorum.

Daha önceki cevabı, AlexNet'in son şekli olan (1x1x4096 şeklindeki girdiyi alan ve 1000 sınıf puanını hesaplayan) "1x1 evrişim" olarak uygulandığından bahsetti. Tamamlanmak üzere, her bir conv çekirdeği 1x1x4096 şeklindedir ve bunlardan 1000 tane vardır.

Le Cunn ayrıca bunu CNN makalesinde , sayfa 8'de, LeNet5'in açıklaması bölümünde açıklar:

Katman C5, 120 özellik haritasına sahip evrişimli bir katmandır. Her birim, S4'ün 16 özellik haritasının tamamında 5x5'lik bir mahalleye bağlanır. Burada S4'ün boyutu 5x5 olduğundan, C5'in özellik haritalarının boyutu 1x1'dir; bu, S4 ve C5 arasında tam bir bağlantı anlamına gelir.


1

Benim gibi herhangi acemi PyTorch kullanıcıya - yok bir "doğrusal katmana" ile "tam bağlantılı bir tabaka" karıştırırlar.

Doğrusal bir katman ve 1x1 evrişim aynı şeydir. “Tamamen birbirine bağlı bir katman” diye bir şeyin olmadığını anlamam biraz zaman aldı - bu, uzaysal boyutların bir 1D dev tensöre düzleştirilmesiydi. Düzleştirme, tüm mekansal konumlardaki her bir öğenin ayrı bir özellik haritası / kanal / boyut olarak sunulmasına neden olur (ne demek istersen). Bu nedenle, düzleştirilmiş bir tensöre doğrusal bir katman uyguladığımızda , açıkça bir 1x1 evrişim ile aynı olmayan tamamen bağlı bir işlem elde ediyoruz .

1x1j=01X[j]W0[j]+b[0]j=01X[j]W1[j]+b[1]j=01X[j]W2[j]+b[2]

O=W2×3X3×1+b2×1

Tamamen bağlı bir katmanın sadece bir boyut girişi için geçerli bir nxn evri katmanı olduğunu iddia eden diğer cevaplar nxnkafa karıştırıcıdır (doğru olsa da).

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.