Saya baru-baru ini membaca Jaringan Konvolusional Sepenuhnya untuk Segmentasi Semantik oleh Jonathan Long, Evan Shelhamer, Trevor Darrell. Saya tidak mengerti apa yang dilakukan "lapisan dekonvolusional" / cara kerjanya.
Bagian yang relevan adalah
3.3. Upsampling adalah belokan terbalik ke belakang
Cara lain untuk menghubungkan output kasar ke piksel padat adalah interpolasi. Misalnya, sederhana interpolasi bilinear menghitung setiap output dari empat input terdekat dengan peta linear yang hanya bergantung pada posisi relatif dari sel input dan output. Dalam arti tertentu, upampling dengan faktor f berbelit-belit dengan langkah input fraksional 1 / f. Selama f merupakan bagian integral, maka cara alami untuk melakukan upample adalah konvolusi mundur (kadang-kadang disebut dekonvolusi) dengan langkah keluaran f . Operasi semacam itu sepele untuk dilaksanakan, karena hanya membalikkan lintasan ke depan dan ke belakang dari belokan.
Dengan demikian upampling dilakukan dalam jaringan untuk pembelajaran ujung ke ujung dengan backpropagation dari hilangnya pixelwise.
Perhatikan bahwa filter dekonvolusi pada lapisan seperti itu tidak perlu diperbaiki (misalnya, untuk bilinear upampling), tetapi dapat dipelajari. Tumpukan lapisan dekonvolusi dan fungsi aktivasi bahkan dapat mempelajari upliner nonlinear.
Dalam percobaan kami, kami menemukan bahwa upampling dalam jaringan cepat dan efektif untuk mempelajari prediksi yang padat. Arsitektur segmentasi terbaik kami menggunakan lapisan-lapisan ini untuk mempelajari upample untuk prediksi yang lebih baik di Bagian 4.2.
Saya tidak berpikir saya benar-benar mengerti bagaimana lapisan convolutional dilatih.
Apa yang saya pikir saya mengerti adalah bahwa lapisan konvolusional dengan ukuran kernel belajar filter dengan ukuran k × k . Output dari lapisan konvolusional dengan ukuran kernel k , filter s ∈ N dan n berukuran dimensi Dim redup. Namun, saya tidak tahu bagaimana cara kerja lapisan konvolusional. (Saya mengerti bagaimana MLP sederhana belajar dengan gradient descent, jika itu membantu).
Jadi, jika pemahaman saya tentang lapisan konvolusional benar, saya tidak tahu bagaimana ini dapat dibalik.
Adakah yang bisa membantu saya memahami lapisan dekonvolusional?
sumber
Jawaban:
Lapisan dekonvolusi adalah nama yang sangat disayangkan dan lebih baik disebut lapisan konvolusional transpos .
Secara visual, untuk konvolusi yang dialihkan dengan langkah satu dan tanpa pelapis, kami hanya mengisi input asli (entri biru) dengan nol (entri putih) (Gambar 1).
Dalam hal langkah kedua dan padding, konvolusi yang berubah akan terlihat seperti ini (Gambar 2):
Anda dapat menemukan lebih banyak visualisasi aritmatika konvolusional (hebat) di sini .
sumber
Saya pikir salah satu cara untuk mendapatkan intuisi tingkat yang benar-benar dasar di balik konvolusi adalah bahwa Anda menggeser filter K, yang dapat Anda anggap sebagai stensil K, pada gambar input dan menghasilkan aktivasi K - masing-masing mewakili tingkat kecocokan dengan stensil tertentu . Operasi terbalik dari itu adalah untuk mengambil aktivasi K dan memperluasnya menjadi preimage operasi konvolusi. Penjelasan intuitif dari operasi terbalik karena itu, kira-kira, rekonstruksi gambar diberikan stensil (filter) dan aktivasi (tingkat kecocokan untuk setiap stensil) dan oleh karena itu pada tingkat intuitif dasar kami ingin meledakkan setiap aktivasi oleh topeng stensil dan menambahkannya.
Cara lain untuk mendekati pemahaman dekon adalah dengan memeriksa implementasi lapisan dekonvolusi dalam Caffe, lihat bit kode yang relevan berikut ini:
Anda dapat melihat bahwa itu diterapkan di Caffe persis seperti backprop untuk lapisan konvolusional maju biasa (bagi saya itu lebih jelas setelah saya membandingkan implementasi backprop di lapisan cuDNN vs ConvolutionLayer :: Backward_gpu diimplementasikan menggunakan GEMM). Jadi, jika Anda mempelajari cara melakukan backpropagation untuk konvolusi reguler, Anda akan memahami apa yang terjadi pada tingkat perhitungan mekanis. Cara penghitungan ini cocok dengan intuisi yang dijelaskan dalam paragraf pertama uraian singkat ini.
Untuk menjawab pertanyaan Anda yang lain di dalam pertanyaan pertama Anda, ada dua perbedaan utama antara backpropagation MLP (lapisan yang terhubung penuh) dan jaring konvolusional:
1) pengaruh bobot dilokalisasi, jadi pertama-tama cari tahu bagaimana melakukan backprop untuk, katakanlah filter 3x3 yang dihubungkan dengan area kecil 3x3 dari gambar input, pemetaan ke satu titik di gambar hasil.
2) bobot filter konvolusional dibagi untuk invarian spasial. Apa artinya ini dalam praktiknya adalah bahwa dalam penyaluran ke depan filter 3x3 yang sama dengan bobot yang sama diseret ke seluruh gambar dengan bobot yang sama untuk perhitungan penerusan untuk menghasilkan gambar output (untuk filter tertentu). Apa artinya ini untuk backprop adalah bahwa gradien backprop untuk setiap titik dalam gambar sumber dijumlahkan di seluruh rentang yang kami seret filter itu selama meneruskan. Perhatikan bahwa ada juga perbedaan gradien loss wrt x, w dan bias karena dLoss / dx perlu di-backpropagated, dan dLoss / dw adalah cara kami memperbarui bobot. w dan bias adalah input independen dalam DAG perhitungan (tidak ada input sebelumnya), jadi tidak perlu melakukan backpropagation pada mereka.
sumber
Matematika langkah demi langkah menjelaskan bagaimana transpose convolution 2x upampling dengan filter 3x3 dan langkah 2:
Cuplikan TensorFlow paling sederhana untuk memvalidasi matematika:
sumber
The catatan yang menyertai Stanford CS kelas CS231n : Konvolusional Neural Networks untuk Visual Recognition, dengan Andrej Karpathy , melakukan pekerjaan yang sangat baik menjelaskan jaringan saraf convolutional.
Membaca makalah ini seharusnya memberi Anda gambaran kasar tentang:
Ini slide yang besar untuk Deconvolutional Networks.
sumber
Baru saja menemukan artikel yang bagus dari situs web theaon tentang topik ini [1]:
Jadi dalam simplespeak, "transposed convolution" adalah operasi matematika menggunakan matriks (seperti konvolusi) tetapi lebih efisien daripada operasi konvolusi normal dalam kasus ketika Anda ingin kembali dari nilai-nilai yang dililitkan ke yang asli (arah yang berlawanan). Inilah sebabnya mengapa lebih disukai dalam implementasi untuk konvolusi ketika menghitung arah yang berlawanan (yaitu untuk menghindari banyak perkalian 0 yang tidak perlu yang disebabkan oleh matriks jarang yang dihasilkan dari pengisian input).
Image ---> convolution ---> Result
Result ---> transposed convolution ---> "originalish Image"
Terkadang Anda menyimpan beberapa nilai di sepanjang jalur konvolusi dan menggunakan kembali informasi itu ketika "kembali":
Result ---> transposed convolution ---> Image
Mungkin itulah alasan mengapa hal itu secara keliru disebut "dekonvolusi". Namun, itu memang ada hubungannya dengan matriks transpos konvolusi (C ^ T), maka nama yang lebih tepat "transvolusi konvolusi".
Jadi sangat masuk akal ketika mempertimbangkan biaya komputasi. Anda akan membayar lebih banyak untuk amazon GPU jika Anda tidak akan menggunakan konvolusi yang dialihkan.
Baca dan saksikan animasi di sini dengan hati-hati: http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed
Beberapa bacaan lain yang relevan:
Saya juga baru dalam hal ini dan akan berterima kasih atas umpan balik atau koreksi.
[1] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html
[2] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic
[3] https://en.wikipedia.org/wiki/Matched_filter
sumber
Kita bisa menggunakan PCA untuk analogi.
Saat menggunakan conv, forward pass adalah mengekstraksi koefisien komponen utama dari gambar input, dan pass mundur (yang memperbarui input) adalah menggunakan (gradien) koefisien untuk merekonstruksi gambar input baru, sehingga gambar input baru memiliki koefisien PC yang lebih cocok dengan koefisien yang diinginkan.
Saat menggunakan deconv, operan maju dan mundur mundur dibalik. Pass maju mencoba merekonstruksi gambar dari koefisien PC, dan pass mundur memperbarui koefisien PC yang diberikan (gradien) gambar.
Dek lulus maju melakukan persis gradien perhitungan yang diberikan dalam posting ini: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
Itu sebabnya dalam implementasi caffe dari deconv (lihat jawaban Andrei Pokrovsky), forward pass deconv memanggil backward_cpu_gemm (), dan pass backward memanggil forward_cpu_gemm ().
sumber
Selain jawaban David Dao: Dimungkinkan juga untuk memikirkan sebaliknya. Alih-alih berfokus pada piksel input (resolusi rendah) mana yang digunakan untuk menghasilkan piksel output tunggal, Anda juga dapat fokus pada masing-masing piksel input mana yang berkontribusi pada wilayah piksel output mana.
Ini dilakukan dalam publikasi penyulingan ini , termasuk serangkaian visualisasi yang sangat intuitif dan interaktif. Salah satu keuntungan berpikir ke arah ini adalah menjelaskan artefak kotak-kotak menjadi mudah.
sumber
Konvolusi dari perspektif DSP
Saya agak terlambat untuk ini, tetapi masih ingin berbagi perspektif dan wawasan saya. Latar belakang saya adalah teori fisika dan pemrosesan sinyal digital. Secara khusus saya mempelajari wavelet dan konvolusi hampir di tulang punggung saya;)
Cara orang-orang di komunitas belajar yang mendalam berbicara tentang konvolusi juga membingungkan saya. Dari sudut pandang saya, apa yang tampaknya tidak ada adalah pemisahan keprihatinan yang tepat. Saya akan menjelaskan konvolusi pembelajaran yang mendalam menggunakan beberapa alat DSP.
Penolakan
Penjelasan saya akan sedikit bergelombang dan tidak matematis untuk mendapatkan poin utama.
Definisi
dan
Konvolusi Pembelajaran Mendalam oleh Bagian
Seperti yang dapat dilihat adalah operasi yang dialihkan, demikianlah namanya.
Koneksi ke Upsampling Neighbor Terdekat
yaitu kita dapat mengganti upsampler berulang dengan faktor 2 dan konvolusi dengan kernel ukuran 3 oleh konvolusi yang ditransformasikan dengan ukuran kernel 4. Konvolusi yang dialihkan ini memiliki "kapasitas interpolasi" yang sama, tetapi akan dapat mempelajari interpolasi yang lebih cocok.
Kesimpulan dan Keterangan Akhir
Saya harap saya dapat mengklarifikasi beberapa konvolusi umum yang ditemukan dalam pembelajaran mendalam sedikit dengan memisahkan mereka dalam operasi mendasar.
Saya tidak menutup kolam di sini. Tapi ini hanya downsampler nonlinear dan dapat ditangani dalam notasi ini juga.
sumber
Saya memiliki banyak kesulitan memahami apa yang sebenarnya terjadi di koran sampai saya menemukan posting blog ini: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -dengan-tensorflow-dan-tf-slim /
Berikut ini adalah ringkasan bagaimana saya memahami apa yang terjadi dalam 2x upampling:
Informasi dari kertas
Contoh sederhana
sumber
Makalah berikut membahas lapisan dekonvolusional. Keduanya dari sudut pandang arsitektur dan pelatihan. Jaringan dekonvolusi
sumber