Apa perbedaan antara Dilatasi Konvolusi dan Dekonvolusi?

11

Dua operasi konvolusi ini sangat umum dalam pembelajaran mendalam saat ini.

Saya membaca tentang pelebaran lapisan konvolusional dalam tulisan ini: WAVENET: A GENERATIVE MODEL FOR RAW AUDIO

dan De-convolution ada dalam makalah ini: Jaringan Sepenuhnya Konvolusional untuk Segmentasi Semantik

Keduanya tampaknya mengambil sampel gambar tetapi apa bedanya?

Shamane Siriwardhana
sumber

Jawaban:

9

Dalam semacam istilah berbasis mekanistik / gambar / gambar:

Dilatasi: ### LIHAT KOMENTAR, BEKERJA UNTUK MEMPERBAIKI BAGIAN INI

Pelebaran sebagian besar sama dengan run-of-the-mill convolution (terus terang demikian juga dekonvolusi), kecuali bahwa hal itu menimbulkan celah pada kernelnya, yaitu sedangkan kernel standar biasanya akan meluncur di atas bagian-bagian input yang berdekatan, dilebarkan oleh rekannya, misalnya, "melingkari" bagian gambar yang lebih besar - sementara masih hanya memiliki bobot / input sebanyak bentuk standar.

(Catat juga, sedangkan pelebaran menyuntikkan nol ke kernelnya untuk lebih cepat mengurangi dimensi wajah / resolusi outputnya, transpose konvolusi menyuntikkan nol ke inputnya untuk meningkatkan resolusi outputnya.)

Untuk membuat ini lebih konkret, mari kita ambil contoh yang sangat sederhana:
Katakanlah Anda memiliki gambar 9x9, x tanpa bantalan. Jika Anda menggunakan kernel standar 3x3, dengan langkah 2, subset pertama yang menjadi perhatian dari input adalah x [0: 2, 0: 2], dan semua sembilan poin dalam batas ini akan dipertimbangkan oleh kernel. Anda kemudian akan menyapu x [0: 2, 2: 4] dan seterusnya.

Jelas, output akan memiliki dimensi wajah yang lebih kecil, khususnya 4x4. Dengan demikian, neuron lapisan berikutnya memiliki bidang reseptif dalam ukuran yang tepat dari kernel ini. Tetapi jika Anda membutuhkan atau menginginkan neuron dengan pengetahuan spasial yang lebih global (mis. Jika fitur penting hanya dapat didefinisikan di daerah yang lebih besar dari ini) maka Anda perlu melilit lapisan ini untuk kedua kalinya untuk membuat lapisan ketiga di mana bidang reseptif efektif adalah beberapa penyatuan lapisan sebelumnya rf.

Tetapi jika Anda tidak ingin menambahkan lebih banyak lapisan dan / atau Anda merasa bahwa informasi yang diteruskan terlalu berlebihan (yaitu bidang 3x3 reseptif Anda di lapisan kedua hanya benar-benar membawa "2x2" jumlah informasi yang berbeda), Anda dapat menggunakan filter melebar. Mari kita menjadi ekstrim tentang hal ini untuk kejelasan dan katakan kita akan menggunakan filter 9-dialasi 3x9. Sekarang, filter kami akan "melingkari" seluruh input, jadi kami tidak perlu menggesernya sama sekali. Namun kami masih akan, hanya mengambil 3x3 = 9 poin data dari input, x , biasanya:

x [0,0] U x [0,4] U x [0,8] U x [4,0] U x [4,4] U x [4,8] U x [8,0] U x [8,4] U x [8,8]

Sekarang, neuron di lapisan berikutnya (kita hanya akan memiliki satu) akan memiliki data "mewakili" bagian yang jauh lebih besar dari gambar kita, dan sekali lagi, jika data gambar sangat redundan untuk data yang berdekatan, kita mungkin telah mempertahankan informasi yang sama dan mempelajari transformasi yang setara, tetapi dengan lebih sedikit lapisan dan lebih sedikit parameter. Saya pikir dalam batas-batas deskripsi ini jelas bahwa sementara dapat didefinisikan sebagai resampling, kami di sini downsampling untuk setiap kernel.


Dengan sedikit fraksional atau transpose atau "dekonvolusi":

Jenis ini masih sangat berbelit-belit. Perbedaannya adalah, sekali lagi, kita akan beralih dari volume input yang lebih kecil ke volume output yang lebih besar. OP tidak mengajukan pertanyaan tentang apa upampling itu, jadi saya akan menghemat sedikit, kali ini dan langsung ke contoh yang relevan.

Dalam kasus 9x9 kami dari sebelumnya, katakan kita ingin sekarang menjadi 11x11. Dalam hal ini, kami memiliki dua opsi umum: kami dapat mengambil kernel 3x3 dan dengan langkah 1 dan menyapu input 3x3 kami dengan 2-padding sehingga pass pertama kami akan berada di atas wilayah [left-pad-2: 1, di atas-pad-2: 1] lalu [kiri-pad-1: 2, di atas-pad-2: 1] dan seterusnya dan seterusnya.

Atau, kita juga bisa memasukkan padding di antara data input, dan menyapu kernel di atasnya tanpa banyak padding. Jelas kita kadang-kadang akan memperhatikan diri kita sendiri dengan titik input yang sama persis lebih dari sekali untuk satu kernel; disinilah istilah "fractionally-strided" tampaknya lebih beralasan. Saya pikir animasi berikut (dipinjam dari sini dan berdasarkan (saya percaya) dari pekerjaan ini akan membantu untuk membersihkan segala sesuatunya meskipun memiliki dimensi yang berbeda. Inputnya biru, nol yang diinjeksi dan di-padding putih, dan output berwarna hijau:

mengubah konv, input berwarna biru, output berwarna hijau

Tentu saja, kita mengkhawatirkan diri kita sendiri dengan semua data input sebagai lawan pelebaran yang mungkin atau mungkin tidak mengabaikan sebagian wilayah sama sekali. Dan karena kita jelas ditutup dengan lebih banyak data daripada yang kita mulai, "upsampling".

Saya mendorong Anda untuk membaca dokumen luar biasa yang saya tautkan untuk mendapatkan definisi dan penjelasan konvolusi transpose yang lebih baik, abstrak, dan juga untuk mempelajari mengapa contoh-contoh yang dibagikan bersifat ilustratif tetapi sebagian besar bentuk yang tidak tepat untuk benar-benar menghitung transformasi yang diwakili.

Doug Brummell
sumber
1
Harap diingat, saya bukan ahli, - hanya seseorang yang baru-baru ini harus membedakan konsep-konsep ini sendiri. Harap beri tahu saya jika ada kesalahan langsung atau penyederhanaan berlebihan yang dapat merusak jawaban secara keseluruhan. Terima kasih!
Doug Brummell
Doug Brummel Wow menjelaskan dengan baik. Saya memiliki Ide yang sama. Saya ingin mengetahui pendapat Anda tentang penerapan konvolusi dilatasi, Bagaimana kita mulai menerapkan ini di CNN. Haruskah kita pertama-tama ke beberapa konvolusi normal kemudian menerapkan conolution dilatasi? Hal lain yang melilit konvolusi dapat kehilangan informasi jika kita tidak nol pad. Jadi saya pikir kita harus menerapkan konvolusi melebar setelah beberapa lapisan konvensi normal?
Shamane Siriwardhana
Saya percaya ide standar adalah untuk meningkatkan jumlah pelebaran bergerak maju, dimulai dengan filter biasa, tanpa filter untuk l = 1, bergerak ke arah 2- dan kemudian filter 3-dilebar dan seterusnya saat Anda maju melalui kedalaman jaringan Anda. Hal ini memungkinkan Anda untuk memastikan semua data dalam satu lapisan dilewatkan ke lapisan berikutnya (termasuk, yang penting, ke dalam jaringan itu sendiri) sambil tetap memungkinkan downsampling yang lebih cepat secara eksponensial dengan setiap lapisan tetapi tanpa parameter peningkatan. Tujuannya adalah bidang reseptif yang luas tanpa mengorbankan penyertaan data. Dan ya, perhatian padding harus penting sejak awal.
Doug Brummell
Lihat [makalah ini] ( arxiv.org/pdf/1511.07122.pdf ), itu direferensikan di atas dan memberikan sedikit informasi tentang apa yang saya baca tentang topik ini.
Doug Brummell
Satu hal lagi, makalah itu menyatakan bahwa tidak ada kehilangan resolusi dalam skema pelebaran yang meningkat ... Saya rasa saya hanya waspada dengan kerugian lain yang mungkin saya selipkan di bawah "resolusi". Tentu saja, jika Anda dapat mengganti sekelompok lapisan konv dengan yang lebih sedikit dilatasi dan mempertahankan akurasi, bagus, Anda harus melakukannya. Tetapi bagi saya (dan saya harus kembali ke buku tentang ini), saya berpikir tentang potensi kerugian dalam kasus di mana Anda arsitek dari awal dengan pelebaran ...
Doug Brummell
5

Meskipun keduanya tampaknya melakukan hal yang sama, yaitu mengambil sampel lapisan, ada margin yang jelas di antara mereka.

Pertama-tama kita berbicara tentang Konvolusi Dilatasi

Saya menemukan blog yang bagus tentang topik di atas. Jadi seperti yang saya pahami, ini lebih seperti mengeksplorasi titik input data secara luas . Atau menambah bidang penerimaan operasi konvolusi.

Berikut adalah diagram konvolusi melebar dari kertas .

Gambar 3

Ini lebih berbelit-belit normal, tetapi membantu menangkap konteks global yang semakin banyak dari piksel input tanpa meningkatkan ukuran parameter. Ini juga dapat membantu meningkatkan ukuran spasial dari output. Tetapi hal utama di sini adalah ini meningkatkan ukuran bidang reseptif secara eksponensial dengan jumlah lapisan. Ini sangat umum di bidang pemrosesan sinyal.

Blog ini benar-benar menjelaskan apa yang baru dalam konvolusi melebar dan bagaimana ini dibandingkan dengan konvolusi normal.

Blog: Konvolusi Dilatasi dan Konvolusi dengan Faktor Kronecker

Sekarang saya akan menjelaskan apa itu Dekonvolusi

Ini disebut konvolusi yang dialihkan. Ini sama dengan fungsi yang kami gunakan untuk konvolusi dalam propagasi balik.

Cukup di backprop kami mendistribusikan gradien dari satu neuron di peta fitur output ke semua elemen di bidang reseptif, maka kami juga merangkum gradien di mana mereka bertepatan dengan elemen reseptif yang sama

Ini sumber yang bagus dengan gambar .

Jadi ide dasarnya adalah dekonvolusi bekerja di ruang keluaran. Bukan input piksel. Ini akan mencoba untuk membuat dimensi ruang yang lebih luas di peta output. Ini digunakan dalam Jaring Neural Konvolusional Sepenuhnya untuk Segmentasi Semantik .

Jadi lebih banyak Dekonvolusi adalah lapisan pengambilan sampel yang dapat dipelajari.

Ini mencoba untuk mempelajari cara mengambil sampel sambil menggabungkan dengan kerugian akhir

Ini adalah penjelasan terbaik yang saya temukan untuk dekonvolusi. Ceramah 13 dalam cs231, mulai 21,21 dan seterusnya .

Shamane Siriwardhana
sumber
maukah Anda menguraikan bagaimana konvolusi melebar membantu meningkatkan ukuran spasial dari output? Tampaknya membutuhkan lebih banyak padding daripada konvolusi tradisional, sehingga lebih buruk mengenai ukuran output.
wlnirvana