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 bobot
Jadi jaringannya adalah dengan .
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.
sumber
kernel = filter
, apakah Anda setuju? >> "Jadi konvolusi 1x1 hanya tentang output, bukan tentang kernel? Tidak sama sekali.3x3
Konvolusi dapat memiliki bentuk output yang berubah-ubah." Memang, jika padding digunakan danstride=1
kemudianoutput 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 tentang3x3x512
konvolusi. Namun semua filter konvolusi yang saya lihat memiliki dimensi spasial ketiga sama dengan jumlah fitur-peta pada layer input.Convolution Demo
silakan 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]
.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 )n∗n i m n n m
Saat Anda bertanya, ia memiliki jumlah parameter yang sama dengan FCN, yaitu (plus bias):n∗n∗i∗m
FCN: (bobot per lapisan input = input saluran) (kali output / lebar lapisan tersembunyi)n∗n∗i ∗ ∗m
CNN: (setiap kernel) (kernel per saluran input) (jumlah filter)n∗n ∗i ∗m
( Sumber )
sumber
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 :
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:
sumber
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∑1j=0X[j]W0[j]+b[0] ∑1j=0X[j]W1[j]+b[1] ∑1j=0X[j]W2[j]+b[2]
1x1
konvolusi hanya penjumlahan tertimbang peta fitur input, dalam pertanyaan OP, 3. O [0] = . Demikian pula, O [1] = dan O [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 ukurannxn
yang membingungkan (walaupun, benar).sumber