CNN 卷积神经网络--kernel、偏置值导数
2016-07-08 21:42
330 查看
卷积层
偏置值导数
∂E∂blj=∂E∂zlj∗∂zlj∂blj(1)one thing keep in mind: blj是一个标量,又因为
zlj=∑i∈MjXl−1i∗klij+blj(2)
而zlj每一个元素都是与标量blj相关.
因此
∂E∂blj=∂E∂zlj∗∂zlj∂blj=∑uv∂E∂zluv∂zluv∂blj=∑uv(δlj)uv(3)
根据http://blog.csdn.net/zhongkeli/article/details/51849619,知
δlj=∂E∂zlj(4)
且δlj是一个矩阵,因此
∂E∂zluv等于(δlj)uv。
这一部分不知道对不对,但是在求解偏置值导数可以用到http://blog.csdn.net/zhongkeli/article/details/51858297 里面的思想,biasblj与zlj每一个元素都相关,因此blj的残差是zlj对应的残差与权重(1)加权和.
因此∂E∂blj=∑uv(δlj)uv(5)
kernel导数
先给出公式:∂E∂kernellij=rot180(conv2(xl−1i,rot180(δlj),valid))(6)
这里的kernel对应http://blog.csdn.net/zhongkeli/article/details/51858297的公式(14)中的权重W,但是有一点区别,公式(14)的wlkj是一个标量,而这里的kernellij是一个矩阵,可以单独求解kernellij每一个元素的导数。求解神经网络参数的导数,主要找出与待求解参数相关的神经元的残差(导数)和相应的权重即可求出待求解参数的导数。
推导公式实在很难写,使用图表说明一下求导的过程。
设前一层的输出feature map 为矩阵A
卷积核为K
当前层经过A与K卷积后为矩阵B
矩阵B对应的delta矩阵为D
这一步是求解卷积核K的导数,主要看卷积核K与delta D的关系,因delta D是与为矩阵B一一对应,所以主要关注卷积核K如何生成矩阵B。
B00=A00∗K00+A01∗K01+A10∗K10+A11∗K11(7)
B01=A01∗K00+A02∗K01+A11∗K10+A12∗K11(8)
B02=A02∗K00+A03∗K01+A12∗K10+A13∗K11(9)
B10=A10∗K00+A11∗K01+A20∗K10+A21∗K11(10)
B11=A11∗K00+A12∗K01+A21∗K10+A22∗K11(11)
B12=A12∗K00+A13∗K01+A22∗K10+A23∗K11(12)
B20=A20∗K00+A21∗K01+A30∗K10+A31∗K11(13)
B21=A21∗K00+A22∗K01+A31∗K10+A32∗K11(14)
B22=A22∗K00+A23∗K01+A32∗K10+A33∗K11(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的导数为A00D00+A01D01+
A02D02+A10D10+A11D11+A12D12+A20*D20+
A21D21+A22D22
同理可得
K01与A01,A02,A03,A11,A12,A13,A21,A22,A23做乘积分别生成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
K‘01=A01∗D00+A02∗D01+A03∗D02+A11∗D10+A12∗D11+A13∗D12+A21∗D20+A22∗D21+A23∗D22
K‘10=A10∗D00+A11∗D01+A12∗D02+A20∗D10+A21∗D11+A22∗D12+A30∗D20+A31∗D21+A32∗D22
K‘11=A11∗D00+A12∗D01+A13∗D02+A21∗D10+A22∗D11+A23∗D12+A31∗D20+A32∗D21+A33∗D22
也就是说
(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
相关文章推荐
- bp神经网络及matlab实现
- 如何用70行代码实现深度神经网络算法
- 基于神经网络的预测模型
- 详细解读神经网络十大误解,再也不会弄错它的事情原理
- 神经网络初步学习手记
- RBF的一点个人理解
- 利用自收敛深度人工神经网络构建(DNN)构建多语种大词汇量连续语音识别系统
- UFLDL Exercise: Convolutional Neural Network
- 神经网络凸优化
- 基于遗传算法(GA)的神经网络训练算法
- 机器学习笔记:神经网络
- 神经网络 caffe 的 vs2013 版本代码
- 传统BP神经网络完整例子(电力负荷预测)
- Matlab 神经网络工具箱
- Google最新人工智能算法RankBrain的实现--写在后面的话
- 备份:创建VS工程使用神经网络库——FANN
- 卷积神经网络知识要点
- BP神经网络识别手写数字项目解析及代码
- Deep learning: autoencoders and sparsity
- 神经网络浅析