Saya pertama-tama menurunkan kesalahan untuk lapisan konvolusional di bawah ini untuk kesederhanaan untuk array satu dimensi (input) yang dapat dengan mudah ditransfer ke multidimensi lalu:
Kami berasumsi di sini bahwa panjang adalah input dari konv. lapisan, adalah kernel-ukuran bobot yang menunjukkan masing-masing berat badan dengan dan output adalah .
Maka kita dapat menulis (perhatikan penjumlahan dari nol):
mana dan fungsi aktivasi (misalnya sigmoidal). Dengan ini, kita sekarang dapat mempertimbangkan beberapa fungsi kesalahan dan fungsi kesalahan pada lapisan konvolusional (salah satu lapisan sebelumnya) yang diberikan olehyl−1Nl−1mwwixl
xli=∑a=0m−1wayl−1a+i
yli=f(xli)fE∂E/∂yli. Kami sekarang ingin mengetahui ketergantungan kesalahan pada salah satu bobot pada lapisan sebelumnya:
mana kita memiliki jumlah atas semua ekspresi di mana terjadi, yaitu . Perhatikan juga bahwa kita tahu istilah terakhir muncul dari fakta bahwa yang dapat Anda lihat dari persamaan pertama.
Untuk menghitung gradien kita perlu mengetahui istilah pertama, yang dapat dihitung dengan:
∂E∂wa=∑a=0N−m∂E∂xli∂xli∂wa=∑a=0N−m∂E∂wayl−1i+a
waN−m∂xli∂wa=yl−1i+a∂E∂xli=∂E∂yli∂yli∂xli=∂E∂yli∂∂xlif(xli)
di mana lagi istilah pertama adalah kesalahan dalam lapisan sebelumnya dan fungsi aktivasi nonlinier.
f
Dengan memiliki semua entitas yang diperlukan, kini kami dapat menghitung kesalahan dan menyebarkannya kembali secara efisien ke lapisan berharga:
Perhatikan bahwa langkah terakhir dapat mudah dimengerti saat menuliskan -s wrt -s. The mengacu pada maxtrix berat dialihkan ( ).
δl−1a=∂E∂yl−1i=∑a=0m−1∂E∂xli−a∂xli−a∂yl−1i=∑a=0m−1∂E∂xli−awflippeda
xliyl−1iflippedT
Oleh karena itu Anda bisa menghitung kesalahan di lapisan berikutnya dengan (sekarang dalam notasi vektor):
δl=(wl)Tδl+1f′(xl)
yang menjadi untuk lapisan convolutional dan subsampling:
mana Operasi menyebarkan kesalahan melalui lapisan pengumpulan max.u p s a m p l e
δl=upsample((wl)Tδl+1)f′(xl)
upsample
Silakan tambahkan atau koreksi saya!
Untuk referensi lihat:
http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/
http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
dan untuk implementasi C ++ (tanpa persyaratan untuk menginstal):
https://github.com/nyanp/tiny-cnn#supported-networks