Apa arti konvolusi 1x1 dalam jaringan saraf?


106

Saat ini saya sedang melakukan Tutorial Belajar Udacity Deep. Dalam Pelajaran 3, mereka berbicara tentang lilitan 1x1. Konvolusi 1x1 ini digunakan dalam Modul Google Inception. Saya mengalami kesulitan memahami apa yang dimaksud dengan konvolusi 1x1.

Saya juga melihat posting ini oleh Yann Lecun.

Bisakah seseorang dengan ramah menjelaskan ini kepada saya?


Lihat juga pertanyaan
gkcn

1
Berikut adalah posting blog pada modul-modul ini yang merinci konvolusi 1x1: hackathonprojects.wordpress.com/2016/09/25/…
Tommy

1
Sederhananya, idenya adalah untuk mengurangi jumlah saluran dalam volume 3D, sehingga mempercepat perhitungan.
onerhao

Jawaban:


113

(N,F,H,W)

  • N
  • F
  • H,W

F1(N,F1,H,W)

F1>FF1<F

Memang, dalam artikel Google Inception Going Deeper with Convolutions , mereka menyatakan (berani adalah milik saya, bukan oleh penulis asli):

Satu masalah besar dengan modul-modul di atas, setidaknya dalam bentuk naif ini, adalah bahwa bahkan jumlah 5x5 konvolusi yang sederhana dapat menjadi sangat mahal di atas lapisan konvolusional dengan sejumlah besar filter.

Ini mengarah pada gagasan kedua dari arsitektur yang diusulkan: menerapkan pengurangan dimensi dan proyeksi secara bijaksana di mana pun persyaratan komputasi akan meningkat terlalu banyak. Ini didasarkan pada keberhasilan embeddings: embeddings berdimensi rendah sekalipun mungkin mengandung banyak informasi tentang patch gambar yang relatif besar ... Konvolusi 1x1 digunakan untuk menghitung pengurangan sebelum konvolusi 3x3 dan 5x5 yang mahal. Selain digunakan sebagai reduksi, mereka juga termasuk penggunaan aktivasi linier terkoreksi yang membuatnya berfungsi ganda.

Jadi dalam arsitektur Inception, kami menggunakan filter konvolusional 1x1 untuk mengurangi dimensi dalam dimensi filter. Seperti yang saya jelaskan di atas, layer konv 1x1 ini dapat digunakan secara umum untuk mengubah dimensi ruang filter (baik menambah atau mengurangi) dan dalam arsitektur Inception kita melihat seberapa efektif filter 1x1 ini untuk pengurangan dimensi, secara eksplisit dalam ruang dimensi filter , bukan ruang dimensi spasial.

Mungkin ada interpretasi lain dari filter konv 1x1, tapi saya lebih suka penjelasan ini, terutama dalam konteks arsitektur Google Inception.


3
Apakah konvoi 1x1 mengkompres dimensi filter sebelumnya menjadi 1, sebelum menerapkan konvoi 5x5?
Leonard Loo

1
@LeonardLoo setiap kernel 1x1 mengurangi dimensi filter menjadi 1, tetapi Anda dapat memiliki banyak kernel dalam satu lilitan 1x1, sehingga jumlah "filter" bisa berubah-ubah sesuai pilihan Anda.
Fazzolini

43

Konvolusi 1x1 hanya memetakan piksel input dengan semua salurannya ke piksel output, tidak melihat apa pun di sekitarnya. Ini sering digunakan untuk mengurangi jumlah saluran kedalaman, karena seringkali sangat lambat untuk memperbanyak volume dengan kedalaman yang sangat besar.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

Yang bawah sekitar ~ 3,7x lebih lambat.

Secara teoritis jaringan saraf dapat 'memilih' yang memasukkan 'warna' untuk dilihat menggunakan ini, bukan kekuatan kasar mengalikan semuanya.


19
Saya akan mengatakan bahwa peta 1x1 tidak hanya satu piksel ke piksel keluaran, tetapi memecah semua saluran piksel masukan menjadi satu piksel. Dalam contoh Anda di baris pertama, ada 256 saluran untuk input, dan masing-masing 64 1x1 kernel meruntuhkan semua 256 saluran input menjadi hanya satu "pixel" (bilangan real). Hasilnya adalah Anda memiliki 64 saluran sekarang, bukan 256 dengan dimensi spasial yang sama, yang membuat konvolusi 4x4 secara komputasi lebih murah daripada di contoh baris kedua Anda.
Fazzolini

Poin bagus, akan memperbarui posting :)
Free Debreuil

3
Dari mana Anda mendapatkan 3,7x lebih lambat dari?
CMCDragonkai

@ CMCDragonkai Asumsikan bahwa biaya perhitungan sebanding dengan jumlah bobot. Dalam kasus selanjutnya num_weights = in_depth x out_depth x kernel_size = 256x256x4x4,. Dalam kasus pertama num_weights = 256x64x1x1+64x265x4x4=256x64x17,. Ambil rasio dan itu memberi 256/17 ~ 3.7. Periksa makalah ini halaman 9 untuk visualisasi tentang bagaimana num bobot terkait dengan kedalaman input dan kedalaman output. arxiv.org/pdf/1603.07285.pdf
Nelson Dinh

11

any

https://datascience.stackexchange.com/questions/9175/how-do-s berikutnya-convolution-layers-work

Secara khusus, Tipe 2.2 adalah deskripsi yang benar dari konvolusi di sana.

Jawaban bermanfaat lainnya:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Jawaban ini menjelaskan bagaimana Anda memiliki filter terpisah untuk setiap kombinasi saluran masuk / keluar . Setelah menghitung masing-masing, hasilnya dijumlahkan di atas sumbu saluran input yang menyisakan jumlah nilai saluran keluaran .

Ini adalah video yang saya temukan yang membantu saya memahami cara kerja konvolusi 1x1.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Berikut adalah hal-hal utama yang saya dapatkan dari itu:

  • mnf1(m,n,f1)f1mnf2(m,n,f2)
  • f2<f1f1f2

(m,n,f1)

3

Saya akan mencoba menjelaskan dengan lebih intuitif dan singkat dengan ilustrasi!

Konv 1 * 1 (alias jaringan dalam jaringan )?

katakanlah input Anda adalah (n_H, n_W, n_c_prev). Anda dapat menganggap (1 * 1 * n_c_prev) sebagai neuron tunggal (jaringan yang sepenuhnya terhubung -yaitu mengapa N / w dalam N / w ) yang menerima (n_c_prev) angka dalam input yang mengalikannya dengan (1 * 1 * n_c_prev ) dan kemudian menambahkan dan kemudian mengambil ReLu & output (n_H, n_W) dan jika Anda memiliki beberapa filter (n_c) maka outputnya adalah (n_H, n_W, n_C).

Jadi, Anda dapat menggunakan lapisan penyatuan untuk mengurangi dimensi spasial (n_H, n_W) dan dapat menggunakan 1 * 1 conv untuk mengurangi n_c_prev (yaitu jumlah saluran) yang menyimpan banyak perhitungan. Sebagai contoh

masukkan deskripsi gambar di sini

Karena itu, bawa pulang

  • Anda dapat menggunakan layer konvolusional 1x1 untuk mengurangi n_C tetapi tidak n_H, n_W.

  • Anda bisa menggunakan lapisan penyatuan untuk mengurangi n_H, n_W, dan n_C.

Dengan kata lain, masukkan deskripsi gambar di sini

  • apa yang Anda lakukan dengan menggunakan filter CONV 1 * 1? Anda pada dasarnya mengambil "1 * 1 * num_input_channel_of_featureMap" ukuran bobot & berbelit-belit (elemen * diikuti oleh +) volume ini di atas gambar / featureMap ukuran "W H num_input_channel_of_featureMap" dan apa yang Anda dapatkan adalah output dari ukuran "W * H".

  • Sekarang, Anda dapat menggunakan nomor "#filters" dari jenis "1 * 1 * num_input_channel_of_featureMap" dan dapatkan volume "W H #filter" sebagai hasil akhir!

  • Lebih tepatnya, Anda mengalikan "1 * 1" dengan 32 bobot berbeda (Volume 1 * 1) dengan satu irisan pada posisi yang sama di peta fitur input diikuti oleh ReLu & dapatkan satu angka yang sesuai yang dihasilkan, dilihat sebagai piksel warna hijau !

  • 1 * 1 CONV membantu mengecilkan jumlah saluran & menghemat perhitungan di beberapa jaringan (INCEPTIONS).!

  • Tetapi, tentu saja, jika Anda ingin menjaga jumlah saluran tetap sama dengan peta fitur input, itu juga baik-baik saja, satu hal yang dilakukan oleh CONV 1 * 1 adalah menerapkan ReLU Non-linearitas secara sederhana yang memungkinkannya mempelajari fungsi-fungsi kompleks di NN .


1

Satu lagi gagasan tentang pengurangan dimensi dalam konteks filter 1x1:

Ambil contoh, fc7 4096x8x8 layer dari FCN. Apa yang terjadi jika lapisan berikutnya (sebut saja fc8) adalah 2048x8x8 dengan ukuran filter 1? fc7 sangat jauh di dalam jaringan, masing-masing fitur 4096 kaya secara semantik, tetapi masing-masing neuron (misalnya gambar input 250x250x3) memiliki bidang reseptif yang besar. Dengan kata lain, jika neuron sangat aktif, kita tahu bahwa di suatu tempat di bidang semantiknya ada fitur yang sesuai.

Ambil contoh neuron paling kiri di fc8 dengan filter 1x1. Ini terhubung ke semua 4.096 neuron / fitur hanya di bidang reseptif yang sama (sudut kiri atas gambar), yang masing-masing diaktifkan oleh fitur tunggal. Beberapa (mari kita sama 500) dari mereka sangat aktif. Jika neuron yang dihasilkan juga sangat aktif, itu berarti ia mungkin belajar mengidentifikasi 1 atau lebih fitur dalam bidang reseptif ini. Setelah Anda melakukan ini 2048 kali untuk neuron paling kiri di fc8, beberapa dari mereka (misalnya 250) akan sangat aktif, yang berarti mereka 'mengumpulkan' fitur dari bidang reseptif yang sama melalui fc7, dan banyak kemungkinan besar lebih dari satu.

Jika Anda terus mengurangi dimensionalitas, jumlah neuron yang berkurang akan mempelajari fitur yang semakin meningkat dari bidang reseptif yang sama. Dan karena parameter spasial 8x8 tetap sama, kami tidak mengubah 'pandangan' masing-masing neuron, sehingga tidak mengurangi kekasaran spasial.

Anda mungkin ingin melihat 'Jaringan Sepenuhnya Konvolusional' oleh Long, Shelhamer dan Darrel.


1
Saya pikir ini adalah intuisi yang baik dari mekanisme ini, tetapi saya harus kembali ke sana, karena saya menemukan notasi untuk dimensi membingungkan, dan terutama "Setelah Anda melakukan ini 2.048 kali untuk kiri paling atas neuron dalam fc8 ".
WillC

Saya tidak mengerti dengan baik apa yang ingin Anda katakan, bisakah Anda membuatnya lebih jelas?
Michael Heidelberg

0

Operasi matematika konvolusi berarti menghitung produk dari dua fungsi (kontinu atau diskrit) atas semua posisi shift yang mungkin.

v×v

Aplikasi pemrosesan gambar dari jaringan saraf - termasuk jaringan saraf konvolusional - telah ditinjau dalam: [M. Egmont-Petersen, D. de Ridder, H. Handels. Pemrosesan gambar dengan jaringan saraf - review , Pattern Recognition , Vol. 35, No. 10, hlm. 2279-2301, 2002].

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.