对BN(batch normlization)层的理解

前言:BN层作为当前应用十分广泛的一中抗过拟合、加速模型收敛的手段,效果可以说是十分好用,但是究其原因或者说理解,很多人也是从不同方面有所解释,这篇就尽量包罗的多一些,加上一些自己的理解。有时间就补一点的样子,慢慢写

BN层简述:

BN层是神经网络里的一层,如同卷积、池化层等等一样,同样有数据的输入、输出,同时参与正向传播和反向传播。但是不太同于其他层的特点是,BN更像是其他类型层的一种数据的预处理。大多数用在卷积层之后,在进行卷积或者其他操作之后,使用BN层将数据进行规整后,其输出作为下一层的输入。
具体操作:

正向传播:

对BN(batch normlization)层的理解_第1张图片
对于欲进入下一个卷积层的数据,先在BN层中正向传播过程如下:
其具体的操作可简单解释为:

  • 将一个mini-batch(批量梯度下降的一个batch单位)求平均值和方差;
  • 然后按照求出的平均值和方差将数据变换为方差为1,均值为0。
  • 通过乘以两个可学习的参数,再将数据分布进行一定程度还原(还原成整体分布特征)

反向传播

在数据流通过BN层进行反向传播的时候,需要用到的偏导数和可学习的参数更新方式如下:
对BN(batch normlization)层的理解_第2张图片
比较简单,就是需要用到的偏导数公式。

BN层理解:

为了抑制Internal covariate shift。

  1. internal covariate
    shift:指的是在批量梯度下降的学习方式中,每一个mini-batch的特征有太多自身的分布特点,虽然在一定程度上带有全局数据的分布特征(作为全局数据的一种抽样);但是由于mini-batch比全局数据在量上差非常多,所以其独属于自身的分布特征就十分明显。所以每个mini-batch之间的分布差别也就会越来越明显,这种每次输入的batch分布不同的是现象,称之为Internal
    covariate shift。 基本假设:对于一个子网络部分的输入,固定的分布有利于网络的学习,所以消除Internal
    covariate shift对于网络训练的影响就十分重要了。
  2. 基本思想:参照LeCun提出的,如果input的数据经过白化(whited)操作后可以实现分布固定同时加速网络收敛的思路,提出BN的操作。
    解决反向传播中的梯度问题。
  3. 鄙人觉得,所有对于说BN能解决反向传播中的梯度问题都是不严谨的,因为BN不能绕过逐层传播的事实,最多可能只是缓解梯度问题。真正完全解决梯度问题的应该还是res-net结构。
    本贴暂结,坐等打脸。

解决反向传播中的梯度问题。

  1. 鄙人觉得,所有对于说BN能解决反向传播中的梯度问题都是不严谨的,因为BN不能绕过逐层传播的事实,最多可能只是缓解梯度问题。真正完全解决梯度问题的应该还是res-net结构。

本贴暂结,坐等打脸。

Why:

Internal Covariate Shift:网络中间层在训练过程中,输入数据分布的改变。训练过程中参数会不断的更新,前面层训练参数的更新将导致后面层输入数据分布的变化。

因此,模型参数要不断去适应这种随迭代变化的输入分布,这回导致模型参数学习很慢。如果能使每层的输入分布固定(如均值为0,方差为1的高斯分布),那么模型参数的学习将会更加容易。

What:

将每层输入的分布做归一化的操作,叫做Batch Normolization(批归一化)

输入——>计算mini-batch的均值和方差——>归一化——>线性变换——>输出

对BN(batch normlization)层的理解_第3张图片

Results:

输入数据样本空间中的分布将更加均匀和固定,模型参数的学习也会变得更加容易,显著加速模型训练的收敛速度。
限制了在前层的参数的更新,减少了输入值改变的问题,使输出值更加稳定,因此有轻微的正则化的效果。
给隐藏层增加了噪音,有一定的正则化效果。

How:

卷积神经网络经过卷积后得到的是一系列的特征图,如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵(m,f,p,q),m为min-batch sizes,f为特征图个数,p、q分别为特征图的宽高。在cnn中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalizationmini-batch size 的大小就是:mpq,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。

你可能感兴趣的:(python框架)