Apa arsitektur autoencoder convolutional yang bertumpuk?

23

Jadi saya mencoba melakukan pretraining pada gambar manusia menggunakan jaring konvolusional. Saya membaca makalah ( Paper1 dan Paper2 ) dan tautan stackoverflow ini , tapi saya tidak yakin saya mengerti struktur jaring (tidak didefinisikan dengan baik di koran).

Pertanyaan:

  • Saya dapat meminta input saya diikuti oleh layer noise diikuti oleh layer conv, diikuti oleh layer pooling - setelah itu - apakah saya menghapus pool sebelum saya memberikan output (yang sama dengan gambar input saya)?

    Katakanlah saya memiliki beberapa (135.240) gambar. Jika saya menggunakan 32, (12,21) kernel, diikuti oleh (2,2) pooling, saya akan berakhir dengan 32 (62, 110) fitur peta. Sekarang apakah saya membatalkan pengumpulan untuk mendapatkan 32 (124, 220) peta fitur dan kemudian meratakannya? sebelum memberikan lapisan output (135.240) saya?

  • Jika saya memiliki beberapa lapisan conv-pool seperti itu, haruskah saya melatih mereka satu per satu - seperti dalam autoencoder denoised bertumpuk? Atau - dapatkah saya memiliki sesuatu seperti input-conv-pool-conv-pool-conv-pool-output (output sama dengan input)? Dalam hal itu, bagaimana cara pooling, depooling seharusnya dikelola? Haruskah saya menghapus pool pada layer pool terakhir sebelum output? Dan lagi - apa yang harus menjadi faktor ukuran dari de-pooling itu? Apakah niat untuk membawa fitur peta kembali ke bentuk input?

  • Haruskah saya memperkenalkan lapisan kebisingan setelah setiap lapisan conv-pool-depool?

  • Dan kemudian ketika fine tuning - apakah saya seharusnya menghapus layer de-pooling dan membiarkan sisanya sama. Atau haruskah saya menghapus lapisan kebisingan dan lapisan de-pooling

  • Adakah yang bisa mengarahkan saya ke url / kertas yang telah merinci arsitektur seperti auto encoder convolutional yang ditumpuk untuk melakukan pelatihan pra pada gambar?

Run2
sumber

Jawaban:

12

Saat ini saya sedang mengeksplorasi autoencoder bertumpuk-convolutional.

Saya akan mencoba dan menjawab beberapa pertanyaan Anda sejauh yang saya ketahui. Pikiran Anda, saya mungkin salah jadi bawa dengan sebutir garam.

  1. Ya, Anda harus "membalikkan" kumpulan dan kemudian bergabung dengan satu set filter untuk memulihkan gambar output Anda. Jaringan saraf standar (mempertimbangkan data MNIST sebagai input, yaitu 28x28 dimensi input) adalah:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. Pemahaman saya adalah bahwa secara konvensional itulah yang harus dilakukan, yaitu melatih setiap lapisan secara terpisah. Setelah itu Anda menumpuk lapisan dan melatih seluruh jaringan sekali lagi menggunakan bobot pra-terlatih. Namun, Yohsua Bengio memiliki beberapa penelitian (referensi lolos dari ingatan saya) menunjukkan bahwa seseorang dapat membangun jaringan yang sepenuhnya ditumpuk dan melatih dari awal.

  3. Pemahaman saya adalah bahwa "lapisan kebisingan" ada di sana untuk memperkenalkan ketahanan / variabilitas dalam input sehingga pelatihan tidak sesuai.

  4. Selama Anda masih "melatih" pra-pelatihan atau fine-tuning, saya pikir bagian rekonstruksi (yaitu reversePooling, de-convolution dll) sangat diperlukan. Kalau tidak, bagaimana seharusnya seseorang melakukan propagasi balik-kesalahan untuk menyesuaikan bobot?

  5. Saya telah mencoba menelusuri banyak makalah, tetapi arsitekturnya tidak pernah dijelaskan secara lengkap. Jika ada, tolong beri tahu saya.

pengguna2979010
sumber
Jika Anda selesai dengan pra-pelatihan, Anda tidak lagi memerlukan bagian decoder, dan penyetelan halus masih akan menyesuaikan encoder, kali ini untuk klasifikasi yang lebih baik.
jwalker
2
Bagaimana "reverse-maxPool" mungkin? Anda tidak pernah dapat merekonstruksi sekumpulan angka hanya dengan memberikan maksimum ...?
Fequish
1
@Fequish, ini merupakan reverse-maxpool misal: jika pool = 2x2, saya mempertahankan posisi max dan memasukkan max ke posisi tertentu di 2x2, sisanya 0
user2979010
1
@ jwalker, tujuan akhir saya bukanlah klasifikasi, karenanya menyesuaikan dengan jaringan yang tidak terbuka
user2979010
@Fishish, untuk tujuan decoding sebaliknya hanyalah kelas atas tetangga terdekat.
jwalker
2

Saya juga telah mencari model yang sepenuhnya dijelaskan dari Autoencoder Konvolusional Stacked.

Saya menemukan tiga arsitektur yang berbeda. Saya masih mempelajarinya dan saya pikir ini mungkin membantu orang lain yang juga mulai menjelajahi CAE. Referensi lebih lanjut untuk makalah atau implementasi akan sangat membantu.

  1. Yang disebutkan oleh Anda menggunakan pooling - unpooling.
  2. Lapisan (konvolusi) __ x_times -> (deconvolve) __ x_times,

    dan dapatkan ukuran yang sama dengan input.

  3. (belok -> kumpulan) __ x_times -> (dekonvolusi melangkah) __ y_times
    • padding dan langkah dipilih sedemikian rupa sehingga ukuran gambar akhir sama dengan gambar asli.
    • Referensi
Ankitp
sumber
2
Selamat datang di situs ini. Apakah ini dimaksudkan sebagai jawaban untuk pertanyaan OP, komentar yang meminta klarifikasi dari OP atau salah satu dari penjawab, atau pertanyaan baru Anda sendiri? Harap hanya menggunakan bidang "Jawaban Anda" untuk memberikan jawaban atas pertanyaan awal. Anda akan dapat berkomentar di mana saja ketika reputasi Anda> 50. Jika Anda memiliki pertanyaan baru, klik abu-abu ASK QUESTION di bagian atas halaman & tanyakan di sana, maka kami dapat membantu Anda dengan baik. Karena Anda baru di sini, Anda mungkin ingin mengikuti tur kami , yang memiliki informasi untuk pengguna baru.
gung - Reinstate Monica
1
Itu dimaksudkan sebagai jawaban untuk pertanyaan OP meskipun itu mungkin tidak memenuhi syarat untuk menjadi jawaban yang lengkap. Saya menjawab bagian terakhir 'Saya telah mencoba menelusuri banyak makalah, tetapi arsitekturnya tidak pernah dijelaskan secara lengkap. Jika Anda menemukan, tolong beri tahu saya. '
Ankitp
Ok terima kasih. Cara keluarnya ambigu. Misalnya "Saya juga telah mencari ..." & "Referensi lebih lanjut untuk makalah atau implementasi akan sangat membantu". Ketahuilah bahwa CV adalah situs tanya jawab murni, bukan forum diskusi. Mengapa tidak mengikuti tur kami & mempelajari lebih lanjut tentang situs ini?
gung - Reinstate Monica
-1

Saya tidak berpikir metode pelatihan layer-wISE benar. Sebagai contoh, arsitektur auto-encoder convolutional adalah:

input-> conv-> max_poo-> de_max_pool-> de_conv-> output.

Ini adalah auto-encoder, dan harus dilatih dengan seluruh arsitektur. Selain itu, tidak ada kriteria ketat apakah satu auto-encoder konvolusional memerlukan kumpulan dan penghapusan. biasanya, satu pool tetapi tanpa un_pool. Berikut ini adalah perbandingan eksperimental dengan tidak adanya pool dan un_pool.

https://arxiv.org/pdf/1701.04949.pdf

Kevin Sun
sumber