四张图彻底搞懂CNN反向传播算法

阅读本文之前,请首先阅读之前讲述的全连接层的反向传播算法详细推导过程: 全连接反向传播算法。已经了解反向传播算法请自动忽略。

1. 卷积层的反向传播

直接上图:

假设输入为一张单通道图像 x x x,卷积核大小为 2 × 2 2\times 2 2×2,输出为 y y y。为了加速计算,首先将 x x x按卷积核滑动顺序依次展开,如上图所示。其中, x ^ \hat{x} x^中的红色框代表 x x x中的红色框展开后的结果,将 x x x依次按照此方式展开,可得 x ^ \hat{x} x^。同理可得 w ^ \hat{w} w^,然后通过矩阵相乘可得输出 y ^ \hat{y} y^ y ^ \hat{y} y^ y y y等价)。此时,已经将CNN转化为FC,与反向传播算法 完全一致,这里不再做详细介绍。

当有 N N N个样本,即batch=N时,前向与反向传播方式如下图所示:
在这里插入图片描述
其中,输入图像batch=3,使用2个 2 × 2 × 3 2\times 2\times 3 2×2×3的卷积核,输出两张图像,如图所示。红色框、黄色框代表的是卷积核以及使用该卷积核得到的输出图像 y y y。当输入图像为一个batch时, x 、 w x、w xw的转化方式如上图,首先将输入图像与卷积核分别按单通道图像展开,然后将展开后的矩阵在行方向级联。此时,已经将CNN转化为了FC,与反向传播算法 完全一致,这里不再做详细介绍。

2. Average pooling的反向传播

在这里插入图片描述
∂ J ∂ w \frac{\partial J}{\partial w} wJ不用求,因为 w w w为常数。 ∂ J ∂ x i j = Σ ∂ J ∂ x ^ i j \frac{\partial J}{\partial x_{ij}}=\Sigma \frac{\partial J}{\partial \hat{x}_{ij}} xijJ=Σx^ijJ

3. Max-pooling的反向传播

在这里插入图片描述
遍历 x ^ \hat{x} x^的每一行,找出此行最大值的索引 ( i , j ) (i,j) (i,j),然后将 ∂ J ∂ x ^ \frac{\partial J}{\partial \hat{x}} x^J中索引为 ( i , j ) (i,j) (i,j)的值设为 ∂ J ∂ y ^ \frac{\partial J}{\partial \hat{y}} y^J对应行的值,将此行其余列的值设为0,如上图所示红框所示。假设 x ^ \hat{x} x^中(1,1)处的值是第一行中最大的值,则将 ∂ J ∂ y 11 \frac{\partial J}{\partial y_{11}} y11J赋值给 ∂ J ∂ x ^ \frac{\partial J}{\partial \hat{x}} x^J中索引为 ( 1 , 1 ) (1,1) (1,1)的位置。最后计算: ∂ J ∂ x i j = Σ ∂ J ∂ x ^ i j \frac{\partial J}{\partial x_{ij}}=\Sigma \frac{\partial J}{\partial \hat{x}_{ij}} xijJ=Σx^ijJ

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值