Lapisan Konvolusional: Pad atau tidak pad?

19

Arsitektur AlexNet menggunakan zero-paddings seperti yang ditunjukkan pada gambar: masukkan deskripsi gambar di sini Namun, tidak ada penjelasan dalam makalah mengapa padding ini diperkenalkan.

Standford CS 231n tentu saja mengajarkan kita menggunakan bantalan untuk menjaga ukuran spasial: masukkan deskripsi gambar di sini

Saya bertanya-tanya apakah ini satu-satunya alasan kita perlu melapisi? Maksud saya, jika saya tidak perlu mempertahankan ukuran spasial, bisakah saya melepas bantalan? Saya tahu ini akan menghasilkan penurunan ukuran spasial yang sangat cepat saat kita naik ke level yang lebih dalam. Namun, saya bisa menukar itu dengan menghapus lapisan penyatuan. Saya akan sangat senang jika ada yang bisa memberi saya alasan di balik zero padding. Terima kasih!

Jumabek Alihanov
sumber

Jawaban:

20

Ada beberapa alasan padding penting:

  1. Lebih mudah untuk merancang jaringan jika kita melestarikan heightdanwidth dan tidak perlu terlalu khawatir tentang dimensi tensor ketika berpindah dari satu layer ke layer lain karena dimensi hanya akan "berfungsi" .

  2. Ini memungkinkan kita untuk mendesain jaringan yang lebih dalam . Tanpa padding, pengurangan ukuran volume akan berkurang terlalu cepat.

  3. Padding sebenarnya meningkatkan kinerja dengan menjaga informasi di perbatasan .

Kutipan dari Stanford kuliah: "Selain manfaat yang disebutkan di atas menjaga ukuran spasial konstan setelah CONV, melakukan ini benar-benar meningkatkan kinerja. Jika lapisan CONV tidak nol-pad input dan hanya melakukan konvolusi yang valid, maka ukuran volume akan berkurang sejumlah kecil setelah setiap CONV, dan informasi di perbatasan akan "hanyut" terlalu cepat. " - sumber

  1. Seperti yang sudah dikatakan @dontloo, arsitektur jaringan baru perlu menyatukan lapisan konvolusional dengan filter 1x1, 3x3 dan 5x5 dan itu tidak akan mungkin jika mereka tidak menggunakan bantalan karena dimensi tidak akan cocok. Periksa gambar ini dari modul awal untuk memahami lebih baik mengapa bantalan berguna di sini.

masukkan deskripsi gambar di sini

Seret0
sumber
4
Mengapa bantalan nol begitu ada di mana-mana? Dalam pemrosesan gambar ada banyak mode perbatasan yang digunakan, seperti berbagai jenis mirroring atau melanjutkan dengan nilai di tepinya. Nol murni memiliki struktur yang sangat berbeda dibandingkan dengan gambar / fitur yang sebenarnya.
isarandi
3

Menurut saya alasan yang paling penting adalah untuk melestarikan ukuran spasial. Seperti yang Anda katakan, kita dapat menukar penurunan ukuran spasial dengan menghapus lapisan penyatuan. Namun banyak struktur jaringan terkini (seperti jaring sisa , jaring awal , jaring fraktal ) beroperasi pada output dari lapisan yang berbeda, yang membutuhkan ukuran spasial yang konsisten antara mereka.

Hal lain adalah, jika tidak ada padding, piksel di sudut input hanya memengaruhi piksel di sudut yang sesuai dari output, sementara piksel di tengah berkontribusi pada lingkungan di output. Ketika beberapa lapisan tanpa-bantalan ditumpuk, jenis jaringan mengabaikan piksel gambar asrama.

Hanya beberapa pemahaman saya, saya percaya ada alasan bagus lainnya.

dontloo
sumber
2

Pertanyaan bagus Drag0 menjelaskan dengan baik tetapi saya setuju, ada sesuatu yang salah.

Ini seperti melihat foto dan harus berurusan dengan perbatasan. Dalam kehidupan nyata, Anda bisa menggerakkan mata Anda untuk melihat lebih jauh; Tidak ada batas nyata. Jadi itu adalah batasan dari medium.

Selain menjaga ukuran, apakah itu penting? Saya tidak mengetahui jawaban yang memuaskan tetapi saya menduga (tidak terbukti) bahwa dengan eksperimen tentang perhatian dan penyumbatan (objek parsial), kita tidak memerlukan informasi yang hilang di perbatasan. Jika Anda melakukan sesuatu yang lebih pintar (katakan salin piksel di sebelahnya), itu tidak akan mengubah jawabannya meskipun saya belum melakukan percobaan sendiri. Padding dengan 0s cepat dan mempertahankan ukuran, jadi itu sebabnya kami melakukannya.

bodoh
sumber
1

ini adalah pemikiran saya. zero padding penting pada saat awal untuk menjaga ukuran vektor fitur ouput. dan seseorang di atas mengatakan bahwa zero padding memiliki kinerja lebih.

tapi bagaimana kalau terakhir kali? resolusi gambar fitur vektor sangat kecil, dan nilai piksel berarti semacam vektor dari beberapa ukuran global.

Saya pikir dalam kasus terakhir semacam mirroring lebih baik daripada nol padding.

pengguna225549
sumber
1

Menguraikan menjaga informasi di perbatasan, pada dasarnya, piksel di sudut (berbayang hijau) ketika dilakukan konvolusi hanya akan digunakan sekali sedangkan yang di tengah, seperti berbayang merah, akan berkontribusi pada peta fitur yang dihasilkan beberapa kali. , kita pad gambar Lihat gambar: 2 .

Jatin
sumber
1

Saya akan mencoba mengatakan dari segi informasi bahwa kapan tidak apa-apa untuk pad dan ketika tidak.

Mari untuk kasus dasar, ambil contoh fungsi padding tensorflow. Ini menyediakan dua skenario, baik "Valid" atau "sama". Sama akan mempertahankan ukuran output dan akan tetap sama dengan input dengan menambahkan padding yang sesuai, sementara yang valid tidak akan melakukan itu dan beberapa orang mengklaim bahwa itu akan menyebabkan hilangnya informasi, tetapi, inilah tujuannya .

Kehilangan informasi ini tergantung pada ukuran kernel atau filter yang Anda gunakan. Misalnya, katakanlah Anda memiliki gambar 28x28 dan ukuran filter adalah 15x15 (katakanlah). Keluaran harus memiliki dimensi 16x16, tetapi jika Anda menggunakan "sama" dalam tensorflow akan menjadi 28x28. Sekarang 12 baris dan 12 kolom dalam dirinya sendiri tidak membawa informasi yang berarti tetapi masih ada sebagai bentuk kebisingan. Dan kita semua tahu betapa banyak model pembelajaran mendalam yang rentan terhadap kebisingan. Ini bisa menurunkan pelatihan banyak. Jadi jika Anda menggunakan filter besar, lebih baik tidak menggunakan padding.

Saurabh Kumar
sumber