Inception系列之Batch-Normalization
训练深度神经网络非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化,图层输入分布的变化带来了一个问题,因为图层需要不断适应新的分布,因此训练变得复杂,随着网络变得更深,网络参数的细微变化也会放大。由于要求较低的学习率和仔细的参数初始化,这减慢了训练速度,并且众所周知,训练具有饱和非线性的模型非常困难。我们将此现象称为内部协变量偏移,并通过归一化层输入来解决该问题。
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的更多相关文章
- 深度卷积网络-Inception系列
目录 1. Inception V1 1.1 Inception module 2. Inception V2 3. Inception V3 4. Inception V4, Inception-R ...
- 深度学习基础系列(九)| Dropout VS Batch Normalization? 是时候放弃Dropout了
Dropout是过去几年非常流行的正则化技术,可有效防止过拟合的发生.但从深度学习的发展趋势看,Batch Normalizaton(简称BN)正在逐步取代Dropout技术,特别是在卷积层.本文将首 ...
- 深度学习基础系列(七)| Batch Normalization
Batch Normalization(批量标准化,简称BN)是近些年来深度学习优化中一个重要的手段.BN能带来如下优点: 加速训练过程: 可以使用较大的学习率: 允许在深层网络中使用sigmoid这 ...
- 【网络优化】Batch Normalization(inception V2) 论文解析(转)
前言 懒癌翻了,这篇不想写overview了,公式也比较多,今天有(zhao)点(jie)累(kou),不想一点点写latex啦,读论文的时候感觉文章不错,虽然看似很多数学公式,其实都是比较基础的公式 ...
- 深度学习面试题21:批量归一化(Batch Normalization,BN)
目录 BN的由来 BN的作用 BN的操作阶段 BN的操作流程 BN可以防止梯度消失吗 为什么归一化后还要放缩和平移 BN在GoogLeNet中的应用 参考资料 BN的由来 BN是由Google于201 ...
- 网络结构解读之inception系列三:BN-Inception(Inception V2)
网络结构解读之inception系列三:BN-Inception(Inception V2) BN的出现大大解决了训练收敛问题.作者主要围绕归一化的操作做了一系列优化思路的阐述,值得细看. Batch ...
- Inception系列理解
博客:博客园 | CSDN | blog 写在前面 Inception 家族成员:Inception-V1(GoogLeNet).BN-Inception.Inception-V2.Inception ...
- 从Bayesian角度浅析Batch Normalization
前置阅读:http://blog.csdn.net/happynear/article/details/44238541——Batch Norm阅读笔记与实现 前置阅读:http://www.zhih ...
- Feature Extractor[batch normalization]
1 - 背景 摘要:因为随着前面层的参数的改变会导致后面层得到的输入数据的分布也会不断地改变,从而训练dnn变得麻烦.那么通过降低学习率和小心地参数初始化又会减慢训练过程,而且会使得具有饱和非线性模型 ...
- 图像分类(二)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* ...
随机推荐
- 完全小白入门:python的下载和安装
1. 打开官网www.python.org,选择Downloads
- rxjs入门3之项目中ajax函数封装
项目中ajax函数封装 ⽹页应⽤主要数据源有两个:⼀个是⽹页中的DOM事件,另⼀个就是通过AJAX获得的服务器资源.我们已经知道fromEvent这个操作符可以根据DOM事件产⽣Observable对 ...
- LVS+keepalive
LVS+keepalive 什么是keepalive Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲 ...
- client: c#+protobuf, server: golang+protobuf
前段时间看到一篇博文<可在广域网部署运行的即时通讯系统 -- GGTalk总览(附源码下载)>,他是用C#实现的即时通讯系统,功能强大,界面漂亮. 就想用golang重写服务端,把代码下载 ...
- HTTP 【一文看清所有概念】
HTTP 标头 HTTP 1.1 的标头主要分为四种,通用标头.实体标头.请求标头.响应标头,现在我们来对这几种标头进行介绍 通用标头 HTTP 通用标头之所以这样命名,是因为与其他三个类别不同,它们 ...
- JS中实现Trim(),TrimStart(),TrimEnd() 的方法
//去除字符串头尾空格或指定字符 String.prototype.Trim = function (c) { if (c == null || c == "") { var st ...
- 使用notepad++的nppexec插件格式化json和压缩json内容
1.遇到问题 因为平时需要查看json内容,有时候修改后需要压缩json,虽然已经有网页可以实现,但每次打开网页也很麻烦啊.虽然notpad++也有NPPJSONViewer这个插件,但是目前只有格式 ...
- 【线段树分治】Dash Speed
代码的美妙 #include <bits/stdc++.h> %:pragma GCC optimize(3) using namespace std; const int maxn=7e ...
- docker下安装kafka和kafka-manager
1.下载镜像 这里使用了wurstmeister/kafka和wurstmeister/zookeeper这两个版本的镜像 docker pull wurstmeister/zookeeper doc ...
- mysql间隙锁 转
前面一文 mysql锁 介绍了mysql innodb存储引擎的各种锁,本文介绍一下innodb存储引擎的间隙锁,就以下问题展开讨论 1.什么是间隙锁?间隙锁是怎样产生的? 2.间隙锁有什么作用? 3 ...