Lecture 5 -- Batch Normalization

1. Batch Normalization的作用


Batch Normalization可以帮助使error surface不那么崎岖...

例如上图,x1的值比较小,当w1发生微小的变化时,损失L变化也会很小;而x2的值比较大,当w2发生微小的变化时,损失L变化会比较大;

这样就会造成error surfacew1w2两个方向上的陡峭程度有很大的差异,不利于训练的进行;

Batch Normalization就可以帮助我们将error surface在各个维度上的斜率差异变小,解决的方法是将特征x1x2的大小变换到同一个范围内

 

 

2. Batch Normalization的具体做法


Batch Normalization是将每一个特征进行Feature Normalization,如上图,每一列代表一个样本。

同样的,不只是在原始特征上可以做批归一化,在神经网络隐藏层上也可以做批归一化,可以在激活函数前,也可以在激活函数后

通常情况下,如果激活函数使用的是sigmoid的话,批归一化会用在激活函数前

因为这样的话可以将隐藏层的特征值控制在0左右,而在0左右sigmoid函数的斜率是比较大的,有利于更好的更新参数。

实际上,Batch Normalization在对每个Batch的特征进行处理时,并不是将所有特征的特征值都控制在0上下,而是每一个特征都有自己的均值γ和标准差β

γ通常初始化为全1的向量,β初始化为全0的向量,保证一开始在神经网络进行训练时所有的特征控制在相同的范围内。

 

 

3. Batch Normalization在测试集上怎么用?


在实际操作中,我们的测试集通常不总是有一个Batch的数据,甚至有时候我们可能只有一个测试样本。

在神经网络前向传播时,对于中间某一个隐藏层,处理每一个Batch时我们都会计算一个均值和标准差;

在测试时,该隐藏层使用的均值和标准差是固定的,是训练时每一个Batch数据的均值和标准差的移动平均值,如上图。在pytorch中,p0.1

课件:Batch Normalization (ntu.edu.tw)

 

 


END

posted @ 2023-08-05 21:09  Peg_Wu  阅读(14)  评论(0编辑  收藏  举报