论文笔记-Batch Normalization

论文题目:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

首先看看博客http://blog.csdn.net/happynear/article/details/44238541中最开始介绍的:

为什么中心化,方差归一化等,可以加快收敛?

补充一点:输入x集中在0周围,sigmoid更可能在其未饱和区域,梯度相对更大一些,收敛更快。

Abstract

1.深层网络训练时,由于模型参数在不断修改,所以各层的输入的概率分布在不断变化,这使得我们必须使用较小的学习率及较好的权重初值,导致训练很慢,同时也导致使用saturating nonlinearities 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。

这种现象加 internal covariate shift ,解决办法是:对每层的输入进行归一化。

本文方法特点是 :making normalization a part of the model
architecture and performing the normalization for each training
mini-batch

Batch Normalization 让我们可以使用更大的学习率,初值可以更随意。它起到了正则项的作用,在某些情况下,有它就不需要使用Dropout了。

在Imagenet上, achieves the same accuracy with 14 times fewertraining steps

Introduction

1. SGD:

用minibatch去近似整个训练集的梯度,在并行计算下,m个合成一个batch计算比单独计算m次快很多。

2.SGD虽然简单高效,但是需要调节很多超参,学习率,初值等。各层权重参数严重影响每层的输入,输入的小变动随着层数加深不断被放大。

这带来一个问题:各层输入分布的变动导致模型需要不停地去拟合新的分布。

当一个学习系统的输入分布是变化的时,即训练集的样本分布和测试集的样本分布不一致,训练的模型就很难有较好的泛化能力,这叫做 covariate shift (Shimodaira, 2000),解决办法是domain adaptation (Jiang, 2008).和迁移学习。

BN想把输入的均值方差规范化,使输入分布一致,但是仅均值、方差一样的分布就一定一样吗?但是思路是这样,而且效果好。

也可以不只关注学习系统整体,而关注它的内部,如一个subnetwork或 a layer:

损失函数为:

sub-network的损失函数为:

SGD:

is exactly equivalent to that for a stand-alone network F2 with input x.

输入X的分布保持不变的话,参数就不需要 readjust 去补偿X分布的变化。

注意Sigmoid 函数的特性,当输入不集中在 0 附近时(饱和时),梯度会非常小,训练会很慢。然而,输入x受前面层的参数的影响,这些参数的变化很可能导致x过早变化到sigmoid函数的饱和区域,收敛减慢。这种影响随着深度增加而加大。

ReLU和好的初值、更小的学习率可以解决梯度消失的问题。但是,要是我们能让输入更稳定,就不太可能 get stuck in the saturated regime,训练也会加快。

3.这种深度网络内部,参数不断变化导致的各层输入分布的变化 称为 Internal Covariate Shift.

Batch Normalization

a.保持各层输入的均值和方差稳定,来减弱 internal covariate shift;

b.也让梯度受参数及其初值的减小;

c.它也算作正则项,减少对Dropout的依赖;

d.它让卡在饱和区域的概率降低,以便可以使用 saturating nonlinearities

Towards Reducing Internal Covariate Shift

1.网络输入白化会加快收敛 (LeCun et al., 1998b; Wiesler & Ney, 2011)

并不是直接在每层规范化这么简单,如果模型的优化求梯度时不考虑到归一化的话,会影响模型,就是你优化半天学到了某种分布,一规范化,就把这它破坏了。

2.规范化与某个样本的各层输入及所有样本的各层输入都有关(对某个规范化时用到了所有样本):

在反向传导时,求导需考虑下面两项:

这样基于整个训练集的白化是非常耗时的,因为白化需要计算 x 的协方差矩阵及白化部分,还需计算BP算法中的求导。

但是基于某个或者部分样本进行规范化又会changes the representation ability of a network

所以本文在minibatch内归一化,再用可以学习的 γ 和 β 来拟合minibatch的统计量与整个训练集统计量之间的关系。

Normalization via Mini-Batch Statistics

1.有两个方面简化计算:

a.把 x 向量中每个元素当成独立随机变量单独进行规范化,向量中各变量独立了,也没有什么协方差矩阵了。这种规范化在各变量相关的情况下依然能加速收敛,(LeCun et al., 1998b),此外,如果看成向量中变量的联合概率,需要计算协方差矩阵,如果变量个数大于minibatch中样本数,协方差矩阵不可逆!!

b.在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. Algorithm 1.

simply normalizing each input of a layer may change what the layer can represent.normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity

为了解决这个问题,we make sure that the transformation inserted in the network can represent the identity transform.也就是用用可以学习的 γ 和 β 去拟合出与原先等价的变换。

采用 normalize via mini-batch statistics ,the statistics used for normalization can fully participate in the gradient backpropagation

Batch Normalizing Transform:

只要minibatch中的样本采样与同一分布,规范化后的输入 x 期望为0,方差为1,把规范后的 x 进行线性变换得到 y 作为后续层的输入,可以发现 后续层的输入具有固定的均值和方差的。尽管 规范化后的 x 的联合分布在训练过程中会改变(源于第一个简化,本文的规范化是把 x 向量中各个变量当作独立的,单独规范化的,所以他们的联合分布并不稳定,只是单独是稳定的),但还是可以使训练加速。

2.优化中也需要对 BN 变换的两个参数进行优化,链式法则求导就可以了:

BN 变换是可微的,通过BN变换,可以减弱输入分布的 internal covariate shift ,并且学习到这个线性变换让 BN变换 与网络本来的变换 等价,preserves the network capacity

Training and Inference with Batch-Normalized Networks

1.使用BN,把网络中各层输入 x 变为 BN(x)即可。可以使用SGD及其各种变种训练。

2.训练时候在minibatch内规范化非常高效,但是推断时就不需要而且不应该这样了。推断是我们希望输出只取决于输入,所以规范化中的期望、方差用全部数据计算:

就是各minibatch的方差求平均,minibatch数量为m。

注意:推断时,均值和方差是固定的,那么规范化这步线性变换可以和 γ、β 这步线性变换 合成 一个线性变换。训练BN网络步骤如下:

Batch-Normalized Convolutional Networks

1. BN 可以用于任意层的 activations,但是把 BN 加在 W u +b 之后,非线性激活函数之前更好!

因为前层的 activations (这层的输入 u)是非线性输出的,其分布很可能在训练中变化;而 W u +b 更可能有 a symmetric, non-sparse distribution, that is “more Gaussian”

(Hyv¨arinen & Oja, 2000); 规范化它更有可能得到稳定的 activations 分布。

2. 注意 b 可以不管,因为减均值时 b 会被消掉,b 的作用其实被 β 代替了,所以:

BN是对 x =W u 的每一维单独规范化

3.对卷积层,规范化也该保持卷积特性,即 相同feature map,不同 location
的元素 用相同方式规范化:

a mini-batch of size m and feature maps of size p × q,  m*p*q个元素一起规范化!每个 feature map 有一对 γ β。

Batch Normalization enables higher learning rates

1.太大的学习率可能导致 梯度爆炸或消失以及卡在局部极值,BN可以防止参数小变换被逐层放大,通过修改 γ、β可以优化 activations的变化。

一般来说,大学习率增加参数的scale,在BP中放大了梯度,导致模型爆炸。然而使用了 BN,每层的BP不受其参数影响:

The scale does not affect the layer Jacobian nor, consequently, the gradient propagation.

而且:大权重会导致更小的梯度,所以BN可以稳定参数的增长。

2.BN还可以使 layer Jacobians 的奇异值接近 1 .这更利于训练 (Saxe et al.,2013).

论文中有在高斯、独立且变换为线性等条件下,可以推出来,但是说实话假设有点太苛刻,有点强行解释的味道,论文也提出更普适的结论需后续研究。

Batch Normalization regularizes the model

1.使用BN后,训练时对于单个样本与整个minibatch综合考虑了,training network no longer producing deterministic values for a given training example

这有利于提升网络的泛化能力,可以代替 Dropout

Experiments

Activations over time

在mnist上用3个隐层,每层100个的神经元的网络进行实验,初值为高斯,sigmoid函数,迭代50000次,minibatch为60个样本,损失为交叉熵。

(a)可以看到,加BN测试精度更高,而且最开始就达到了较高的精度;

(b,c)可以明显看到加BN后分布更加稳定。图中三条线为{15,50,85}分位数。

后面的实验就看论文了。

时间: 2024-09-30 07:32:15

论文笔记-Batch Normalization的相关文章

Batch Normalization 学习笔记

原文:http://blog.csdn.net/happynear/article/details/44238541 今年过年之前,MSRA和Google相继在ImagenNet图像识别数据集上报告他们的效果超越了人类水平,下面将分两期介绍两者的算法细节. 这次先讲Google的这篇<Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift>,主要是因为这里面的思想比较

Batch Normalization导读

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性.目前几乎已经成为DL的标配了,任何有志于学习DL的同学们朋友们雷迪斯俺的詹特曼们都应该好好学一学BN.BN倒过来看就是NB,因为这个技术确实很NB,虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个经验领先于理论分析的偏

tensorflow中使用Batch Normalization

在深度学习中为了提高训练速度,经常会使用一些正正则化方法,如L2.dropout,后来Sergey Ioffe 等人提出Batch Normalization方法,可以防止数据分布的变化,影响神经网络需要重新学习分布带来的影响,会降低学习速率,训练时间等问题.提出使用batch normalization方法,使输入数据分布规律保持一致.实验证明可以提升训练速度,提高识别精度.下面讲解一下在Tensorflow中如何使用Batch Normalization 有关Batch Normalizat

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

转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 郭耀华's Blog 欲穷千里目,更上一层楼项目主页:https://github.com/guoyaohua/ 博客园 首页 新随笔 联系 订阅 管理 欲穷千里目,更上一层楼项目主页:https://github.com/guoyaohua/ 博客园 首页 新随笔 联系 订阅 管理 [深度学习]深入理解Batch Normalization批标准化 这几天面试经常被问到BN层的原理,虽然回答

激活函数,Batch Normalization和Dropout

神经网络中还有一些激活函数,池化函数,正则化和归一化函数等.需要详细看看,啃一啃吧.. 1. 激活函数 1.1 激活函数作用 在生物的神经传导中,神经元接受多个神经的输入电位,当电位超过一定值时,该神经元激活,输出一个变换后的神经电位值.而在神经网络的设计中引入了这一概念,来增强神经网络的非线性能力,更好的模拟自然界.所以激活函数的主要目的是为了引入非线性能力,即输出不是输入的线性组合. 假设下图中的隐藏层使用的为线性激活函数(恒等激活函数:a=g(z)),可以看出,当激活函数为线性激活函数时,

Batch normalization:accelerating deep network training by reducing internal covariate shift的笔记

说实话,这篇paper看了很久,,到现在对里面的一些东西还不是很好的理解. 下面是我的理解,当同行看到的话,留言交流交流啊!!!!! 这篇文章的中心点:围绕着如何降低  internal covariate shift 进行的, 它的方法就是进行batch normalization. internal covariate shift 和 batch normalization 1. 什么是 internal covariate shift呢? 简单地理解为一个网络或system的输入的dirs

CS231n笔记4-Data Preprocessing, Weights Initialization与Batch Normalization

Data Preprocessing, Weights Initialization与Batch Normalization Data Preprocessing Weights Initialization与Batch Normalization 数据预处理Data Preprocessing 权重初始化Weights Initialization 让权重初始化为0 0方差1e-2标准差 0方差1标准差 Xavier Initialization 再改进 批归一化Batch Normaliza

DL4NLP —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.应用场景:比如说用户在拍了一张照片后,利用Image Caption技术可以为其匹配合适的文字,方便以后检索或省去用户手动配字:此外它还可以帮助视觉障碍者去理解图像内容.类似的任务还有Video Caption,输入是一段视频,输出是对视频的描述. (一)任务描述 目前来说,Image Caption任务主要集中在英文上,数

Deep Learning论文笔记之(二)Sparse Filtering稀疏滤波

Deep Learning论文笔记之(二)Sparse Filtering稀疏滤波          自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一样.所以想习惯地把一些感觉有用的论文中的知识点总结整理一下,一方面在整理过程中,自己的理解也会更深,另一方面也方便未来自己的勘察.更好的还可以放到博客上面与大家交流.因为基础有限,所以对论文的一些理解可能不太正确,还望大家不吝指正交流,谢谢. 本文的论文来自: Sparse filtering, J. N