Batch Normalization

Batch Normalization(BN)

目的

将数值范围较为分散的数据集中在一个固定的小范围内,使得数据在进入激活函数层之后,激活函数可以对数据变化敏感(也就是希望数据不会过多的集中在饱和的区域).


解决的问题–Internal Covariate Shift

We refer to the change in the distributions of internal nodes of a deep network, in the course of training, as Internal Covariate Shift.

由于激活函数的形式是固定的(饱和区间等也是固定的),所以我们希望输入数据的分布最好的接近于特定的分布的。

位置

一般在全连接层和激活函数之间。结合实际问题分析.

算法

在这里插入图片描述

注意,最后一个公式,是一个反向操作!!!将 normalize 后的数据再扩展和平移. 原来这是为了让神经网络自己去学着使用和修改这个扩展参数 γ \gamma γ, 和 平移参数 β \beta β.


如何理解 γ \gamma γ, μ \mu μ?

γ − σ \gamma - \sigma γσ β − μ \beta - \mu βμ

y i ← x i γ σ B 2 + ϵ − γ μ B σ B 2 + ϵ + β y_{i} \gets x_{i}\frac{\gamma}{\sqrt{\sigma_{B}^{2}+\epsilon }}-\frac{\gamma \mu_{B}}{\sqrt{\sigma_{B}^{2}+\epsilon }}+\beta yixiσB2+ϵ γσB2+ϵ γμB+β

γ ← σ B \gamma \gets \sigma_{B} γσB, β ← μ B \beta \gets \mu_{B} βμB时, y i ← x i y_{i} \gets x_{i} yixi, 此时相当于没有batch normalization.

γ ← 1 \gamma \gets 1 γ1, β ← 0 \beta \gets 0 β0时, y i ← x i ^ y_{i} \gets \hat{x_{i}} yixi^, 此时相当于只用Standardization.


为什么要用scale and shift?

BN其实也是一个通过反向传播,找到最优参数的过程. 从上面的描述可以发现 γ , β \gamma,\beta γ,β取不同参数包含了两种特殊的情况. 因为符合标准正态分布的输入不一定对于网络来说是最优的,通过网络最终的loss function结合最终的取值可以找到最适合网络的参数.


参数的传播以及更新

前向传播:就是上的算法流程.

反向传播:凡是对网络的损失函数产生影响的变量都需要用损失函数对其求偏导.
在这里插入图片描述


μ B , σ B \mu_{B},\sigma_{B} μB,σB为什么也是参数?

由于每次输入网络的batch不同,所以每次求得的 μ , σ \mu,\sigma μ,σ也不同,在测试集中使用的 μ , σ \mu,\sigma μ,σ是根据前面几组取平均得到.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tx5zWvJq-1626098157813)(../../../../AppData/Roaming/Typora/typora-user-images/image-20210712215003267.png)]

优点

使用Batch Normalization,可以获得如下好处,

  • 可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度。
  • 可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。
  • 对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差σσ也会放缩同样的倍数,相除抵消。
  • 对权重的尺度不再敏感,理由同上,尺度统一由γγ参数控制,在训练中决定。
  • 深层网络可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失。
  • Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合

参考

代码

参考1

参考2

参考3

Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值