CNN的反向传播过程,从原理上讲,与普通的反向传播相同(都使用了链式法则),从具体形式上讲,CNN的反向传播公式又比较特殊,这是因为CNN独有的4个特点:

  1. 局部感知:卷积核和图像卷积时,每次卷积核所覆盖的像素只是一小部分。这一小部分也叫做感受野。
  2. 权值共享:同一层的每个感受野被卷积时,卷积参数都是相同的。
  3. 多卷积核:同一层的每个感受野可能被多个不同的卷积核分别进行卷积,输出多个通道(每个卷积核的结果是一个通道)。
  4. 池化:下采样过程,图像经过池化后,大小会缩小一定倍数。

一般的反向传播

一般的反向传播(即全连接网络)的公式如下:

δ(l)i∂J(θ)∂w(l)ij∂J(θ)∂b(l)i=g′(z(l)i)∑j=1Sl+1δ(l+1)jw(l)ji=δ(l+1)ia(l)j=δ(l+1)iδi(l)=g′(zi(l))∑j=1Sl+1δj(l+1)wji(l)∂J(θ)∂wij(l)=δi(l+1)aj(l)∂J(θ)∂bi(l)=δi(l+1)

\begin{align*} \delta_i^{(l)}&=g'(z_i^{(l)})\sum_{j=1}^{S_{l+1}}\delta_j^{(l+1)}w_{ji}^{(l)} \\ \frac{\partial J(\theta)}{\partial w_{ij}^{(l)}}&=\delta _i^{(l+1)}a_j^{(l)}\\ \frac{\partial J(\theta)}{\partial b_i^{(l)}}&=\delta _i^{(l+1)} \end{align*}
向量形式的表达如下:

δ(l)∂J(θ)∂W(l)∂J(θ)∂b(l)=(W(l))Tδ(l+1)∘g′(z(l))=δ(l+1)(a(l))T=δ(l+1)δ(l)=(W(l))Tδ(l+1)∘g′(z(l))∂J(θ)∂W(l)=δ(l+1)(a(l))T∂J(θ)∂b(l)=δ(l+1)

\begin{align*} \boldsymbol{\delta}^{(l)}&=(\boldsymbol{W}^{(l)})^T\boldsymbol{\delta}^{(l+1)}\circ g'(\boldsymbol{z}^{(l)})\\ \frac{\partial J(\theta)}{\partial \boldsymbol{W}^{(l)}}&=\boldsymbol{\delta}^{(l+1)}(\boldsymbol{a}^{(l)})^T\\ \frac{\partial J(\theta)}{\partial \boldsymbol{b}^{(l)}}&=\boldsymbol{\delta}^{(l+1)} \end{align*}
详细推导过程见 反向传播算法的公式推导

反向传播公式的分析

1、对于敏感度的传播:δ(l)i=g′(z(l)i)∑Sl+1j=1δ(l+1)jw(l)jiδi(l)=g′(zi(l))∑j=1Sl+1δj(l+1)wji(l)\delta_i^{(l)}=g'(z_i^{(l)})\sum_{j=1}^{S_{l+1}}\delta_j^{(l+1)}w_{ji}^{(l)},可以直接根据链式法则去解释它:
(1)根据前向传播规则,δ(l)iδi(l)\delta_i^{(l)} 的改变,先影响了此节点的输出值,然后影响了下一层所有的 δ(l+1)jδj(l+1)\delta_j^{(l+1)}。
(2)根据链式法则,此节点由输入到输出,其梯度需要乘以 g′(z(l)i)g′(zi(l))g'(z_i^{(l)})。
(3)然后根据多元函数的链式法则,由节点输出到下一层所有节点的输入,其梯度等于所有下一层节点的敏感度的加权和,权值即为对应的 w(l)jiwji(l)w_{ji}^{(l)}。
总结:
要求一个点的敏感度,只需要看这个点如果变化了,会影响到下一层的哪些点,然后累加上这些点的敏感度*权值。权值越大,下一个点的变化量就会越大,最后传播到最后一层的变化量就会越大,如同蝴蝶效应,因此对于此点的导数就越大,因此需要乘以权值,而不是除以。如果从这一层的输入到下一层的输入需要串联一个激活函数,则需要乘以这个激活函数的导数。
2、同理,可以分析W的求导公式∂J(θ)∂w(l)ij=δ(l+1)ia(l)j∂J(θ)∂wij(l)=δi(l+1)aj(l)\frac{\partial J(\theta)}{\partial w_{ij}^{(l)}}=\delta _i^{(l+1)}a_j^{(l)}:
w(l)ijwij(l)w_{ij}^{(l)} 的变化只会影响到下一层的第 i 个节点的输入值,且变化值会被放大 a(l)jaj(l)a_j^{(l)} 倍,因此为δ(l+1)ia(l)jδi(l+1)aj(l)\delta _i^{(l+1)}a_j^{(l)}。
3、同理,可以分析W的求导公式∂J(θ)∂b(l)i=δ(l+1)i∂J(θ)∂bi(l)=δi(l+1)\frac{\partial J(\theta)}{\partial b_i^{(l)}}=\delta _i^{(l+1)}:
b(l)ibi(l)b_i^{(l)} 的变化只会影响到下一层的第 i 个节点的输入值,且没有放大倍数,因为偏置的输入永远是1。

CNN的反向传播

由于CNN一般包含了多个(卷积层 −−-> 池化层)的组合,我们将分别对两种层的反向传播进行分析。

1、卷积层

在一个卷积层,前一层的特征图被多个卷积核所卷积,然后通过一个激活函数,最后组成了输出的特征图。每一个输出特征图可能是多个输入特征图的组合的卷积结果。因此,如果第 l−1" role="presentation" style="position: relative;">l−1l−1l-1 层经过卷积后到达第 lll 层,则前向传播过程为

xjl=f(∑i∈Mjxil−1∗kijl+bjl)" role="presentation">xlj=f(∑i∈Mjxl−1i∗klij+blj)xjl=f(∑i∈Mjxil−1∗kijl+bjl)

x_j^l=f(\sum_{i\in M_j}x_i^{l-1}* k_{ij}^l+b_j^l)
其中,
(1)fff 为激活函数。
(2)Mj" role="presentation" style="position: relative;">MjMjM_j 为第 jjj 个卷积核所作用的第 l−1" role="presentation" style="position: relative;">l−1l−1l-1 层的特征图的集合,集合大小即为第 lll 层第 j" role="presentation" style="position: relative;">jjj 个卷积核的卷积层数。
(3)xljxjlx_j^l 为第 lll 层第 j" role="presentation" style="position: relative;">jjj 通道的输出特征图(是一个矩阵)。
(4)klijkijlk_{ij}^l 为第 l−1l−1l-1 层到第 lll 层的第 j" role="presentation" style="position: relative;">jjj 个卷积核、且只取与第 l−1l−1l-1 层第 iii 个通道相连接的卷积层(也是一个矩阵)。
(5)bjl" role="presentation" style="position: relative;">bljbjlb_j^l 为第 l−1l−1l-1 层到第 lll 层的第 j" role="presentation" style="position: relative;">jjj 个卷积核的偏置。
(6)∗∗* 表示卷积作用。
注意,∑i∈Mjxil−1∗kijl" role="presentation" style="position: relative;">∑i∈Mjxl−1i∗klij∑i∈Mjxil−1∗kijl\sum_{i\in M_j}x_i^{l-1}* k_{ij}^l 的结果是一个矩阵,后面的加法表示矩阵上的每一个元素都加上bljbjlb_j^l,然后每一个元素被激活函数作用,最后仍然是一个矩阵。
对于卷积层的反向传播,根据上述反向传播公式的分析,很容易理解公式:

δl−1j(uv)=f′(ul−1j(uv))∑i∈AjB(δli)∗rot180(klji)δj(uv)l−1=f′(uj(uv)l−1)∑i∈AjB(δil)∗rot180(kjil)

\begin{align*} \delta_{j(uv)}^{l-1}&=f'(u_{j(uv)}^{l-1})\sum_{i\in A_j}B(\delta_{i}^l)*rot180(k_{ji}^l) \end{align*}
解释:
(1) δl−1j(uv)δj(uv)l−1\delta_{j(uv)}^{l-1}为第 l−1l−1l-1 层第 jjj 个通道第 u" role="presentation" style="position: relative;">uuu 行第 vvv 列的输入的梯度。
(2)uj(uv)l−1" role="presentation" style="position: relative;">ul−1j(uv)uj(uv)l−1u_{j(uv)}^{l-1} 为第 l−1l−1l-1 层第 jjj 个通道第 u" role="presentation" style="position: relative;">uuu 行第 vvv 列的输入。
(3)Aj" role="presentation" style="position: relative;">AjAjA_j 为卷积范围包括第 l−1l−1l-1 层第 jjj 个通道的卷积核的集合,集合大小不定。
(4)δil" role="presentation" style="position: relative;">δliδil\delta_i^l 为第 lll 层第 i" role="presentation" style="position: relative;">iii 个通道的输入的梯度。
(5) B(δli)B(δil)B(\delta_i^l) 为 δliδil\delta_i^l 的局部块,这个局部块里的每个位置的输入都是卷积得到的,卷积过程都与 ul−1j(uv)uj(uv)l−1u_{j(uv)}^{l-1} 有关。
(6) rot180(.)rot180(.)rot180(.) 表示将矩阵旋转180度,即既进行列翻转又进行行翻转。

∂J∂klij(uv)=δlj(uv)∗P(xl−1i)∂J∂kij(uv)l=δj(uv)l∗P(xil−1)

\frac{\partial J}{\partial k_{ij(uv)}^{l}}=\delta_{j(uv)}^{l}*P(x_i^{l-1})
解释:
(1) klij(uv)kij(uv)lk_{ij(uv)}^l 为第 l−1l−1l-1 层到第 lll 层的第 j" role="presentation" style="position: relative;">jjj 个卷积核中与第 l−1l−1l-1 层第 iii 个通道相连接的卷积层上的第 u" role="presentation" style="position: relative;">uuu 行第 vvv 列的值。
(2)δj(uv)l" role="presentation" style="position: relative;">δlj(uv)δj(uv)l\delta_{j(uv)}^{l} 为第 lll 层第 j" role="presentation" style="position: relative;">jjj 个通道第 uuu 行第 v" role="presentation" style="position: relative;">vvv 列的输入的梯度。
(3) xl−1ixil−1x_i^{l-1} 为第 l−1l−1l-1 层第 iii 通道的输出特征图。
(4)P(xil−1)" role="presentation" style="position: relative;">P(xl−1i)P(xil−1)P(x_i^{l-1}) 为 xl−1ixil−1x_i^{l-1} 的局部块,这个局部块中的每个元素都会在卷积过程中直接与 klij(uv)kij(uv)lk_{ij(uv)}^l 相乘。

∂J∂blj=∑u,v(δlj)uv∂J∂bjl=∑u,v(δjl)uv

\frac{\partial J}{\partial b_j^l}=\sum_{u,v}(\delta_j^l)_{uv}
解释:
(1) bljbjlb_j^l 为第 l−1l−1l-1 层到第 lll 层的第 j" role="presentation" style="position: relative;">jjj 个卷积核的偏置。
(2) δljδjl\delta_j^l 为第 lll 层第 j" role="presentation" style="position: relative;">jjj 个通道的输入的梯度。

2、池化层

如果对第 lll 层进行池化得到第 l+1" role="presentation" style="position: relative;">l+1l+1l+1 层,则前向传播过程为:

xl+1j=f(βl+1jdown(xlj)+bl+1j)xjl+1=f(βjl+1down(xjl)+bjl+1)

x_j^{l+1}=f(\beta_j^{l+1} down(x_j^{l})+b_j^{l+1})
其中:
(1) down(.)down(.)down(.) 是一个下采样方法。典型地,此方法会将每一个独立的 n*n 块中的元素进行相加,这样输出图像的长和宽都比原图小了 n 倍。
(2)每一个下采样之后的特征图都乘以了 ββ\beta 并加上偏置 bbb,且不同的特征层的乘子和偏置不同,用下标 j 区分。
反向传播公式为:

δjl=βjl+1(f′(ujl)∘up(δjl+1))" role="presentation">δlj=βl+1j(f′(ulj)∘up(δl+1j))δjl=βjl+1(f′(ujl)∘up(δjl+1))

\delta_j^l=\beta_j^{l+1}(f'(u_j^l)\circ up(\delta_j^{l+1}))
解释:
(1) δljδjl\delta_j^l 为第 lll 层第 j" role="presentation" style="position: relative;">jjj 个通道的输入的梯度,是一个矩阵。
(2) up(δl+1j)up(δjl+1)up(\delta_j^{l+1}) 为上采样操作,将每个元素在两个维度上都展开 n 次,n 为 down(.)down(.)down(.) 下采样时缩小的倍数。其中一种方法是所有展开的元素都与原元素相同,即 up(x)=x⊗1n×nup(x)=x⊗1n×nup(x)=x\otimes 1_{n\times n}。

∂J∂bl+1j=∑u,v(δl+1j)uv∂J∂bjl+1=∑u,v(δjl+1)uv

\frac{\partial J}{\partial b_j^{l+1}}=\sum_{u,v}(\delta_j^{l+1})_{uv}
解释:
(1) bl+1jbjl+1b_j^{l+1} 为下采样结果传递到第 l+1l+1l+1 层后第 jjj 个特征层需要乘以的因子。
(2)bjl+1" role="presentation" style="position: relative;">bl+1jbjl+1b_j^{l+1} 影响了 δl+1jδjl+1\delta_j^{l+1} 上的所有点,因此需要累加。

∂J∂βl+1j=∑u,v(δl+1j∘dl+1j)uv∂J∂βjl+1=∑u,v(δjl+1∘djl+1)uv

\frac{\partial J}{\partial \beta_j^{l+1}}=\sum_{u,v}(\delta_j^{l+1}\circ d_j^{l+1})_{uv}
解释:
(1) dl+1j=down(xlj)djl+1=down(xjl)d_j^{l+1}=down(x_j^l),为下采样结果。
(2) βl+1jβjl+1\beta_j^{l+1} 影响了 δl+1jδjl+1\delta_j^{l+1} 上的所有点,因此需要累加,且被下采样后的结果放大了,因此需要乘以下采样结果。

参考

[1] Bouvrie J. Notes on convolutional neural networks[J]. 2006.

CNN详解——反向传播过程相关推荐

  1. 卷积神经网络前向及反向传播过程数学解析

    卷积神经网络前向及反向传播过程数学解析 文章目录 <center>卷积神经网络前向及反向传播过程数学解析 1.卷积神经网络初印象 2.卷积神经网络性质 3.前向传播 3.1.卷积层层级间传 ...

  2. cnn卷积神经网络反向传播,cnn正向传播和反向传播

    如何对CNN网络的卷积层进行反向传播 在多分类中,CNN的输出层一般都是Softmax.RBF在我的接触中如果没有特殊情况的话应该是"径向基函数"(RadialBasisFunct ...

  3. 30.jvm.gc(GC之详解CMS收集过程和日志分析)

    30.jvm.gc(GC之详解CMS收集过程和日志分析) 30.1.话题引入 30.2.ParNew and CMS 30.3.日志 30.3.1.GC日志初体验 30.3.2.Minor GC 30 ...

  4. Open3D 区域生长分割:详解Python实现过程

    Open3D 区域生长分割:详解Python实现过程 Open3D是一个专业的开源三维计算机视觉库,支持针对点云数据进行多种类型算法处理及可视化.其中包括基于区域生长分割的算法,可以对点云数据进行自动 ...

  5. Android Studio 安装详解及安装过程中出现的问题解决方案

    Android Studio 安装详解及安装过程中出现的问题解决方案 一,Android Studio安装包下载, 首先到官网下载,就是去Android Studio中文社区官网下载你的平台需要的安装 ...

  6. 计算机开机过程 南桥,详解电脑开机过程

    详解电脑开机过程 1.首先给ATX电源加电,加电后,ATX电源开始输出待机工作电压(SB5V),接着实时时钟开始工作,向CMOS电路和开机电路发送32.768KHZ的实时时钟信号. 2.接着按下电源开 ...

  7. Windows系统Git安装教程(详解Git安装过程)

    Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: ...

  8. 梯度反向传播过程中,测试强行修改后的预测结果是否还会传递loss?

    在深度学习计算损失函数的过程中,我一直有这样一个问题,如果Label是1.0,而预测结果是0.0,则BCE损失中理论上计算出的结果是无穷大的(当然pytorch并不会报错,而是将损失上限设在了100. ...

  9. 卷积神经网络(CNN)详解与代码实现

    目录 1.应用场景 2.卷积神经网络结构 2.1 卷积(convelution) 2.2 Relu激活函数 2.3 池化(pool) 2.4 全连接(full connection) 2.5 损失函数 ...

  10. python基础代码库-CNN详解-基于python基础库实现的简单CNN

    CNN,即卷积神经网络,主要用于图像识别,分类.由输入层,卷积层,池化层,全连接层(Affline层),Softmax层叠加而成.卷积神经网络中还有一个非常重要的结构:过滤器,它作用于层与层之间(卷积 ...

最新文章

  1. iOS之UI--转场动画
  2. 六级单词pdf_雅思提高词汇量是背单词还是大量刷题
  3. 【LCT】遥远的国度(P3979)
  4. sqli-lab———writeup(11~17)
  5. 关于使用jquery修改hover伪标签的样式
  6. bash 函数内部变量_使用源命令将函数和变量导入Bash
  7. 小程序监听android返回键,微信小程序左上角返回按钮触发事件
  8. html清除视频缓存,html清除页面缓存
  9. windows测试模式
  10. 苍溪实验中学计算机等级考试,苍溪实验中学2021年招生录取分数线
  11. hive,skynet以及go语言
  12. 机械的东西学的难 还是计算机的难,最难学十大工科专业 不想累成狗就别去(高薪)...
  13. python基础:变量与数据类型
  14. matlab 安装教程 2018b
  15. 系统集成项目管理工程师考试大纲和复习知识点
  16. 大厂面试 | 蚂蚁金服前端岗三面真题!
  17. 软件测试 (4)Linux命令
  18. openssl 1.0.2 漏洞修复指南
  19. day10、2 - 小小综合实验升级
  20. http://nxlhero.blog.51cto.com/962631/1666250?plg_nld=1plg_uin=1plg_auth=1plg_nld=1plg_usr=1plg_...

热门文章

  1. numpy保存npy
  2. PostgreSQL/pgsql生成随机的姓名的函数
  3. 2021年UI设计培训面试问题及答案解析
  4. 小程序云开发实战:从零搭建科技爱好者周刊小程序
  5. 十大概念:每个软件工程师的必备
  6. 如何批量将 Txt 文本文档转换为 PDF 文档
  7. 关于免费域名和空间搭建个人网站——服务器篇
  8. 右手定则判断向量积的方向
  9. android studio keymap eclipse,android studio eclipse keymap theme 快捷键 主题风格设置
  10. 让闲置的免费邮箱资源创造更大的价值