[nlp] Batch Normalization(BN) 批量标准化

参考:https://www.cnblogs.com/guoyaohua/p/8724433.html

相关论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》 (通过减少 内部协变量移位 来加速深度网络训练)

机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。
BatchNorm: 通过批标准化,在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
DL问题:神经网络深度加深,训练困难,收敛更慢: ReLU激活函数,Residual Network(BN)本质上也是解释并从某个不同的角度来解决这个问题的。

一、“Internal Covariate Shift(内部协变量移位)”问题

Mini-Batch SGD : 相对于One Example SGD的两个优势:梯度更新方向更准确;并行计算速度快 。BatchNorm是基于Mini-Batch SGD的 , BN就能解决很多SGD的缺点比如调参麻烦。

**covariate shift:**在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate shift问题只发生在输入层。

BatchNorm的基本思想: 让每个隐层节点的激活输入分布固定,这样就避免了“Internal Covariate Shift”问题了。
在这里插入图片描述
二、批量标准化公式
通过批量标准化,得到均值为0,方差为1的正态分布:
在这里插入图片描述
这里t层某个神经元的x(k):不是指原始输入,就是说不是t-1层每个神经元的输出,而是t层这个神经元的线性激活x=WU+B,是激活后的输入

但是这样会导致网络表达能力下降,为了防止这一点,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作,这其实是变换的反操作:
在这里插入图片描述
BN流程:
在这里插入图片描述
三、Batch Norm好处
BatchNorm为什么NB呢,关键还是效果好。①不仅仅极大提升了训练速度,收敛过程大大加快;②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。总而言之,经过这么简单的变换,带来的好处多得很,这也是为何现在BN这么快流行起来的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章