batchnomal_反向传播之七:BatchNormal层的反向传播

本文详细探讨了BatchNormalization层在反向传播过程中的计算,包括前向传播的步骤、反向传播的难点以及如何解决这些难点。通过代码实现,验证了BatchNormalization层在反向传播中的正确性,同时对比了PyTorch的实现结果,加深理解。
摘要由CSDN通过智能技术生成

最好的学习方法就是把内容给其他人讲明白。

如果你看了我的文章感觉一头雾水,那是因为我还没学透。

BatchNormal的有效性、重要性就无需多言,起码是残差神经网络(ResNet)至关重要的一层,没有BatchNormal层,别说上千层的网络,就算几十层应该也很困难吧。

BatchNormal的前向传播如图:

一个数据集有m个数据组成:

equation?tex=X+%3D%5C%7B+x_1%2Cx_2%2C%5Cdots%2Cx_m+%5C%7D ,输出为

equation?tex=Y%3D%5C%7By_1%2Cy_2%2C%5Cdots%2Cy_m%5C%7D

整个过程需要学习的量只有两个:

equation?tex=%5Cbeta+%E3%80%81+%5Cgamma+ .

equation?tex=%E8%80%8C%5Cepsilon 只是为了防止分母为零取得一个正的小数,可以不用学习,不过后面还是给出了它的导数公式,可以试验参与学习的效果。

前两个量的反向传播很简单:

(1)

equation?tex=%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+%5Cbeta%7D%3D%5Csum_i%5Em%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D%5Cfrac%7B%5Cpartial+y_i%7D%7B%5Cpartial+%5Cbeta%7D%3D%5Csum_i%5En%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D+%5Ccdot+1%3D%5Csum_i%5Em%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D

(2)

equation?tex=%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+%5Cgamma%7D%3D%5Csum_i%5Em%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D%5Cfrac%7B%5Cpartial+y_i%7D%7B%5Cpartial+%5Cgamma%7D%3D%5Csum_i%5Em%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D+%2A+%5Chat%7Bx%7D_i

由于是讨论反向传播,所以

equation?tex=%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D 是从上一层传下来的已知量,这里的C表示代价函数Coss(或者叫损失函数Loss)。

麻烦的地方在于计算X的梯度,要把这一层的梯度向回传播,所以需要计算

equation?tex=%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+X%7D

(3)

equation?tex=%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+%5Chat%7Bx%7D_i%7D%3D%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D%5Cfrac%7B%5Cpartial+y_i%7D%7B%5Cpartial++%5Chat%7Bx%7D_i%7D%3D%5Cfrac%7B%5Cpartial+C%7D%7B%5Cpartial+y_i%7D+%5Ccdot+%5Cgamma

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值