Deep learn toolbox:CNN BP求导解析
《Notes on Convolutional Neural Networks》中詳細(xì)講解了CNN的BP過(guò)程,下面結(jié)合Deep learn toolbox中CNN的BP源碼對(duì)此做一些解析
?卷積層:
? ? ? ?卷積層的前向傳導(dǎo):
? ??? ? ? ? ? ? ? ? ?
? ? ? ?誤差反傳:
? ? ? ? 當(dāng)卷基層的下一層是pooling層時(shí),如果pooling層的誤差敏感項(xiàng)為時(shí),那么卷基層的誤差敏感項(xiàng)為:
? ? ??
? ? ? ?其中,upsample表示對(duì)進(jìn)行上采樣,表示激活函數(shù)對(duì)輸入的導(dǎo)數(shù),代表點(diǎn)積操作
? ? ? ?upsample根據(jù)pooling時(shí)采用方法來(lái)定,大概思想為:pooling層的每個(gè)節(jié)點(diǎn)是由卷積層中多個(gè)節(jié)點(diǎn)(一般為一個(gè)矩形區(qū)域)共同計(jì)算得到,所以pooling層每個(gè)節(jié)點(diǎn)的誤差敏感值也是由卷積層中多個(gè)節(jié)點(diǎn)的誤差敏感值共同產(chǎn)生的,只需滿足兩層的誤差敏感值總和相等即可,下面以mean-pooling和max-pooling為例來(lái)說(shuō)明。
假設(shè)卷積層的矩形大小為4×4, pooling區(qū)域大小為2×2, 很容易知道pooling后得到的矩形大小也為2*2(本文默認(rèn)pooling過(guò)程是沒(méi)有重疊的,卷積過(guò)程是每次移動(dòng)一個(gè)像素,即是有重疊的,后續(xù)不再聲明),如果此時(shí)pooling后的矩形誤差敏感值如下:
?
則按照mean-pooling,首先得到的卷積層應(yīng)該是4×4大小,其值分布為(等值復(fù)制):
?
因?yàn)榈脻M足反向傳播時(shí)各層見(jiàn)誤差敏感總和不變,所以卷積層對(duì)應(yīng)每個(gè)值需要平攤(除以pooling區(qū)域大小即可,這里pooling層大小為2×2=4)),最后的卷積層值
分布為:
?
如果是max-pooling,則需要記錄前向傳播過(guò)程中pooling區(qū)域中最大值的位置,這里假設(shè)pooling層值1,3,2,4對(duì)應(yīng)的pooling區(qū)域位置分別為右下、右上、左上、左下。則此時(shí)對(duì)應(yīng)卷積層誤差敏感值分布為:
?
求得后,我們就要求卷積層的導(dǎo)數(shù)了,論文中給出的公式為:
? ? ??
? ? 上式中表示的(u,v)項(xiàng)的值,表示與進(jìn)行卷積的結(jié)果的(u,v)項(xiàng)所對(duì)應(yīng)的的patch。
? ? ?上述公式和下面的公式是等價(jià)的:
? ? 損失函數(shù)對(duì)b的導(dǎo)數(shù)為:
? ? ? ? ?
?deep learn toolbox就是按照上述2個(gè)公式計(jì)算的。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ??pooling層的前向傳導(dǎo):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ??down(.)表示一個(gè)下采樣函數(shù)。典型的操作一般是對(duì)輸入圖像的不同nxn的塊的所有像素進(jìn)行求和。這樣輸出圖像在兩個(gè)維度上都縮小了n倍。每個(gè)輸出map都對(duì)應(yīng)一個(gè)屬于自己的乘性偏置β和一個(gè)加性偏置b。
? ? 已知卷積層的誤差敏感項(xiàng)時(shí),那么pooling層的誤差敏感項(xiàng)為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? 得到誤差敏感項(xiàng)后,由于pooling只有兩個(gè)參數(shù),分別求導(dǎo):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?但在deep learn toolbox中,只是簡(jiǎn)單地進(jìn)行subsampling,并沒(méi)有加sigmoid激活函數(shù),因而pooling層沒(méi)有參數(shù),不需要對(duì)pooling層求導(dǎo),也不
需要對(duì)其參數(shù)進(jìn)行更新。
? ?
? ?下面是deep learn toolbox 中CNN BP算法的代碼:
? ?
[cpp]?view plaincopy
總結(jié)
以上是生活随笔為你收集整理的Deep learn toolbox:CNN BP求导解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MATLAB中squeeze函数的作用
- 下一篇: SecureWatch和人工智能为疫情期