【强基固本】卷积神经网络(CNN)反向传播算法
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
转自:https://www.cnblogs.com/pinard/p/6494810.html
01
02
03
04
假设我们
比如对于
对于
这上面9个式子其实可以用一个矩阵卷积的形式表示,即:
为了符合梯度计算,我们在误差矩阵周围填充了一圈0,此时我们将卷积核翻转后和反向传播的梯度误差进行卷积,就得到了前一次的梯度误差。这个例子直观的介绍了为什么对含有卷积的式子反向传播时,卷积核要翻转180度的原因。
以上就是卷积层的误差反向传播过程。
05
好了,我们现在已经可以递推出每一层的梯度误差
注意到卷积层
因此我们有:
注意到此时卷积核并没有反转,主要是此时是层内的求导,而不是反向传播到上一层的求导。具体过程我们可以分析一下。
和第4节一样的一个简化的例子,这里输入是矩阵,不是张量,那么对于第l层,某个个卷积核矩阵W的导数可以表示如下:
那么根据上面的式子,我们有:
从而可以清楚的看到这次我们为什么没有反转的原因。
而对于b,则稍微有些特殊,因为
06
现在我们总结下CNN的反向传播算法,以最基本的批量梯度下降法为例来描述反向传播算法。
输入:m个图片样本,CNN模型的层数L和所有隐藏层的类型,对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。对于池化层,要定义池化区域大小k和池化标准(MAX或Average),对于全连接层,要定义全连接层的激活函数(输出层除外)和各层的神经元个数。梯度迭代参数迭代步长
输出:CNN模型各隐藏层与输出层的
1) 初始化各隐藏层与输出层的各
2)for iter to 1 to MAX:
2-1) for i =1 to m:
a) 将CNN输入
b) for
b-1) 如果当前是全连接层:则有
b-2) 如果当前是卷积层:则有
b-3) 如果当前是池化层:则有
c) 对于输出层第L层:
c) 通过损失函数计算输出层的
d) for
d-1) 如果当前是全连接层:
d-2) 如果当前是卷积层:
d-3) 如果当前是池化层:
2-2) for
2-2-1) 如果当前是全连接层:
2-2-2) 如果当前是卷积层,对于每一个卷积核有:
2-3) 如果所有
3) 输出各隐藏层与输出层的线性关系系数矩阵
参考资料:
1) Neural Networks and Deep Learning by By Michael Nielsen
http://neuralnetworksanddeeplearning.com/index.html
2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
https://www.deeplearningbook.org/
3) UFLDL Tutorial
http://ufldl.stanford.edu/tutorial/
4)CS231n Convolutional Neural Networks for Visual Recognition, Stanford
https://cs231n.github.io/convolutional-networks/
“强基固本”历史文章
边框回归(Bounding Box Regression)详解
《CV中的多视图几何》——相机模型与标定
AI 框架基础技术之自动求导机制 (Autograd)
主成分分析(PCA)
深度学习算法收敛性证明
深度学习:数学知识基础
从Binary到Swish——激活函数深度详解
“卷积”其实没那么难以理解
DNN加速器性能分析
如何通俗易懂地让女朋友明白什么是语言模型?
深度学习从入门到放飞自我:完全解析triplet loss
卡尔曼滤波器
Reinforcement learning入门:从马尔可夫,动态规划到强化学习
算法工程师应该了解的浮点数知识
神经网络量化简介
更多强基固本专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!