Bagaimana konvolusi 1x1 sama dengan lapisan yang terhubung penuh?

55

Saya baru-baru ini membaca komentar Yan LeCuns pada konvolusi 1x1 :

Dalam Jaring Konvolusional, tidak ada yang namanya "lapisan yang sepenuhnya terhubung". Hanya ada lapisan konvolusi dengan kernel konvolusi 1x1 dan tabel koneksi penuh.

Ini fakta yang terlalu jarang dipahami sehingga ConvNets tidak perlu memiliki input ukuran tetap. Anda dapat melatih mereka pada input yang kebetulan menghasilkan vektor output tunggal (tanpa batas spasial), dan kemudian menerapkannya pada gambar yang lebih besar. Alih-alih vektor output tunggal, Anda kemudian mendapatkan peta spasial vektor output. Setiap vektor melihat jendela input di lokasi berbeda pada input. Dalam skenario itu, "lapisan sepenuhnya terhubung" benar-benar bertindak sebagai konvolusi 1x1.

Saya ingin melihat contoh sederhana untuk ini.

Contoh

Anggap Anda memiliki jaringan yang sepenuhnya terhubung. Ini hanya memiliki layer input dan layer output. Lapisan input memiliki 3 node, layer output memiliki 2 node. Jaringan ini memiliki parameter. Untuk membuatnya lebih konkret, katakanlah Anda memiliki fungsi aktivasi ReLU di lapisan output dan matriks bobot32=6

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

Jadi jaringannya adalah dengan .f(x)=ReLU(Wx+b)xR3

Bagaimana lapisan konvolusional harus terlihat sama? Apa yang dimaksud dengan LeCun dengan "tabel koneksi penuh"?

Saya kira untuk mendapatkan CNN yang setara harus memiliki jumlah parameter yang persis sama. MLP dari atas memiliki parameter.23+2=8

Martin Thoma
sumber

Jawaban:

29

Contoh Anda

Dalam contoh Anda, kami memiliki 3 unit input dan 2 output. Untuk menerapkan konvolusi, pikirkan unit-unit yang memiliki bentuk: [1,1,3]dan [1,1,2], masing-masing. Dalam istilah CNN, kami memiliki 3input dan 2output peta fitur, masing-masing memiliki dimensi spasial 1 x 1.

Menerapkan n x nkonvolusi ke lapisan dengan kpeta fitur, mengharuskan Anda memiliki kernel bentuk [n,n,k]. Oleh karena itu kernel 1x1konvolusi Anda memiliki bentuk [1, 1, 3]. Anda membutuhkan 2kernel tersebut (atau filter) untuk menghasilkan 2peta fitur keluaran. Harap Dicatat: konvolusi benar-benar konvolusi. Yang terakhir jarang disebutkan.1×11×1×number of channels of the input

Memang jika Anda memilih sebagai kernel dan bias:

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

Lapisan konv kemudian akan menghitung dengan .f(x)=ReLU((w1xw2x)+(b1b2))xR3

Transformasi dalam Kode nyata

Sebagai contoh kehidupan nyata, lihat juga implementasi vgg-fcn saya . Kode yang disediakan dalam file ini mengambil bobot VGG, tetapi mengubah setiap lapisan yang terhubung sepenuhnya menjadi lapisan convolutional. Jaringan yang dihasilkan menghasilkan output yang sama seperti vggketika diterapkan pada input gambar bentuk [244,244,3]. (Saat menerapkan kedua jaringan tanpa bantalan).

Lapisan konvolusional yang ditransformasikan diperkenalkan dalam fungsi _fc_layer(garis 145). Mereka memiliki ukuran kernel 7x7untuk FC6 (yang maksimal, pool5pada VGG mengeluarkan fitur peta bentuk [7,7, 512]. Lapisan FC7dan FC8diimplementasikan sebagai 1x1konvolusi.

"Tabel Koneksi Lengkap"

Saya tidak 100% yakin, tapi dia mungkin merujuk ke filter / kernel yang memiliki dimensi yang sama dengan peta fitur input. Dalam kedua kasus (Kode dan Contoh Anda) dimensi spasial dalam arti maksimal, bahwa dimensi spasial filter sama dengan dimensi spasial sebagai input.

MarvMind
sumber
"Karenanya kernel konvolusi 1x1 Anda memiliki bentuk [1, 1, 3]." Apa? Tampaknya ada kesalahpahaman yang lebih besar tentang konvolusi. Saya pikir jika konvolusi kernel berbentuk [1, 1, 3], maka orang akan mengatakan itu adalah konvolusi 1x1x3? Jadi konvolusi 1x1 hanya tentang output, bukan tentang kernel?
Martin Thoma
2
Bagi saya kernel = filter, apakah Anda setuju? >> "Jadi konvolusi 1x1 hanya tentang output, bukan tentang kernel? Tidak sama sekali. 3x3Konvolusi dapat memiliki bentuk output yang berubah-ubah." Memang, jika padding digunakan dan stride=1kemudian output shape = input shape. >> "Saya pikir jika kernel konvolusi memiliki bentuk [1, 1, 3], maka orang akan mengatakan itu adalah konvolusi 1x1x3?" Tidak, saya belum pernah mendengar seseorang berbicara tentang 3x3x512konvolusi. Namun semua filter konvolusi yang saya lihat memiliki dimensi spasial ketiga sama dengan jumlah fitur-peta pada layer input.
MarvMind
Untuk referensi, Convolution Demosilakan melihat kursus Karpathies CS321n: cs231n.github.io/convolutional-networks/#conv . Atau di tensorflow API: tensorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d Filter seharusnya memiliki bentuk [filter_height, filter_width, in_channels, out_channels].
MarvMind
Bolehkah saya menambahkan hal dengan "Konvolusi 1x1 adalah 1 x 1 x jumlah saluran input" ke jawaban Anda? Ini adalah sumber kebingungan saya dan saya terus melupakan ini.
Martin Thoma
Tentu, silakan!
MarvMind
4

Lapisan sepenuhnya terhubung (untuk ukuran masukan atas dengan saluran, dan neuron output) TIDAK setara dengan lapisan 1x1 konvolusi melainkan ke x konvolusi lapisan (yaitu kernel besar, ukuran yang sama karena tidak ada input- pad) dengan jumlah filter yang sama dengan output FC / lapisan tersembunyi (yaitu filter )nnimnnm

Saat Anda bertanya, ia memiliki jumlah parameter yang sama dengan FCN, yaitu (plus bias):nnim

FCN: (bobot per lapisan input = input saluran) (kali output / lebar lapisan tersembunyi)nnim

CNN: (setiap kernel) (kernel per saluran input) (jumlah filter)nnim

( Sumber )

Michael Yahalom
sumber
1
Tentu saja kedua hal ini setara dalam kasus khusus ; Saya pikir di situlah kebingungan masuk.n=1
Yibo Yang
2

Kernel yang setara hanya memiliki bentuk apa pun yang dimiliki input, dan menghitung produk tensor dot. (Saya menggunakan kata "bentuk" karena tampaknya ada beberapa kebingungan tentang "ukuran", yang sering mengabaikan dimensi saluran / kedalaman). Tidak ada "menggeser input kernel" yang terlibat, karena kernelnya sebesar mungkin. Mengutip catatan kursus Stanford CS 231n :

setiap lapisan FC dapat dikonversi ke lapisan CONV. Sebagai contoh, lapisan FC dengan K = 4096 yang melihat beberapa volume input ukuran 7 × 7 × 512 dapat secara ekuivalen dinyatakan sebagai lapisan CONV dengan F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096. Dengan kata lain, kami menetapkan ukuran filter persis dengan ukuran volume input, dan karenanya output akan hanya 1 × 1 × 4096 karena hanya satu kolom kedalaman "cocok" di seluruh volume input, memberikan hasil yang sama seperti lapisan FC awal.

Saya percaya "F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096" di sini berarti setiap conv kernel memiliki bentuk 7x7x512, dan ada 4.096 filter seperti itu.

Jawaban sebelumnya menyebutkan bahwa fc terakhir dari AlexNet (yang menerima input dengan bentuk 1x1x4096 dan menghitung skor kelas 1000) diimplementasikan sebagai "konvolusi 1x1". Agar lengkap, masing-masing kernel konv tersebut memiliki bentuk 1x1x4096, dan ada 1000 di antaranya.

Le Cunn juga menjelaskan hal ini di makalah CNN , halaman 8, deskripsi LeNet5:

Lapisan C5 adalah lapisan konvolusional dengan 120 peta fitur. Setiap unit terhubung ke lingkungan 5x5 di semua 16 peta fitur S4. Di sini karena ukuran S4 juga 5x5, ukuran peta fitur C5 adalah 1x1; ini berarti koneksi penuh antara S4 dan C5.

Yibo Yang
sumber
1

Untuk pengguna PyTorch pemula seperti saya - jangan bingung "lapisan sepenuhnya terhubung" dengan "lapisan linier".

Lapisan Linear dan konvolusi 1x1 adalah hal yang sama. Butuh beberapa saat untuk memahami bahwa tidak ada yang namanya "lapisan yang terhubung penuh" - itu hanyalah perataan dimensi spasial menjadi tensor raksasa 1D. Perataan menyebabkan setiap elemen pada semua lokasi spasial disajikan sebagai fitur peta / saluran / dimensi yang terpisah (apa pun yang Anda ingin menyebutnya). Oleh karena itu, ketika kita menerapkan lapisan linier pada tensor yang diratakan , kita mendapatkan operasi yang sepenuhnya terhubung , yang jelas, tidak sama dengan konvolusi 1x1.

Sebuah 1x1konvolusi hanya penjumlahan tertimbang peta fitur input, dalam pertanyaan OP, 3. O [0] = . Demikian pula, O [1] = dan O [2] = .j=01X[j]W0[j]+b[0]j=01X[j]W1[j]+b[1]j=01X[j]W2[j]+b[2]

3 persamaan di atas terbuka menjadi .O=W2×3X3×1+b2×1

Jawaban lain yang mengklaim bahwa lapisan yang terhubung sepenuhnya hanyalah lapisan konvolusi yang valid nxn untuk input ukuran nxnyang membingungkan (walaupun, benar).

Rakshit Kothari
sumber