Jaringan saraf convolusional: Bukankah neuron sentral terlalu terwakili dalam output?

30

[Pertanyaan ini juga diajukan pada stack overflow]

Pertanyaan singkatnya

Saya sedang mempelajari jaringan saraf convolutional, dan saya percaya bahwa jaringan ini tidak memperlakukan setiap input neuron (pixel / parameter) secara setara. Bayangkan kita memiliki jaringan yang dalam (banyak lapisan) yang menerapkan konvolusi pada beberapa gambar input. Neuron di "tengah" gambar memiliki banyak jalur unik ke banyak neuron lapisan yang lebih dalam, yang berarti bahwa variasi kecil di neuron tengah memiliki efek yang kuat pada output. Namun, neuron di tepi gambar hanya memiliki jalur (atau, tergantung pada implementasi yang tepat, dari urutan ) jalur di mana informasinya mengalir melalui grafik. Tampaknya ini "kurang terwakili".11

Saya prihatin dengan hal ini, karena pembedaan skala neuron tepi ini secara eksponensial dengan kedalaman (jumlah lapisan) jaringan. Bahkan menambahkan lapisan max-pooling tidak akan menghentikan peningkatan eksponensial, hanya koneksi penuh membawa semua neuron pada pijakan yang sama. Saya tidak yakin bahwa alasan saya benar, jadi pertanyaan saya adalah:

  • Apakah saya benar bahwa efek ini terjadi di jaringan konvolusional yang dalam?
  • Adakah teori tentang hal ini, pernahkah disebutkan dalam literatur?
  • Apakah ada cara untuk mengatasi efek ini?

Karena saya tidak yakin apakah ini memberikan informasi yang cukup, saya akan menguraikan lebih banyak tentang pernyataan masalah, dan mengapa saya percaya ini adalah masalah.

Penjelasan lebih rinci

Bayangkan kita memiliki jaringan saraf yang dalam yang mengambil gambar sebagai input. Asumsikan kita menerapkan filter konvolusional piksel di atas gambar, di mana kita menggeser jendela konvolusi sebanyak piksel setiap kali. Ini berarti bahwa setiap neuron dalam input mengirimkan aktivasi ke neuron pada lapisan . Masing-masing neuron ini dapat mengirimkan aktivasi mereka ke lainnya , sedemikian sehingga neuron paling atas kami terwakili dalam neuron keluaran, dan seterusnya.64×64416×16=26522652652

Ini, bagaimanapun, tidak berlaku untuk neuron di tepi: ini mungkin diwakili hanya dalam sejumlah kecil jendela konvolusi, sehingga menyebabkan mereka untuk mengaktifkan (dari urutan) hanya neuron di lapisan berikutnya. Menggunakan trik seperti mirroring di sepanjang tepi tidak akan membantu ini: neuron lapis kedua yang akan diproyeksikan masih di tepi, yang berarti bahwa neuron lapis kedua akan kurang terwakili (sehingga membatasi pentingnya neuron tepi kita juga). Seperti dapat dilihat, perbedaan ini secara eksponensial dengan jumlah lapisan.1

Saya telah membuat gambar untuk memvisualisasikan masalah, yang dapat ditemukan di sini (saya tidak diizinkan untuk memasukkan gambar dalam pos itu sendiri). Jaringan ini memiliki jendela konvolusi ukuran . Angka-angka di sebelah neuron menunjukkan jumlah jalur ke neuron terdalam. Gambar ini mengingatkan pada Segitiga Pascal .3

https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0

Mengapa ini menjadi masalah?

Efek ini tampaknya tidak menjadi masalah pada pandangan pertama: Pada prinsipnya, bobot harus secara otomatis menyesuaikan sedemikian rupa sehingga jaringan melakukan tugasnya. Selain itu, ujung-ujung gambar tidak terlalu penting dalam pengenalan gambar. Efek ini mungkin tidak terlihat dalam tes pengenalan gambar sehari-hari, tetapi masih mengkhawatirkan saya karena dua alasan: 1. generalisasi untuk aplikasi lain, dan 2. masalah yang timbul dalam kasus jaringan yang sangat dalam.

1. Mungkin ada aplikasi lain, seperti pengenalan suara atau suara, di mana tidak benar bahwa neuron paling tengah adalah yang paling penting. Menerapkan konvolusi sering dilakukan dalam bidang ini, tetapi saya belum dapat menemukan makalah yang menyebutkan efek yang saya khawatirkan.

2. Jaringan yang sangat dalam akan melihat efek buruk yang secara eksponensial dari diskriminasi neuron batas, yang berarti bahwa neuron pusat dapat direpresentasikan secara berlebihan oleh berbagai urutan besarnya (bayangkan kita memiliki lapisan sehingga contoh di atas akan memberikan cara neuron sentral dapat memproyeksikan informasinya). Ketika seseorang meningkatkan jumlah lapisan, seseorang terikat untuk mencapai batas di mana bobot tidak layak mengkompensasi efek ini.1026510

Sekarang bayangkan kita mengganggu semua neuron dengan jumlah kecil. Neuron sentral akan menyebabkan output berubah lebih kuat oleh beberapa urutan besarnya, dibandingkan dengan neuron tepi. Saya percaya bahwa untuk aplikasi umum, dan untuk jaringan yang sangat dalam, cara mengatasi masalah saya harus ditemukan?

Koen
sumber
8
Saya tidak dapat sepenuhnya menjawab pertanyaan Anda, tetapi saya menemukan makalah ini: cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf yang membahas masalah Anda. Mereka berbicara tentang solusi yang berbeda, 1) melapisi tepi input dengan nol, 2) menambahkan komponen yang terhubung secara global, atau 3) memperbaiki dan meneruskan penyebaran tepi sehingga tidak ada info tepi yang hilang. Baru-baru ini saya ingin tahu tentang masalah yang sama dan menemukan pertanyaan Anda. Saya masih mengupas detail kertas itu. Semoga ini bisa membantu.
nfmcclure
Terima kasih, ini persis apa yang saya cari! Mengesankan bahwa ini terlihat hanya dengan 2 lapisan. Untuk TL; DR'ing seluruh kertas: Menggunakan kombinasi 1) (zero padding) dan 2) (koneksi global acak) ditemukan menjadi obat terbaik.
Koen
Saya ingin tahu, apakah itu tidak cukup menggunakan offset yang tidak tumpang tindih? Jadi, dalam contoh Anda, Anda memiliki patch 64x64 dan Anda memindahkan input Anda dari 64 piksel setiap kali saat menerapkan konvolusi. ('shift' Anda adalah 'offset' saya). Yang, saya kira, sama seperti melakukan zero padding?
Renthal
1
Maaf karena tidak merespons untuk sementara waktu, saya tidak bekerja pada NN lagi. Namun, saya pikir saya bisa menjawab pertanyaan, meskipun saya menyadari tujuan saya yang lebih besar adalah untuk lebih memahami apa yang sedang terjadi (yang saya masih belum tahu). 1) Efek ini tampaknya memang terjadi. 2) Makalah yang terhubung di atas menjelaskannya dan 3) juga mengeksplorasi cara untuk mengatasinya. Untuk Renthal: Patch yang tidak tumpang tindih (memilih offset = ukuran konv) memang seharusnya mengatasi masalah saya, tetapi orang sering menemukan patch yang tumpang tindih untuk bekerja lebih baik. Untuk EngrStudent, Maaf, saya tidak terbiasa dengan Bootstrap Resampling.
Koen

Jawaban:

4

Representasi yang jarang diharapkan dalam model hirarkis. Mungkin, apa yang Anda temukan adalah masalah intrinsik dengan struktur hirarkis model pembelajaran yang mendalam. Anda akan menemukan beberapa makalah ilmiah tentang "representasi jarang", terutama dalam penelitian memori.

Saya pikir Anda akan mendapat manfaat dari membaca tentang "bidang reseptor" di korteks visual. Tidak hanya ada sel-sel ON dan OFF di otak mamalia, tetapi juga sel-sel RF yang menyala baik selama ON dan OFF. Mungkin masalah tepi / sparsity dapat diatasi dengan memperbarui model untuk mencerminkan ilmu saraf saat ini pada penglihatan, terutama pada model hewan.

noumenal
sumber
3

Anda benar bahwa ini merupakan masalah jika konvolusi hanya beroperasi pada piksel gambar, tetapi masalahnya akan hilang jika Anda membuat nol pada gambar (seperti yang umumnya disarankan). Ini memastikan bahwa konvolusi akan menerapkan filter dengan jumlah yang sama untuk setiap piksel.

jon_simon
sumber
1
Saya belum yakin. Padding-nol hanya akan membuat lebih banyak piksel-output di sekitar piksel "tengah" yang ditemukan tanpa padding. Nilai piksel "tengah" persis sama, tidak peduli apa pun yang menggunakan bantalan nol.
Koen
1
Jika jendela konvolusional berukuran , maka dengan melapisi semua tepi dengan banyak nol, Anda akan menjamin bahwa lilitan akan bekerja pada piksel tepi sama banyaknya dengan piksel dalam (dengan asumsi Anda melakukan ini di setiap lapisan konvolusional dalam jaringan). Namun dalam praktiknya, tidak memiliki lapisan agresif seperti itu, dan malah menurunkan bobot piksel tepi dengan baik, karena informasi penting jauh lebih mungkin ditempatkan di dekat bagian tengah gambar. n×nn1
jon_simon
Visualisasi konvolusi setengah jalan di halaman ini dapat membantu menyampaikan intuisi: cs231n.github.io/convolutional-networks
jon_simon