Saya memiliki CNN berikut:
- Saya mulai dengan gambar input berukuran 5x5
- Kemudian saya menerapkan konvolusi menggunakan kernel 2x2 dan melangkah = 1, yang menghasilkan fitur peta ukuran 4x4.
- Lalu saya menerapkan 2x2 max-pooling dengan stride = 2, yang mengurangi fitur map menjadi ukuran 2x2.
- Kemudian saya menerapkan sigmoid logistik.
- Kemudian satu lapisan yang terhubung sepenuhnya dengan 2 neuron.
- Dan lapisan output.
Demi kesederhanaan, mari kita asumsikan saya telah menyelesaikan umpan maju dan dihitung δH1 = 0,25 dan δH2 = -0,15
Jadi setelah lulus maju penuh dan mundur sebagian selesai jaringan saya terlihat seperti ini:
Kemudian saya menghitung delta untuk lapisan non-linear (logistic sigmoid):
Kemudian, saya menyebarkan delta ke layer 4x4 dan mengatur semua nilai yang disaring oleh max-pooling ke 0 dan gradient map terlihat seperti ini:
Bagaimana cara memperbarui bobot kernel dari sana? Dan jika jaringan saya memiliki lapisan konvolusional lain sebelum 5x5, nilai apa yang harus saya gunakan untuk memperbaruinya bobot kernel? Dan secara keseluruhan, apakah perhitungan saya benar?
machine-learning
convnet
backpropagation
cnn
kernel
koryakinp
sumber
sumber
Jawaban:
Konvolusi menggunakan prinsip pembagian berat yang akan menyulitkan matematika secara signifikan tetapi mari kita coba untuk melewati gulma. Saya menarik sebagian besar penjelasan saya dari sumber ini .
Maju terus
Ketika Anda mengamati lintasan ke depan dari lapisan konvolusional dapat dinyatakan sebagai
di mana dalam kasus kamik1 dan k2 adalah ukuran kernel, dalam kasus kami k1=k2=2 . Jadi ini mengatakan untuk output x0,0=0.25 seperti yang Anda temukan. m dan n iterate melintasi dimensi kernel.
Backpropagation
Dengan asumsi Anda menggunakan mean squared error (MSE) yang didefinisikan sebagai
kami ingin menentukan
Ini mengulangi seluruh ruang output, menentukan kesalahan bahwa output berkontribusi dan kemudian menentukan faktor kontribusi bobot kernel sehubungan dengan output itu.
Mari kita sebut kontribusi kesalahan dari delta ruang output untuk kesederhanaan dan untuk melacak kesalahan backpropagated,
Kontribusi dari bobot
Konvolusi didefinisikan sebagai
jadi,
Then back in our error term
Stochastic gradient descent
Let's calculate some of them
Now you can put that into the SGD equation in place of∂E∂w .
Please let me know if theres errors in the derivation.
Update: Corrected code
sumber
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')