美文网首页
Batch Normalization

Batch Normalization

作者: 西二旗小豌豆 | 来源:发表于2019-01-03 02:37 被阅读0次

Batch Normalization,顾名思义,批规范化,是深度学习中常用的一种训练优化方法。

BN 的目的

BN是为了解决covariate shift。 从字面上来看,就是相关变量漂移。在Google的论文"Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"里 ,提到每次SGD时,通过mini-batch来对相应的activation做规范化操作,从而可以固定每层输入信号的均值与方差

covariate shift 是什么呢,在统计机器学习有一个经典假设,就是“源空间与目标空间的数据分布一致” ,如果不一致,需要用一些办法来解决。covariate shift就是这样一个问题。令q_0(x) 是训练集样本的概率密度分布函数,q_1(x) 是训练集样本的概率密度分布函数。通过在训练集上进行训练,我们最终得到一个P(y| x, \theta) , 该函数由x 和 一组参数 \theta =\{\theta1,\theta2, .\theta3,....\}决定。在传统机器学习上,通常假设训练集和测试集独立同分布。当q_1(x) 不再等于 q_0(x) 时,我们称之为 covariate shift 。

由上面,我们易于看出,神经网络的确符合上面的定义。神经网络的多层输出,经过各网络层的变换,其每层的输出分布与输入分布是不一致的。然而它们所指向的都是同一个样本(即对于不同层的分布x_1x_2P(y|x_1) = P(y|x_2) , 条件概率是一致的,其边缘概率不一样)

解决梯度消失,梯度爆炸,或者网络的收敛速度很慢,可以加入BN, 加快训练速度,提升模型精度

BN的具体变换过程

  1. 具体过程
    下图表示得非常清楚。其中\gamma, \beta加入训练过程,学习得到。
    BN变换过程

之所以最后要把\gamma, \beta加入到计算中去,是因为前面减去均值,除以方差之后,把输出会限制在正态分布内,使网络的表达能力变弱。我理解,\gamma, \beta,是训练学习出来的均值和方差。BN,对不均一的数据进行归一化,用学习出来的\gamma, \beta 替换

  1. 如何训练

    加入BN之后还是链式求导的法则。训练过程如下图表示 BN训练过程

需要注意的是,在训练过程中,上述用到的均值和方差是通过移动平均法得到的。在测试过程中,用的是整个样本集的均值和方差。

如何使用BN

用在非线性变换之前,即在线性变换之后,激活函数之前

tensorflow接口

在tensorflow中使用BN

tf.contrib.layers.batch_norm(
inputs,
decay=0.999, 用来求滑动平均的decay系数。(new_variable=decay×old_variable+(1−decay)×old_variable)
center,   在归一化后是否乘以上面所说的$\gamma$
scale,     在归一化后是否加上上文所说的$\beta$**
epison,   上面公式中的$\epsilon$,主要为了防止除以0
updates_collections, 指定更新操作,一般为None
is_traing, 上文所说,训练与测试计算方法不一样
)

还有一些参数暂时未用到,此处不展开

相关文章

网友评论

      本文标题:Batch Normalization

      本文链接:https://www.haomeiwen.com/subject/wjqaaxtx.html