首页 > 其他分享 >深度学习基础课:卷积层的后向传播推导

深度学习基础课:卷积层的后向传播推导

时间:2022-12-26 08:22:06浏览次数:57  
标签:frac 推导 卷积 dE da delta 基础课 dnet net

大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序

线上课程资料:

本节课录像回放1

加QQ群,获得ppt等资料,与群主交流讨论:106047770

本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章

本课程系列文章可进入索引查看:

深度学习基础课系列文章索引

目录

回顾相关课程内容

  • 卷积神经网络的局部连接和权重共享是指什么?
  • 卷积层的前向传播是如何计算的?
    image
  • 全连接层的后向传播算法是什么?
    答:先计算输出层的误差项,然后反向依次计算每层的误差项直到与输入层相连的层,最后根据每层的误差项和输入得到每层的梯度
  • 误差项的计算公式是什么?
    答:\(\delta_k=\frac{dE}{dnet_k}\)
  • 全连接层的后向传播是如何推导?
    image

为什么要学习本课

  • 如何推导卷积层的后向传播?

主问题:如何推导卷积层的后向传播?

  • 卷积层的后向传播算法有哪些步骤?
    答:
    1.已知下一层计算的误差项,反向依次计算这一层的误差项
    2.计算这一层中每个权重值的梯度
  • 与全连接层中隐藏层的后向传播算法的步骤一样吗?有什么区别?
    答:步骤跟隐藏层是一样的,但是每个步骤的计算方法都不一样,这是因为:
    “局部连接”使得第一步误差项的计算方法不一样;
    “权值共享”则使得第二步变为计算Filter中的每个权重值的梯度;
  • 下面分别讨论这两个步骤的实现

主问题:如何反向计算误差项?

  • 我们先来考虑步长为1、输入的深度为1、filter个数为1的最简单的情况。
  • 假设输入的大小为33,filter大小为22,按步长为1卷积,我们将得到2*2的feature map。如下图所示:
    image
  • 其中layer l-1为当前层(卷积层),layer l为下一层
  • 在这里,我们假设第l层中的每个误差项都已经算好,我们要做的是计算第l-1层每个神经元的误差项
  • 它的计算公式是什么:

\[\delta_{i,j}^{l-1}=? \\ \delta_{i,j}^{l-1}表示第l-1层第i行第j列的误差项 \]

答:

\[\begin{aligned} \delta_{i,j}^{l-1} &= \frac{dE}{dnet_{i,j}^{l-1}} \\ &= \frac{dE}{da_{i,j}^{l-1}}\frac{da_{i,j}^{l-1}}{dnet_{i,j}^{l-1}}\\ \end{aligned} \]

\[a_{i,j}^{l-1}表示第l-1层第i行第j列神经元的输出 \\ net_{i,j}^{l-1}表示第l-1层第i行第j列神经元的加权输入 \\ \]

  • 如何求\(\frac{dE}{da_{i,j}^{l-1}}\)?

    • 我们先来看几个特例,然后从中总结出一般性的规律:
      • 计算\(\frac{dE}{da_{1,1}^{l-1}}\)?
        答:
        \( 因为a_{1,1}^{l-1}只与net_{1,1}^l有关,且net_{1,1}^l = w_{1,1}a_{1,1}^{l-1} + w_{1,2}a_{1,2}^{l-1} + w_{2,1}a_{2,1}^{l-1} + w_{2,2}a_{2,2}^{l-1} + w_b \\ 所以\frac{dE}{da_{1,1}^{l-1}}=\frac{dE}{dnet_{1,1}^{l}}\frac{dnet_{1,1}^l}{da_{1,1}^{l-1}} = \delta_{1,1}^l w_{1,1} \)
      • 计算\(\frac{dE}{da_{1,2}^{l-1}}\)?
        答:\( 因为a_{1,2}^{l-1}与net_{1,1}^l, net_{1,2}^l有关,且\\ net_{1,1}^l = w_{1,1}a_{1,1}^{l-1} + w_{1,2}a_{1,2}^{l-1} + w_{2,1}a_{2,1}^{l-1} + w_{2,2}a_{2,2}^{l-1} + w_b \\ net_{1,2}^l = w_{1,1}a_{1,2}^{l-1} + w_{1,2}a_{1,3}^{l-1} + w_{2,1}a_{2,2}^{l-1} + w_{2,2}a_{2,3}^{l-1} + w_b \\ 所以\frac{dE}{da_{1,2}^{l-1}}=\frac{dE}{dnet_{1,1}^{l}}\frac{dnet_{1,1}^l}{da_{1,2}^{l-1}} + \frac{dE}{dnet_{1,2}^{l}}\frac{dnet_{1,2}^l}{da_{1,2}^{l-1}} \\ = \delta_{1,1}^l w_{1,2} + \delta_{1,2}^l w_{1,1} \)
      • 请总结出规律?
        答:\( 不难发现,计算\frac{dE}{da_{i,j}^{l-1}},相当于把第l层误差项的周围补一圈0, 再与180度翻转后的filter进行互相关操作,就能得到想要结果,如下图所示: \)
        image
        计算公式是什么?
        答:
        \( \frac{dE}{da^{l-1}} = cross(padding(\delta^l), rotate180(W)) \\ \)
  • 如何求\(\frac{da_{i,j}^{l-1}}{dnet_{i,j}^{l-1}}=?\)

答:

\[\because a_{i,j}^{l-1} = f(net_{i,j}^{l-1}) \\ \therefore\frac{da_{i,j}^{l-1}}{dnet_{i,j}^{l-1}}= f'(net_{i,j}^{l-1}) \]

  • 因此,我们得到了最终的公式:

\[\begin{aligned} \delta^{l-1} &= \frac{dE}{dnet^{l-1}} \\ &= \frac{dE}{da^{l-1}}\frac{da^{l-1}}{dnet^{l-1}} \\ &= cross(padding(\delta^l), rotate180(W)) \circ f'(net^{l-1}) \\ \end{aligned} \]

\[其中:\\ \delta^{l-1}, \delta^l, W, net^{l-1}都是矩阵\\ 符号\circ为element \, wise \, product,即将矩阵中每个对应元素相乘 \]

  • 下面我们来推导步长为S的情况
  • 我们来看看步长为2与步长为1的差别:
    image
  • 如何处理步长为2的情况?
    • 如何将其统一为步长为1的情况?
      答:我们可以看出,因为步长为2,得到的feature map跳过了步长为1时相应的部分。因此,当我们反向计算误差项时,我们可以对步长为S的sensitivity map相应的位置进行补0,将其『还原』成步长为1时的sensitivity map
  • 下面我们来推导深度为D和Filter个数为N的情况
  • 如果把每个深度看成一个结点,把互相关操作变成乘上权重,则深度为3、Filter个数为2的情况如下图所示:
    image
  • 第l-1层的d1影响了第l层的哪几个结点?
    答:影响了第l层的所有结点,包括第l层的d1,d2
  • 所以第l-1层的d1的误差项应该等于什么?
    答:\(= 第l层的d1的误差项与第一个Filter反向计算出的第l-1层的误差项 + 第l层的d2的误差项与第二个Filter反向计算出的第l-1层的误差项\)
  • 因此,可以将误差项计算公式改为什么?
    答:

\[\begin{aligned} \delta_d^{l-1} &= \sum_{n=0}^{N-1} cross(padding(\delta_n^l), rotate180(W_{d, n})) \circ f'(net^{l-1}) \\ \end{aligned} \]

\[其中:\\ d为深度序号,即第d层\\ n为Filter的序号,即第n个Filter\\ \]

结学

  • 如何反向计算误差项?

标签:frac,推导,卷积,dE,da,delta,基础课,dnet,net
From: https://www.cnblogs.com/chaogex/p/17004930.html

相关文章