Batch Normalization(批量归一化)
Batch Normalization
内部协变量偏移(ICS)
在神经网络的训练过程中,由于隐藏层参数的更新,同分布不同批次的数据,进入网络同一层后的输出分布发生变化,这种现象称之为内部协变量偏移(ICS)。
引起的问题
-
收敛速度慢,学习不稳定
一方面,ICS现象使网络的每一层需要不断适应输入数据的分布变化,网络刚适应学习这种分布,下一个批次又需要学习另一种分布。这会使得学习过程不稳定,导致收敛速度降低。另一方面,由于同一批数据中不同样本点的分布可能不同等原因,为保证训练的稳定性和收敛性,在实际应用中往往会采用较小的学习率,防止参数更新过快,从而导致收敛速度降低
-
梯度消失问题
经过网络前几层的变换,可能使得后几层的输入数据过大或过小,从而掉进激活函数(Tanh、Sigmoid)的饱和区。在饱和区梯度变化很不明显,会产生梯度消失问题,导致学习过程停止。
为了降低ICS所带来的负面影响,在训练过程中一般会采用非饱和型激活函数(ReLU)、精细的网络参数初始化,保守的学习率,但这不仅会使得网络的学习速度太慢,还会使得最终效果特别依赖于网络的初始化。
批量归一化(Batch Normalization)
批量归一化可以看作在每一层输入和上一层输出之间加入了一个新的计算层,对数据的分布进行额外的约束。
核心即为这一公式:
-
k:表示数据的第k维,BN在一个批次数据的各个维度上独立进行;
-
x(k):输入数据;
-
y(k):BN后的输出数据;
-
u(k):输入数据当前batch的均值;
-
o(k):输入数据当前batch的标准差;
-
B(k):可学习的平移参数;
-
r(k):可学习的缩放参数;
-
e:防止分母为0的一个小量
注:归一化和标准化的区别
- 标准化:将数据变为均值为0,方差为1的分布;
- 归一化:将一列数据变化到某个固定区间;
批量归一化相当于在标准化的基础上利用参数B和r进一步修正分布
参数B和r的作用
-
保留网络各层在训练过程中的学习成果,使BN模块具有自我关闭能力;
-
保证激活单元的非线性表达能力
-
引入噪音,防止过拟合
引入参数适当地增加噪音,有助于增加鲁棒性,防止过拟合
预测时怎么使用BN
我们在训练时对于每个batch可以计算出相应的均值和标准差,对这些batch对应的均值和标准差进行加权求和即可。
BN放在哪
- 放在激活函数之前。可以保证激活单元的非线性表达能力,缓解梯度消失问题,还可以有效避免BN破坏非线性特征的分布
- 放在激活函数之后。当使用ReLu作为激活函数时,它不存在像Sigmoid、Tanh一样的饱和区问题。避免数据在激活函数之前被转化成相似的模式,从而使得非线性特征分布趋于同化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理