欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

7.Batch Normalization批量归一化(李宏毅)

程序员文章站 2024-03-14 09:57:16
...

1.1数据缩放

7.Batch Normalization批量归一化(李宏毅)
不论是否使用Deep都会需要执行Feature Scaling,上图左来看,两个特征x1,x2x_1,x_2,在没有做特征缩放之前很明显的x2x_2对结果有相对性较大的影响(梯度较大),这也会造成整个成本函数如左下图般,这会造成模型不好收敛。但如果让两个特征有相等的值域的话,那得到的成本函数就会如上图左,不论你的起始点在那都可以一样效率的到达中心点,收敛速度也会更为快速。
最常见的是对数据的每一列分别用均值方差归一化。

1.2隐藏层

同理来看DeepLearning,Layer-2的input就是Layer-1的output ,如果对输入的特征需要做缩放,那对每一个Layer的输入是否也可以做相同的缩放?
7.Batch Normalization批量归一化(李宏毅)
通过Batch Normalization(BN)做Featuer Scaling,让它的均值、方差皆缩放至一个值域内,那对下一个Layer而言,它的Statistics就是固定而不会上下飘动,训练上可能就可以更加的容易,想像一下,后面的Layer根据前面的Layer的变化而变化,当后面的Layer变化完之后前面的Layer又变,一路延续性的一起变化就会造成过深的神经网路不好训练。
但要让Layer的Statistics固定是很困难的,不同于Input Data是固定不动,每一个Layer的Output都是一直变化的,因为模型参数是不断变化,因此我们可以利用BN来处理。
这么做的一个好处在于,它可以有效解决Internal Covariate Shift(内部协变量移位)的问题,过去解决这个问题的方式是利用较低的学习效率,但这也造成学习速度过慢。
注: Internal Covariate Shift的问题,上图为例,有四个人,每个人代表一个Layer,中间利用话筒来做讯息的传递,线直了代表沟通顺畅,观察左二的人,左手话筒高,右手话筒低,这时候左一的人跟他说,左手话筒低一点,右二的人跟他说,右手话筒高一点,然后左二照做就可以变下图那样,左手过低,右手过高,那就没有帮助了,因为左手低一点是建立在右手过高,而右手高一点是建立在左手过低。

1.2Batch Normalization(BN)

下面我们解释Batch Normalization(BN)批量归一化在训练,测试的时候是如何操作的?

1.针对训练时
7.Batch Normalization批量归一化(李宏毅)
BN可以看作在activation function的input或output,但论文较多看作在input,也就是在计算出zz之后就先经过BN再执行activation function,这么做的好处在于可以确保不会让值域落在微分值较小的地方,以Sigmoid为例,如果值域落在两端极值,那微分值太小,不好收敛。

1.BN在执行backpropogation(反向传播)的时候是会先经过μlayer,σlayer\mu-layer,\sigma-layer层,再回去zz,不过如果是利用framework的话只需要加入一个BN Layer就可以,有这个观念就可以了。
2.在操作BN的时候我们希望μσ\mu,\sigma所代表的是全体资料集的随机性,但是计算整个资料集的stochastic是非常耗费时间的一件事,而且权重的数值会不断改变,不可能每一次迭代之后就重新再计算整个资料集,因此在实作BN的时候我们只会以计算该Batch,这代表所使用的Batch Size必须要够大,这样子才有办法从Batch去估测整个资料集。

部份情况下也许不希望资料的分布均值为0,方差为1,这可以再加入γ,β\gamma,\beta来调控,即zi~=γzi~+β\tilde{z_i}=\gamma\odot\tilde{z_i}+\beta,虽然βμγσ\beta,\mu,\gamma,\sigma如果相同的话就产出的分布就是一致,但实质而言,μσ\mu,\sigma是受限于实际资料分布,但βγ\beta,\gamma却是独立存在,由神经网路自行决定要加多少的。

2.针对测试时
7.Batch Normalization批量归一化(李宏毅)
过程是一样的,zz依批量的μσ\mu,\sigma计算得到z~\tilde{z},再与βγ\beta,\gamma计算得到最后的从z^\hat{z}
但在测试过程中的一个问题:
训练过程可能是Batch,但测试的时候却可能是一笔资料,只有一笔资料是估不出μσ\mu,\sigma怎么办?
一种作法是在训练结束之后,参数已经确定不再变动更新,这时候估算整个资料集的μσ\mu,\sigma,但如果资料集过大或是online training,资料根本没有留存的情况下是无法这么执行的。
另一种作法是将过程中μσ的\mu,\sigma计算平均,但训练过程中的参数不断变化,得到的μσ\mu,\sigma差异过大,因此较能执行的作法是让训练结束前的区间有较大的权重,初始训练过程中的区间给予较小的权重,如RMSProp。
3.BN的优点
7.Batch Normalization批量归一化(李宏毅)
优点

 1.解决Internal Covariate Shift的问题:学习率不再只能设非常小的值
 2.有效解决geadient vanishing/exploding:确保Output都在0的附近(斜率较大的地方)
 3.模型受权重初始化的影响较小:当权重乘上k倍,均值、方差、z也都有k倍的影响, 分子分母皆有k倍影响就代表什么没有影响。
 4.有人说,BN可以减少overfitting的问题,有正规化的效果。
相关标签: 机器学习