训练深度神经网络非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化,图层输入分布的变化带来了一个问题,因为图层需要不断适应新的分布,因此训练变得复杂,随着网络变得更深,网络参数的细微变化也会放大。由于要求较低的学习率和仔细的参数初始化,这减慢了训练速度,并且众所周知,训练具有饱和非线性的模型非常困难。我们将此现象称为内部协变量偏移,并通过归一化层输入来解决该问题。

Batch Normalization通过将归一化作为模型体系结构的一部分并为每个训练小批量执行归一化来汲取其优势。批处理规范化使我们可以使用更高的学习率,而对初始化则不必那么小心。它还可以充当正则化器,在某些情况下,不需要Dropout,BN朝着减少内部协变量偏移迈出了一步,并且在此过程中极大地加速了深度神经网络的训练。它通过固定图层输入的均值和方差的归一化步骤来完成此操作。

BN应用于最先进的图像分类模型,以较少的14倍训练步骤即可达到相同的精度,并且在很大程度上击败了原始模型。使用批归一化网络的模型在 ImageNet分类中达到4.9%的top-5验证错误(和4.8%的测试错误),超过了人类评分者的准确性。

Batch-Normalization实现

最开始的想法是通过白化来实现分布归一化,然而考虑到白化需要在梯度下降外计算协方差矩阵,因此白化层将严重影响计算量。后来选择了在mini-batch中使用如下公式实现归一化:

请注意,简单地标准化图层的每个输入可能会更改该图层可以表示的内容。例如,对S形输入进行归一化会将其约束为非线性的线性状态。为了解决这个问题,我们确保网络中插入的转换可以表示身份转换(the transformation inserted in the network can represent the identity transform)。因此,我们为每次激活x(k)引入一对参数γ(k),β(k),它们可缩放和移动标准化值:

其中,γ(k) = Var[x(k)]开根号,β(k) = E[x(k)]

具体实现算法伪代码如下:

在训练期间,我们需要通过此变换反向传播损耗gradient的梯度,以及计算与BN变换的参数有关的梯度。我们使用链式规则,如下所示(在简化之前):

因此,BN转换是将标准化激活引入网络的可微分转换。这样可以确保在训练模型时,各层可以继续学习内部协变量偏移较少的输入分布,从而加快了训练速度。此外,将学习到的仿射变换应用于这些规范化激活,可以使BN变换表示身份变换并保留网络容量。

Batch-Normalization在卷积层中应用

卷积网络中添加BN前的映射方程为z = g(W u + b),这里g是激活函数。在添加BN后变为了z = g(BN(W u)),这里去除了b,由于我们对W u + b进行了归一化,因此可以忽略偏差b,因为其作用将被随后的均值减法抵消(偏差的作用在前面的式子中由β所实现)

Batch-Normalization有利于使用更大的学习率

在传统的深度网络中,过高的学习率可能会导致梯度爆炸或消失,以及陷入不良的局部最小值。批处理规范化有助于解决这些问题。通过对整个网络的激活进行标准化,可以防止对参数的细微更改放大为梯度激活中的较大和次佳的更改。例如,它可以防止训练陷入非线性的饱和状态。

批归一化还使训练对参数规模更具弹性。通常,较高的学习率可能会增加图层参数的规模,然后放大反向传播期间的梯度并导致模型爆炸。但是,使用批归一化,通过层的反向传播不受其参数范围的影响。确实,对于标量a, 假设BN (W u) = BN ((aW )u),(这里可以这么假设的原因,个人理解是BN有仿射变换,可以实现不同卷积参数大小得到相同的结果),等式两边分别对u和W求导,

对此,比例尺a不会影响雅可比层,也不会影响梯度传播。而且,较大的权重反而有较小的梯度,并且“批归一化”将稳定参数的增长。

Batch-Normalization实际效果

1. 增加学习率

2. 可去除Dropout

3. 减少L2权重正则化

4. 加速学习率衰减

5. 不再需要局部响应归一化(LRN)(在BN提出来之前是使用LRN)

6. 更彻底地混洗训练示例

7. 减少光度失真

后两个不太好理解,例如第七点,原文的说法是“由于批量归一化的网络训练速度更快,并且观察每个训练示例的次数更少,因此,我们使训练者可以通过减少畸变来专注于更多“真实”的图像。“我个人的理解是可以减少对图像进行畸变这种数据增强方式,因为有了BN后能更关注于真实图像,但这种理解不够直观,并不知道为什么会可以这样。

实验效果,收敛速度明显更快,精度更高。

Inception系列之Batch-Normalization的更多相关文章

  1. 深度卷积网络-Inception系列

    目录 1. Inception V1 1.1 Inception module 2. Inception V2 3. Inception V3 4. Inception V4, Inception-R ...

  2. 深度学习基础系列(九)| Dropout VS Batch Normalization? 是时候放弃Dropout了

    Dropout是过去几年非常流行的正则化技术,可有效防止过拟合的发生.但从深度学习的发展趋势看,Batch Normalizaton(简称BN)正在逐步取代Dropout技术,特别是在卷积层.本文将首 ...

  3. 深度学习基础系列(七)| Batch Normalization

    Batch Normalization(批量标准化,简称BN)是近些年来深度学习优化中一个重要的手段.BN能带来如下优点: 加速训练过程: 可以使用较大的学习率: 允许在深层网络中使用sigmoid这 ...

  4. 【网络优化】Batch Normalization(inception V2) 论文解析(转)

    前言 懒癌翻了,这篇不想写overview了,公式也比较多,今天有(zhao)点(jie)累(kou),不想一点点写latex啦,读论文的时候感觉文章不错,虽然看似很多数学公式,其实都是比较基础的公式 ...

  5. 深度学习面试题21:批量归一化(Batch Normalization,BN)

    目录 BN的由来 BN的作用 BN的操作阶段 BN的操作流程 BN可以防止梯度消失吗 为什么归一化后还要放缩和平移 BN在GoogLeNet中的应用 参考资料 BN的由来 BN是由Google于201 ...

  6. 网络结构解读之inception系列三:BN-Inception(Inception V2)

    网络结构解读之inception系列三:BN-Inception(Inception V2) BN的出现大大解决了训练收敛问题.作者主要围绕归一化的操作做了一系列优化思路的阐述,值得细看. Batch ...

  7. Inception系列理解

    博客:博客园 | CSDN | blog 写在前面 Inception 家族成员:Inception-V1(GoogLeNet).BN-Inception.Inception-V2.Inception ...

  8. 从Bayesian角度浅析Batch Normalization

    前置阅读:http://blog.csdn.net/happynear/article/details/44238541——Batch Norm阅读笔记与实现 前置阅读:http://www.zhih ...

  9. Feature Extractor[batch normalization]

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

  10. 图像分类(二)GoogLenet Inception_v2:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    Inception V2网络中的代表是加入了BN(Batch Normalization)层,并且使用 2个 3*3卷积替代 1个5*5卷积的改进版,如下图所示: 其特点如下: 学习VGG用2个 3* ...

随机推荐

  1. 《C++primerplus》第12章“队列模拟”程序

    这个程序刚开始学有很多难点,个人认为主要有以下三项: 1.链表的概念 2.如何表示顾客随机到达的过程 3.程序执行时两类之间的关系,即执行逻辑 关于第一点,书上的图解释得比较清楚了,把"空指 ...

  2. Talk is cheap. Show me the code的由来

    Date: Fri, 25 Aug 2000 11:09:12 -0700 (PDT) From:Linus Torvalds Subject Re: SCO: "thread creati ...

  3. SHOI 2013 【扇形面积并】

    早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...

  4. JVM系列【5】JVM常用指令

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Loca ...

  5. [Docker] redis 全配置

    启动容器,加载配置文件并持久化数据 docker run -d --privileged=true -p 6379:6379 --restart always -v /usr/redis/conf:/ ...

  6. MeteoInfoLab脚本示例:Hamawari-8 netCDF data

    示例数据:ftp://ftp.bom.gov.au/anon/sample/catalogue/Satellite/IDE00220.201507140300.nc 该数据的分辨率很高(22000*2 ...

  7. day57 Pyhton 前端Jquery09

    内容回顾: - 筛选选择器 $('li:eq(1)')  查找匹配的元素 $('li:first') $('li:last') - 属性选择器 - 筛选的方法 - find()  查找后代的元素 - ...

  8. day11 Pyhton学习

    一.昨日内容回顾 函数的进阶 动态传参 *args : 位置参数的动态传参 **kwargs: 关键字参数的动态传参 形参:聚合 实参:打散 顺序:位置参数>*args >默认值 > ...

  9. python 登陆三次错误退出

    登陆出现三次错误,退出程序 1 #登陆 2 def Login(): 3 a = input() 4 if a == 'Kate': 5 b = input() 6 if b == '666666': ...

  10. 【C语言学习笔记】空间换时间,查表法的经典例子!知识就是这么学到的~

    我们怎么衡量一个函数/代码块/算法的优劣呢?这需要从多个角度看待.本篇笔记我们先不考虑代码可读性.规范性.可移植性那些角度. 在我们嵌入式中,我们需要根据实际资源的情况来设计我们的代码.比如当我们能用 ...