Batch Normalization & Layer Normalization整理(代码实现下载)

以下为layer normalisation文章解析:

摘要

训练目前性能最好的深度神经网络计算代价高昂. 一种减少训练时间的方法是规范化神经元的激活值. 近期引入的批规范化(batch normalisation)技术对一个训练样本批量集使用了求和的输入分布来计算均值和方差,然后用这两个来规范化那个神经元在每个训练样本的求和输入. 这个方法显著减少了前驱神经网络的训练时间. 然而,批规范化的效果依赖于 minibatch 的大小,而且对于循环神经网络 RNN 无法下手. 本文将批规范化转换成层规范化——通过计算在一个训练样本上的一层上的神经元的求和输入的均值和方差.

像批规范化那样,我们同样也给每个神经元自身的适应偏差 bias 和增益 gain,这两个东西在规范化后非线性变换前使用. 和批规范化不同的是,层规范化在训练和测试时执行同样的计算. 另外也能够通过在每个时间步分别计算规范化统计信息从而直接应用在循环神经网络上. 实验结果表明,层规范化和之前的技术相比可以显著降低训练时间.

1 引言

主要介绍了一下历史,以及层规范化在 RNN 上的表现好过其他技术。

2 背景

Batch Normalization & Layer Normalization整理(代码实现下载)_第1张图片

这里虽然看起来吓人,但使用的时候用的却是从当前的 mini-batch 中采样出来的实验样本.

3 层规范化

Batch Normalization & Layer Normalization整理(代码实现下载)_第2张图片

(2) 和 (3) 中的不同很容易看出,在层规范化中,所有的隐藏元共享同样的规范化项 μ 和 σ,不同的训练样本就会有不同的规范化项.

3.1 层规范化的循环神经网络

Batch Normalization & Layer Normalization整理(代码实现下载)_第3张图片

标准的 RNN 中,求和输入的平均量度在每个时间步会增长或者缩小,从而产生爆炸或者消逝的梯度现象. 在层规范化 RNN 中,规范化项会使得模型对所有求和输入的重整化操作保持不变,这可以得到更加稳定的隐藏层之间的动力特性.

4 相关工作

批规范化技术此前已经被扩展到了 RNN 上 [Laurent et al., 2015,Amodei et al., 2015, Cooijmans et al., 2016]. [Cooijmans et al., 2016] 的工作说明循环批规范化的最佳表现是通过保持每个时间步的独立规范化统计量达成的. 作者展示了初始化循环批规范化层中增益 gain 参数为 0.1 在模型最终的性能上起到了重要的作用. 我们的工作也和权重规范化关系紧密[Salimans and Kingma, 2016]. 在权重规范化中,并没有使用方差,而是采用了输入权重的 L2 范数来对求和输入进行规范化进入神经元. 使用期望统计量应用权重规范化或者批规范化都等价于对原始前驱神经网络进行了一个不同的参数化. 在 ReLU 网络中的重参数化技术在路径规范化 SGD [Neyshabur et al., 2015] 有了探讨. 我们的层规范化技术不是一个重参数化方法. 所以它和其他方法相比有着独特的不变性,这个在后面再详解.

5 分析

这里是对不同规范化方法的不变形的比对.

5.1 权重和数据变换的不变性

层规范化和批规范化技术及权重规范化技术相关. 尽管他们的规范化使用的标量计算方式不同,但是这些方法可以归类成规范化求和输入 ai 通过两个标量 μ 和 σ. 同样还要在规范化之后对每个神经元学习适应偏差 b 和增益 g


注意,对层规范化和批规范化,μ 和 σ 通过方程 (2) 和 (3) 计算得出. 在权重规范化中, μ 为 0 和 σ = ||w||2.

Batch Normalization & Layer Normalization整理(代码实现下载)_第4张图片


从上表 1 中我们可以看到不同的规范化方法的不变性情况.

Batch Normalization & Layer Normalization整理(代码实现下载)_第5张图片

5.2 学习中的参数空间几何特性

前面讲完了模型预测在重中心定位和重比例下的不变性. 然而,学习在不同的参数化下表现差别很大,甚至是那些有着相同基本函数的模型. 本节通过参数空间的几何和流形来分析学习行为. 我们说明规范化标量 σ 可以隐式地降低学习率,让学习更加稳定.

5.2.1 黎曼度量

在统计模型中可学习的参数会形成一个平滑的流形,包含了模型所有可能的输入-输出关系. 对于输出是一个概率分布的模型来说,一种自然度量两个点在流形上分隔(seperation) 的方法就是他们模型输出分布的 Kullback-Leibler 散度. 在 KL 散度度量下,参数空间就是一个黎曼流形.

黎曼流形的曲率由黎曼度量完全刻画,其二次形式表示为 ds2. 这是在参数空间的点处切线空间的无穷小距离. 直觉上说,它衡量了在参数空间中模型输出沿着一个切线方向的变动. KL 下黎曼度量此前有过研究[Amari,1998],并证明可以在二阶泰勒展开下使用 Fisher 信息矩阵很好地近似:


Batch Normalization & Layer Normalization整理(代码实现下载)_第6张图片
Batch Normalization & Layer Normalization整理(代码实现下载)_第7张图片
Batch Normalization & Layer Normalization整理(代码实现下载)_第8张图片
Batch Normalization & Layer Normalization整理(代码实现下载)_第9张图片
Batch Normalization & Layer Normalization整理(代码实现下载)_第10张图片

实验部分没有加上,主要是各种 RNN 上超过之前的方法.

Batch Normalization参考:http://blog.csdn.net/hjimce/article/details/50866313;http://blog.csdn.net/shuzfan/article/details/50723877;http://blog.csdn.net/u012816943/article/details/51691868

参考下面的示意图:
Batch Normalization & Layer Normalization整理(代码实现下载)_第11张图片
batch是“竖”着来的,各个维度做归一化,所以与batch size有关系。
layer是“横”着来的,对一个样本,不同的神经元neuron间做归一化。
上图显示了同一层的神经元的情况。假设这个mini-batch一共有N个样本,则Batch Normalization是对每一个维度进行归一。而Layer Normalization对于单个的样本就可以处理。
layer normalisation用在RNN(LSTM、GRU)的实现参考:http://r2rt.com/implementing-batch-normalization-in-tensorflow.html;http://stackoverflow.com/questions/33949786/how-could-i-use-batch-normalization-in-tensorflow;https://github.com/OlavHN/bnlstm

batch/layer normalization in Tensorflow实现代码下载地址http://download.csdn.net/download/xwd18280820053/9818719


参考来源:http://blog.csdn.net/lightty/article/details/52033641

https://www.zhihu.com/question/48820040

http://www.jianshu.com/p/c48feb1282f5


你可能感兴趣的:(python,算法,machine,learning,deep,learning)