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. mandatory and advisory文件锁(File Lock)

    http://blog.csdn.net/elfprincexu/article/details/43564425 文件锁(File Lock)是一种在特定的时间内只允许一个进程进行访问文件的机制,通 ...

  2. docker 基本操作

    # 常用命令   docker run 镜像   docker images 查看所有镜像   docke ps  查看运行中的容器 docker ps -a 列出所有容器     docker st ...

  3. const typedef 和指针的问题(这里必须初始化的才初始化了,不必须的则没有初始化)

    这里很容易搞混: tyepdef double dou;//这里是dou是double的别名 #include<iostream> using namespace std; int mai ...

  4. ubuntu server 启用mysql日志

    1.要启动mysql日志,你就要找到mysql 核心的文件my.cnf  (路径:/etc/mysql) 在命令窗口输入:cd /etc/mysql 在命令窗口输入:ls 你就可以看到my.cnf文件 ...

  5. Version Control System

    Version  Control System(版本控制系统),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型 ...

  6. sqlite3 删除数据

    cx = sqlite3.connect("c:/数据库地址") # 打开数据库cu = cx.cursor()# delete the rowcu.execute("d ...

  7. Leetcode 131

    class Solution { public: vector<vector<string>> partition(string s) { vector<string&g ...

  8. 26. Remove Duplicates from Sorted Array C++ 删除排序数组中的重复项

    https://leetcode.com/problems/remove-duplicates-from-sorted-array/ 双指针,注意初始时左右指针指向首元素! class Solutio ...

  9. docker 系列之 docker安装

    Docker支持以下的CentOS版本 CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. ...

  10. Oracle12c CDB架构图