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

《RECURRENT BATCH NORMALIZATION》的更多相关文章

  1. 论文《Piexel Recurrent Nerual Network》总结

    论文<Piexel Recurrent Nerual Network>总结 论文:<Pixel Recurrent Nerual Network> 时间:2016 作者:Aar ...

  2. 《The Unreasonable Effectiveness of Recurrent Neural Networks》阅读笔记

    李飞飞徒弟Karpathy的著名博文The Unreasonable Effectiveness of Recurrent Neural Networks阐述了RNN(LSTM)的各种magic之处, ...

  3. 深度学习网络层之 Batch Normalization

    Batch Normalization Ioffe 和 Szegedy 在2015年<Batch Normalization: Accelerating Deep Network Trainin ...

  4. caffe︱深度学习参数调优杂记+caffe训练时的问题+dropout/batch Normalization

    一.深度学习中常用的调节参数 本节为笔者上课笔记(CDA深度学习实战课程第一期) 1.学习率 步长的选择:你走的距离长短,越短当然不会错过,但是耗时间.步长的选择比较麻烦.步长越小,越容易得到局部最优 ...

  5. 【深度学习】深入理解Batch Normalization批标准化

    这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出. Batch Normaliz ...

  6. 解读Batch Normalization

    原文转自:http://blog.csdn.net/shuzfan/article/details/50723877 本次所讲的内容为Batch Normalization,简称BN,来源于<B ...

  7. 深度学习之Batch Normalization

    在机器学习领域中,有一个重要的假设:独立同分布假设,也就是假设训练数据和测试数据是满足相同分布的,否则在训练集上学习到的模型在测试集上的表现会比较差.而在深层神经网络的训练中,当中间神经层的前一层参数 ...

  8. Feature Extractor[batch normalization]

    1 - 背景 摘要:因为随着前面层的参数的改变会导致后面层得到的输入数据的分布也会不断地改变,从而训练dnn变得麻烦.那么通过降低学习率和小心地参数初始化又会减慢训练过程,而且会使得具有饱和非线性模型 ...

  9. [转] 深入理解Batch Normalization批标准化

    转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 郭耀华's Blog 欲穷千里目,更上一层楼项目主页:https://github.com/gu ...

随机推荐

  1. Confluence 6 设置其他页面为你空间的主页

    在任何时候,如果你希望某一个页面称为你空间的主页,你可以非常容易的从 编辑空间细节(Edit Space Details)标签页中进行修改. 希望编辑空间的细节: 进入空间后,然后从边栏的底部选择 空 ...

  2. pytorch构建自己设计的层

    下面是如何自己构建一个层,分为包含自动反向求导和手动反向求导两种方式,后面会分别构建网络,对比一下结果对不对. -------------------------------------------- ...

  3. python面向对象之 类

    内容梗概: 1. 类的成员 2. 类的成员-变量 3. 类的成员-方法 4. 类的成员-属性 5. 私有 1.类的成员class 类名: 方法 def __init__(self, 参数1, 参数2. ...

  4. BigDecimal 类型数据比较大小

    public static void main( String[] args ) { BigDecimal a=new BigDecimal(-1); if(a.compareTo(BigDecima ...

  5. Highcharts 配置选项详细说明

    Highcharts 配置选项详细说明 Highcharts 提供大量的配置选项参数,您可以轻松定制符合用户要求的图表,本章节为大家详细介绍Highcharts 配置选项使用说明: 参数配置(属性+事 ...

  6. java前后向查找个人理解

    举一个最简单的栗子 这个前后说的是0宽所在的位置,是在:前还是后 http://www.sb.com 1.前向正向查找 (1) 如果用:.*(?=:) 首先(?=:)被称作0宽度断言,所谓0宽度应该是 ...

  7. 为什么要使用oath协议?

    一.如何查看用户是否登录? 通过cookie和session来查看用户是否登录. 如果cookie对应的session中保存了用户登录信息,则判定用户已登录 Jsessionid,也就是tomcat自 ...

  8. hdu多校1002 Balanced Sequence

    Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...

  9. for循环的字节码

    源代码: public class Wizard { private int age; private void forCycle() { for (int i = 0; i < 10; i++ ...

  10. Nodejs+mysql+Express: 一个简单的博客

    推荐网址: https://github.com/nswbmw/N-blog/blob/backup/book/%E7%AC%AC1%E7%AB%A0%20%E4%B8%80%E4%B8%AA%E7% ...