CNN 卷积神经网络--kernel、偏置值导数

卷积层

偏置值导数

Eblj=Ezljzljblj(1)

one thing keep in mind: blj 是一个标量,又因为
zlj=iMjXl1iklij+blj(2)
zlj 每一个元素都是与标量 blj 相关.
因此
Eblj=Ezljzljblj=uvEzluvzluvblj=uv(δlj)uv(3)

根据http://blog.csdn.net/zhongkeli/article/details/51849619,知
δlj=Ezlj(4)
δlj 是一个矩阵,因此
Ezluv 等于 (δlj)uv
这一部分不知道对不对,但是在求解偏置值导数可以用到http://blog.csdn.net/zhongkeli/article/details/51858297 里面的思想,bias blj zlj 每一个元素都相关,因此 blj 的残差是 zlj 对应的残差与权重(1)加权和.
因此 Eblj=uv(δlj)uv(5)

kernel导数

先给出公式:
Ekernellij=rot180(conv2(xl1i,rot180(δlj),valid))(6)
这里的kernel对应http://blog.csdn.net/zhongkeli/article/details/51858297的公式(14)中的权重W,但是有一点区别,公式(14)的 wlkj 是一个标量,而这里的 kernellij 是一个矩阵,可以单独求解 kernellij 每一个元素的导数。求解神经网络参数的导数,主要找出与待求解参数相关的神经元的残差(导数)和相应的权重即可求出待求解参数的导数。
推导公式实在很难写,使用图表说明一下求导的过程。
设前一层的输出feature map 为矩阵A
CNN 卷积神经网络--kernel、偏置值导数_第1张图片
卷积核为K
CNN 卷积神经网络--kernel、偏置值导数_第2张图片
当前层经过A与K卷积后为矩阵B
CNN 卷积神经网络--kernel、偏置值导数_第3张图片
矩阵B对应的delta矩阵为D
CNN 卷积神经网络--kernel、偏置值导数_第4张图片
这一步是求解卷积核K的导数,主要看卷积核K与delta D的关系,因delta D是与为矩阵B一一对应,所以主要关注卷积核K如何生成矩阵B。
B00=A00K00+A01K01+A10K10+A11K11(7)
B01=A01K00+A02K01+A11K10+A12K11(8)
B02=A02K00+A03K01+A12K10+A13K11(9)
B10=A10K00+A11K01+A20K10+A21K11(10)
B11=A11K00+A12K01+A21K10+A22K11(11)
B12=A12K00+A13K01+A22K10+A23K11(12)
B20=A20K00+A21K01+A30K10+A31K11(13)
B21=A21K00+A22K01+A31K10+A32K11(14)
B22=A22K00+A23K01+A32K10+A33K11(15)

跟http://blog.csdn.net/zhongkeli/article/details/51858297的公式(14)可以得出,K的某个元素的导数等于残差D乘以矩阵A相应的值,
比如, K00 A00 , A01 , A02 , A10 , A11 , A12 , A20 , A21 , A22 做乘积分别生成 B00 , B01 , B02 , B10 , B11 , B12 , B20 , B21 , B22

因此 K00 的导数为 A00 D00 + A01 D01 +
A02 D02 + A10 D10 + A11 D11 + A12 D12 + A20 * D20 +
A21 D21 + A22 D22

同理可得
K01 A01 , A02 , A03 , A11 , A12 , A13 , A21 , A22 , A23 做乘积分别生成 B00 , B01 , B02 , B10 , B11 , B12 , B20 , B21 , B22

K00=A00D00+A01D01+A02D02+A10D10+A11D11+A12D12+A20D20+A21D21+A22D22

K01=A01D00+A02D01+A03D02+A11D10+A12D11+A13D12+A21D20+A22D21+A23D22

K10=A10D00+A11D01+A12D02+A20D10+A21D11+A22D12+A30D20+A31D21+A32D22

K11=A11D00+A12D01+A13D02+A21D10+A22D11+A23D12+A31D20+A32D21+A33D22

也就是说

(K00K10K01K11)=D00(A00A10A01A11)+D01(A01A11A02A12)+D02(A02A12A03A13)+D10(A10A20A11A21)+D11(A11A21A12A22)+D12(A12A22A13A23)+D20(A20A30A21A31)+D21(A21A31A22A32)+D22(A22A32A23A33)

子采样层

对于子采样层的kernel与bias导数,推导过程跟卷积层的推导过程是一样的,只要搞清楚,当前层所求元素对下一层的哪些神经元有贡献,把下一层相关的神经元的残差乘以相应的权重求和即可

参考文献

CNN公式推导
Notes onConvolutional Neural Networks

你可能感兴趣的:(深度学习)