《深度学习之图像识别核心技术与案例实战》—2.2.4 归一化方法
2.2.4 归一化方法
为取得较理想的输出结果,机器学习中输入模型的数据一般希望能满足独立同分布(i.i.d)的假设条件。但对于神经网络而言,层级的网络结构使得底层的参数更新会对高层的输入分布产生很大的影响,故该假设条件很难满足。对此,研究者们在神经网络中引入归一化(normalization)方法,实际上是通过采取不同的变换方式使得各层的输入数据近似满足独立同分布假设条件,并使各层输出限制在一定范围内。
1.batch normalization(批次归一化)
目前一般采用Mini-batch Gradient Decent对深度学习进行优化,这种方法把数据分为若干组,按组来更新参数,一组中的数据共同决定本次梯度的方向,下降时减少随机性。另一方面因为批的样本数与整个数据集相比小很多,计算量也下降了很多。
batch normalization是常用的数据归一化方法,常用在卷积层后,可以用于重新调整数据分布。
假设神经网络某层一个batch的输入为X=[x0,x1,…,xn],其中每个xi为一个样本,n为batch size也就是样本的数量。
首先,需要求得mini-batch里元素的均值:
(2.25)
其次,求出mini-batch的方差:
(2.26)
这样就可以对每个元素进行归一化,其中ε是防止分母为0的一个常数:
(2.27)
实际使用的时候还会配置尺度缩放和偏移操作,并且相关参数是基于具体的任务学习得来。
2.layer normalization(层归一化)
batch normalization方法虽然应用广泛,但在实际应用时,需要计算并保存该层神经网络batch的均值和方差等信息。对于一个深度固定的神经网络(如DNN、CNN)非常适用,但对于深度不固定的RNN而言,不同的时态下需要保存不同的静态特征,可能存在一个特殊sequence比其他sequence长很多,这样训练时计算很麻烦。
与batch normalization方法仅针对单个神经元不同,layer normalization方法考虑神经网络中一层的信息,计算该层输入的平均值和方差作为规范化标准,对该层的所有输入施行同一个规范化操作,不受mini-batch均值和方差的影响,可用于mini-batch较小时的场景、***络结构和RNN。此外,由于无须保存mini-batch的均值和方差,节省了存储空间。
layer normalization中同一层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差。对于相似度相差较大的特征,layer normalization方法会降低模型的表示能力,在此情况下,选择batch normalization方法更优。
3.weight normalization(权重归一化)
batch normalization和layer normalization方法将规范化应用于输入数据x,weight normalization方法则是对权重进行规范化。即将权重向量分解为权重大小和方向两部分,不依赖于输入数据的分布,故可应用于mini-batch较小的情景且可用于***络结构。此外,weight normalization方法还避免了layer normalization方法中对每一层使用同一个规范化公式的不足。
batch normalization和layer normalization方法属于将特征规范化,weight normalization方法是将参数规范化。3种规范化方式尽管对输入数据的尺度化(scale)来源不同,但其本质上都实现了数据的规范化操作。
4.group normalization(组归一化)
group normalization是一种新的归一化方式,在某些情况下可以替代batch normalization。该方法主要是针对后者在一个批次中样本少时表现效果差而提出的。Group normalization根据通道进行分组,然后在每个组内做归一化,计算其均值与方差,从而就不受批次中样本数量的约束。随着批次中样本数量的减少,group normalization方法的表现基本不受影响,而batch normalization的性能却越来越差。
- 点赞
- 收藏
- 关注作者
评论(0)