博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神经网络中使用Batch Normalization 解决梯度问题
阅读量:5126 次
发布时间:2019-06-13

本文共 479 字,大约阅读时间需要 1 分钟。

BN本质上解决的是反向传播过程中的梯度问题。

详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有:

h_l = w_l^Th_{l-1}

那么反向传播时便有:

\frac{\partial l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} . \frac{\partial h_l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} w_l

那么考虑从l层传到k层的情况,有:

\frac{\partial l}{\partial h_k} = \frac{\partial l}{\partial h_l} \prod _{i=k+1}^{l} w_i

上面这个 \prod_{i=k+1}^l w_i 便是问题所在。因为网络层很深,如果 w_i 大多小于1,那么传到这里的时候梯度会变得很小比如 0.9^{100} ;而如果 w_i 又大多大于1,那么传到这里的时候又会有梯度爆炸问题 比如1.1^{100} 。BN所做的就是解决这个梯度传播的问题,因为BN作用抹去了w的scale影响。

具体有:

h_l=BN(w_lh_{l-1}) = BN(\alpha w_lh_{l-1})

那么反向求导时便有了:

\frac{\partial h_l}{\partial h_{l-1}}=
\frac{\partial BN w_lh_{l-1}}{\partial h_{l-1}} =
\frac{\partial BN \alpha w_lh_{l-1}}{\partial h_{l-1}}

可以看到此时反向传播乘以的数不再和 w 的尺度相关,也就是说尽管我们在更新过程中改变了 w 的值,但是反向传播的梯度却不受影响。更进一步:

\frac{\partial h_l}{\partial w_l} = \frac{\partial BNw_lh_{l-1}}{\partial w_l} = \frac{1}{\alpha}.\frac{\partial BN \alpha w_l h_{l-1}}{\partial w_l}

即尺度较大的 w 将获得一个较小的梯度,在同等的学习速率下其获得的更新更少,这样使得整体 w 的更新更加稳健起来。

总结起来就是BN解决了反向传播过程中的梯度问题(梯度消失和爆炸),同时使得不同scale的 w 整体更新步调更一致。

 

转载于:https://www.cnblogs.com/mengxiangtiankongfenwailan/p/9895117.html

你可能感兴趣的文章
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>