深度学习-Batch normalization的理解
进行多次的数据处理后,可能会导致数据分布不均匀,不同特征值的重要程度不同,比如:
左图中w1特征影响较大,w2特征影响较小,所以再进入最中间椭圆后,w2方向几乎不怎么变动了,并且在椭圆的不同位置到达圆心的距离相差很大。而在右图中,圆上同圈内不同位置的点到达圆心的距离是相等的,w1和w2同等重要。
所以需要对数据进行归一化,比如normalization 归一化,将数据转换成(0,1)之间,还比如standardization 标准化,转换后的数据符合标准正态分布。这里讲的是Batch normalization。
Batch normalization可以认为是,将一组特征图中对应通道的特征子图取出来,求出每个通道的均值与方差,进而求出新的数据y(k):
总体过程如下:
首先,我们需要求得mini-batch里元素的均值:
接下来,求取mini-batch的方差:
对每个元素进行归一化,得到的数据符合均值为 0、方差为 1 的标准分布:
这种简单的标准化会存在一个问题,即可能会使得**函数的非线性能力失效,导致整个网络的表现能力降低,因此,为例克服这个问题,作者对每一个维度的标准化引入了一对参数gamma和beta,对标准化后的值进行变换和移动:
由于在全部训练集上进行Batch Normalization是不实际的,因此,作者提出了在mini-batch上进行Batch Normalization,记为一个batch大小为m的数据集,为了便于表示,将k进行省略,即第k个维度一个batch数据的表示为:
记Batch Normalization转换为: