为什么Batch Norm有效?

最近思考得到的解答,将input进行norm标准化,等价于input进行了缩放,在进行反向传播修正时(以mini batch-SGD为例),计算梯度时,不会出现梯度爆炸和消失(因为在这之前对input进行了norm)。同时batchsize的选取很有讲究,batch太小,计算出的梯度下降方向震荡,或是出现前后更新方向相抵消。导致难以学习,或者无法收敛。太大会导致下降方向无太大变化,求解最优解依赖于学习率的设置,相比batch较小时会消耗更长的时间。

为什么保证方差的一致性对训练有益处?

思考《PRML》中提到的,机器学习算法的基础是独立同分布,在这个大前提下,我们所使用的数据集的分布是被假设为与数据集涉及的内容具有相同分布的(联想吉布斯采样,再联想蒙特卡洛方法),如若不满足独立同分布的假设,那么算法在应用时将会出现问题。现在考虑将大环境设置为深度学习数据集的分布,每次的batch被视为与数据集具有相同分布。此时在训练时由于方差相同,所以不会出现模型繁华问题。同理batchnorm中的将每层的input batch进行标准化,是指服从0均值,1方差的分布,亦能加速训练。

######################################################################################################

卷积神经网络中隐藏层输入为前一层的输出,因此,如果前一层输出的分布改变,那么后续隐藏层的权重矩阵与偏置值必将发生改变(重现训练已学习适应新输入的参数)。

Bacth Norm的使用限制了隐藏层的输入的变动幅度(限制了输入层的均值为0,方差为1),即使前一层的参数发生改变,在BN的作用下一层的输入仍未服从均值为0,方差为1的正太分布,在使用Sigmoid的做为激活函数时,保证了层与层之间梯度的传递。同时每层分布输出的类似,降低了层与层之间的耦合,增强了层与层之间的相互独立性(或者说减少了因前一层变动而影响该层参数的重新训练),因此能够提升网络的训练速度。

 

提升了层层之间的相互独立性,降低了前一层参数变动对后层的影响等价于减少了后层对前层的参数限制,使得参数初始化变得更加容易。

 

神经网络在batch norm提出的时候被以下问题所困扰:

  1. 梯度弥散
  2. 难以优化

两个问题是有关联的。

 

梯度弥散问题产生的原因:

      输入为非0均值分布式,经过神经元的连续矩阵乘法,会在深层出扩大这种现象,导致深层神经元的输入值过大亦或者过小,体现在sigmoid上就是,sigmoid函数的输入值朝着横轴两端正负无穷方向移动,此时sigmoid函数会出现梯度消失的情况。

      梯度为0(梯度对应着loss函数的jacob矩阵),此时优化算法无法使用梯度更新权重。

 

Relu激活函数的加入避免了在正半轴上的梯度消失,但是在使用Relu激活函数的神经网络中仍然需要使用batch norm,这又是为什么?

      GD是对神经网络的一阶泰勒展开,但是神经网络可能存在二阶Hessian矩阵病态,这是GD没办法解决的,而BN可以对这个问题有比较好的解决。

      神经网络的优化问题的目标是对权重矩阵进行求解,引入稀疏特征特征角度思考,如果对样本不做标准化处理直接放入神经网络中去求解W,对输入样本的分布敏感,无法学习到比较健壮的特征,虽然CNN具有很强的提取特征的能力,但是在不增加正则化项是仍会出现过拟合,学习到的特征提取能力不够泛化,导致神经网络对IID的数据泛化能力差。

      Hessian矩阵的病态会导致优化曲面的等高线上沿着hessian矩阵特征向量方向的曲率不同,并且对应特征向量方向上的特征值相差很大,此时曲面的等高线是曲线形状接近直线的椭圆,如若此时在某点的学习率选择的不够恰当,很容易导致震荡或者直接飞出优化空间。此时的学习率选择会面临比较大的困难。

 

 

batch norm的引入就是对input多了一次标准化处理,将input调整为0均值,浅显的理解为突出了某些重要的特征?(深层次的原因是这一操作可以输入的数据对应的矩阵的特征值进行放缩?),标准化的操作无形中假设了input image上的像素点分布符合正态分布,而标准化过程则是将假设服从的正态分布进行标准化。

此处联想将优化曲面的等高线由一个椭圆变成了正圆。将input image 进行了标准化后在一次前向传播过程中改变了该层输出的曲面形状。通过层层复合作用,以及层与层之间的传导,最终对输出的cost function上起到了影响。

在进行反向传播求解W的过程中,对局部某一点进行二阶展开时候,上述的传导引发的cost function变化,将会对学习率的调整起到帮助,加快网络训练的收敛速度。

试想,如果将网络看作多个单层网络的叠加,那么BatchNorm的引入对输出曲面形状做了标准化改动,一定会对W的Hessian矩阵有影响,相应的一定会影响Learning Rate的寻找难易程度。

所以BatchNorm其实是通过改变costFunction的形状入手,弱化了W的Hessian矩阵的病态的情况,使得学习率的选择更容易,从而加快训练效果。

同时,因为对hessian矩阵的病态进行了缓解,使得优化的困难程度降低,进而可以容忍稍微大一些的学习率。

同样的BatchNorm并没有特征稀疏性,神经网络中的特征稀疏性质依然主要由激活函数(ReLU)所提供。

BatchNorm的使用默认为每层输出的分布都符合正态分布,所以等价使用了L2正则化,所以batch norm有正则化的作用。

来此处联想,分割平面轻微转动分割效果变差,导致分割平面变差。(去中心化,与0均值化)

 

继续从优化角度思考可以得到无论是无监督的pre-train还是各种初始化方法都是选取了较好的优化方法的起始点。

 

同时在CV中第一层输入常常只减去均值而不除方差位的是0均值化,但又不丢失特征多样性。

 

为什么tensorboad可视化W时,总呈现类Guassian分布样子?

联想中心极限定理。

 

存疑部分:矩阵的条件数代表什么?与特征值,特征向量,和矩阵的秩有什么关系?

                  深入了解二阶优化算法。

 

 

 

 

 

 

 

 

     

 

 

 

 

 

 

        

 

 

你可能感兴趣的:(为什么Batch Norm有效?)