《RECURRENT BATCH NORMALIZATION》

CNN 和RNN的normalization的引入

原文:https://blog.csdn.net/malefactor/article/details/51549771

  • CNN:

把一个FilterMap看成一个整体,可以想象成是一个Filter Map对应DNN隐层中的一个神经元,所以一个Filter Map的所有神经元共享一个Scale和Shift参数,Mini-Batch里m个实例的统计量均值和方差是在pq个神经元里共享,就是说从mp*q个激活里面算Filter Map全局的均值和方差,这体现了Filter Map的共享参数特性,当然在实际计算的时候每个神经元还是各算各的BN转换值,只不过采用的统计量和Scale,shift参数用的都是共享的同一套值而已。

  • RNN:

“Batch normalized recurrent neural networks”这个工作是最早尝试将BN引入RNN的,它构建了5层的RNN和LSTM,它的结论是:水平方向的BN对效果有损害作用,垂直方向BN能够加快参数收敛速度,但是相对基准无BN对照组实验看可能存在过拟合问题。但是这个过拟合是由于训练数据规模不够还是模型造成的并无结论。

“Deep speech 2: End-to-end speech recognition in english and mandarin.”这个工作也尝试将BN引入RNN,也得出了水平方向的BN不可行,垂直方向的BN对加快收敛速度和提升分类效果有帮助,这点和第一个工作结论一致。另外,新的结论是:在训练数据足够大的情况下,如果垂直方向网络深度不深的话,垂直方向的BN效果也会有损害作用,这个其实和工作一的结论基本一致,也说明了这个过拟合不是训练数据不够导致的,而是浅层模型加入BN效果不好。但是如果垂直方向深度足够深,那么加入BN无论是训练速度还是分类效果都获得了提高。

“Recurrent Batch Normalization”是最新的工作,16年4月份的论文。它的实验结果推翻了上面两个工作的结论。证明了水平方向BN是能够加快训练收敛速度以及同时提升模型泛化能力的。论文作者认为前面两个工作之所以BN在水平方向上不行,很可能主要是BN的Scale参数设置不太合理导致的,他们的结论是:Scale参数要足够小才能获得好的实验效果,如果太大会阻碍信息传播。

摘要

我们已经知道LSTM的参数重组(比如说weight normalization)给RNN带来了batch normalization的好处。然而过去的工作仅仅把batch normalization应用在RNN的输入层到隐含层的转化中,我们证明了去batch-normalize隐含层之间的转化是可能的并且是有益的,由此在时间步上减少了神经网络的internal covariate shift.

我们各种各样的一系列的问题上例如句子分类、语言模型和问答问题等在评估了我们提出的方法。我们的实验结果展示了我们的BN-LSTM可以稳定的获得更快的收敛和更好的泛化效果。

介绍

RNN结构,例如LSTM ( Hochreiter & Schmidhuber, 1997) 和GRU ( Cho et al., 2014) 最近已经在包括语音识别Amodei et al. (2015)、机器翻译 (Bahdanau et al., 2015)、图像视频字幕 (Xu et al., 2015; Yao et al., 2015)和最优模型等许多复杂序列问题上展现了先进的表现,但是这些都基于计算密集且训练成本高昂的复杂的网络。有效的RNN网络的优化因此成为了一个活跃的研究领域 (Pascanu et al., 2012; Martens & Sutskever, 2011; Ollivier, 2013).

大家都知道对于深度前馈神经网络,covariate shift (Shimodaira, 2000; Ioffe & Szegedy, 2015) 会降低训练的效率。Covariate shift 意思是模型输入分布的改变。这在神经网络前馈训练的过程中持续发生,具体来讲就是一层神经层的参数的改变会影响所有在他之上的神经层的输入的分布。结果就是更上面的神经层不断的去适应输入分布的变化且不能高效的去学习。这种ICS (Ioffe & Szegedy, 2015) 现象在和深度前馈网络类似的RNN网络中可能也扮演者非常重要的角色。

batch normalization是一个为了控制前馈神经网络活动最近提出的技术,从而去减少ICS现象。这个方法涉及去标准化进入每一神经层的激活输入,强化他们的平均值和方差以让这个激活对于底层参数的变化不敏感。这有效的将每一层神经层和其它神经层的参数解耦,进而又产生了一个更好环境优化的问题。的确,利用batch normalization进行训练的深度神经网络收敛更快且泛化能力更好。

尽管batch normalization已经被证明在前馈网络应用中可以明显提高训练速度并且有泛化的益处,但是据证明它很难应用在RNN结构上。它被发现在多层RNN结构上的使用有限制,在RNN结构上,规范化的方法被”垂直“应用在每RNN层的输入上,而不是”水平“的在每个时间步之间。RNN结构在时间方向有更深的维度,并且这样的batch normalization水平应用会更好。然而,Laurent et al. (2016)猜想认为由于重复的缩放导致的梯度爆炸,这种batch normalization的方式会损害训练。

我们的发现和这个假设背道而驰。我们证明了应用batch normalization于循环模型的隐含层之间的转换之内是可能的且更有效的。特别的,我们描述了一种涉及batch normalization的参数重组LSTM,并且证明了它更容易去优化且泛化更好。除此之外,我们实验分析了梯度反向传播并且展示了适当的batch normalization参数初始化对于避免梯度消失是非常重要的。我们在几个序列问题对我们的想法进行了评估,并且展示了我们的参数重组LSTM表现比基础的LSTM在各个任务上,在收敛时间和表现上稳定且更好。

Liao & Poggio (2016) 同时调查了在RNN网络中的batch normalization,只能应用于非常短的句子里(10步左右)。Ba et al. (2016) 独立的研究出一种batch normalization的变种,也可以应用在RNN网络中,并且得出了和我们方法相似的提高。

2. 前提条件

2.1 LSTM

LSTM网络是RNN网络更常用的一个类的一个例子,在这个论文中我们简要回顾一下。

2.2 BATCH NORMALIZATION

协变量变换(Shimodaira,2000)是机器学习中的一种现象,其中呈现给模型的特征在分布上发生变化。为了使学习在协变量偏移的情况下取得成功,必须调整模型的参数,不仅要学习手头的概念,还要适应输入的变化分布。在深度神经网络中,这个问题被描述作ICS,意思是某神经层参数的改变影响所有它上面的神经层的输入的分布变化。

批量标准化(Ioffe&Szegedy,2015)是最近提出的网络重新参数化,旨在减少内部协变量偏移。 它通过使用经验估计其平均值和标准偏差来标准化激活来实现这一目的。 然而,由于计算成本高的矩阵求逆,它不会使激活去相关。

3. BATCH-NORMALIZATION LSTM

上一篇:[Lintcode 3sum]三数之和(python,二分)


下一篇:手机SD卡损坏补救措施