关于batch normalization究竟做了什么?

昨天同事们突然讨论起了Batch Normalization的问题,大家从internal covariate shift的角度讨论了半天,结果突然间懵逼了,陷入了“道理我都懂,但是为什么会有效的?”的状态,这个问题不弄明白感觉彻夜难眠了。于是下班后赶紧又第N遍的研究了一下bn这个操作,得到了一些有解释性的答案,在这里记录和分享一下。

关于Internal Covariate Shift

相信很多关于bn的讲解应该都是来自于“internal covariat shift”的理论,那么到底什么是internal covariat shift,理论点讲:对于层间的信号,源空间和目标空间的条件概率一致,但边缘概率不同。通俗一点说,就是对于神经网络的每一层来讲,输入和输出经过了层内的计算,他们的分布发生了变化,但是特征所指示的样本标记是一样。(来自:知乎)并且这个变化会随着网络深度的增大而增大,这就是internal covariat shift 。这样不利于网络的收敛,于是batch normalization就是通过mini-batch来规范层的输入,固定每层的均值和方差。

Bach Normalization的操作

流程如下:

大概就是:

1. 对某个神经元求mini-batch的均值和方差

2. 用均值和方差对神经元在当前batch的分布做归一化到[0,1]

3. 学习参数γ和β对分布再做scale和shift操作

理论上讲这样子能够将分布的输入归一化到一个比较一致的空间内,避免“internal covariate shift”。

这样带来的好处:

1. 减轻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值