Backprop Melalui Lapisan Max-Pooling?

62

Ini adalah pertanyaan konseptual kecil yang telah mengganggu saya untuk sementara waktu: Bagaimana kita dapat kembali-menyebar melalui lapisan max-pooling dalam jaringan saraf?

Saya menemukan max-pooling layers saat membaca tutorial ini untuk library nn Torch 7. Pustaka mengabstraksi perhitungan gradien dan meneruskan untuk setiap lapisan jaringan yang dalam. Saya tidak mengerti bagaimana perhitungan gradien dilakukan untuk lapisan max-pooling.

Saya tahu bahwa jika Anda memiliki input masuk ke neuron dari layer , maka (didefinisikan sebagai ) diberikan oleh: zililδilδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

Jadi, lapisan kumpulan-max akan menerima dari lapisan berikutnya seperti biasa; tetapi karena fungsi aktivasi untuk max-pooling neuron mengambil vektor nilai (lebih dari yang dimaksimalkan) sebagai input, bukan angka tunggal lagi, tetapi vektor ( harus diganti oleh ). Lebih lanjut, , sebagai fungsi maksimal, tidak dapat dibedakan sehubungan dengan inputnya.δjl+1δilθ(zjl)θ({zjl})θ

Jadi .... bagaimana cara kerjanya tepatnya?

shinvu
sumber

Jawaban:

58

Tidak ada gradien sehubungan dengan nilai-nilai yang tidak maksimal, karena mengubahnya sedikit tidak mempengaruhi output. Selanjutnya, max adalah linier lokal dengan kemiringan 1, berkenaan dengan input yang benar-benar mencapai maks. Dengan demikian, gradien dari lapisan berikutnya dilewatkan kembali ke neuron yang mencapai maks. Semua neuron lain mendapatkan gradien nol.

Jadi dalam contoh Anda, akan menjadi vektor dari semua nol, kecuali bahwa lokasi th akan mendapatkan nilai manaδili{δjl+1}i=argmaxi(zil)

abora
sumber
7
Oh benar, tidak ada gunanya merambat kembali melalui neuron yang tidak maksimal - itu adalah wawasan yang sangat penting. Jadi jika saya sekarang mengerti ini dengan benar, kembali-menyebar melalui lapisan max-pooling hanya memilih max. neuron dari lapisan sebelumnya (di mana max-pooling dilakukan) dan melanjutkan propagasi balik hanya melalui itu.
shinvu
Tetapi tidakkah Anda perlu melipatgandakan turunan dari fungsi aktivasi?
Jason
1
@Jason: Fungsi max adalah linear lokal untuk aktivasi yang mendapat maks, jadi turunannya adalah konstan 1. Untuk aktivasi yang tidak berhasil, itu 0. Itu secara konsep sangat mirip dengan membedakan ReLU (x ) = maks (0, x) fungsi aktivasi.
Chrigi
Berapakah langkahnya kurang dari lebar kernel untuk max pooling?
Vatsal
1
Jawaban bagus! Bagaimana dengan kasus tepi di mana beberapa entri memiliki nilai maks yang sama (misalnya 2 nilai memiliki 0 dari ReLU, dan dua entri lainnya negatif)?
DankMasterDan
6

Max Pooling

Jadi misalkan Anda memiliki layer P yang muncul di atas PR layer. Maka umpan maju akan menjadi seperti ini:

Pi=f(jWijPRj) ,

di mana adalah aktivasi neuron ke-i dari lapisan P, f adalah fungsi aktivasi dan W adalah bobot. Jadi jika Anda menurunkannya, dengan aturan rantai Anda mendapatkan bahwa gradien mengalir sebagai berikut:Pi

grad(PRj)=igrad(Pi)fWij .

Tetapi sekarang, jika Anda memiliki penyatuan maks, untuk neuron maks dan untuk semua neuron lainnya, maka untuk neuron maks di lapisan sebelumnya dan untuk semua lainnya neuron. Begitu:f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron ,

grad(PRothers)=0.

patapouf_ai
sumber
2

Jawaban @ Shinvu ditulis dengan baik, saya ingin menunjukkan video yang menjelaskan gradien operasi Max () dan ini dalam grafik komputasi yang cepat dipahami.!

saat menerapkan operasi maxpool (simpul komputasi dalam grafik komputasi-arsitektur NN Anda), kita memerlukan fungsi untuk membuat matriks "mask" yang melacak di mana letak maksimum matriks. Benar (1) menunjukkan posisi maksimum dalam X, entri lainnya adalah False (0). Kami melacak posisi max karena ini adalah nilai input yang pada akhirnya mempengaruhi output, dan oleh karena itu biaya. Backprop adalah komputasi gradien sehubungan dengan biaya, jadi apa pun yang mempengaruhi biaya akhir harus memiliki gradien non-nol. Jadi, backprop akan "menyebarkan" gradien kembali ke nilai input khusus ini yang telah mempengaruhi biaya.

anu
sumber