Batch Normalization学习

前言

本文旨在学习和记录,如需转载,请附出处https://www.jianshu.com/p/2866e51c387d

1、BN介绍

Batch Normalization是由Sergey Ioffe等人在2015年提出的批归一化处理。论文名叫:
Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift
Batch Normalization(简称BN)现已成为深度神经网络最常用的训练技巧之一,在很多经典的网络中都被采用。采用BN处理,能够让我们采用更大的学习率来训练网络,以及不用很小心的调节网络参数初始化,BN也可以看作是正则化的一种,通过BN,某些时候我们在训练网络时不需要加Dropout以防止网络过拟合。

2、Internal Covariate Shift

  • 作者在摘要中提到,训练神经网络时,当前一层的参数发生变化的时候,后面的层的参数分布也会随之变化,这会导致网络训练变慢,这也是之前训练网络为什么要小心调节初始化网络参数的原因,如果我们同时采用饱和的非线性的激活函数(比如sigmoid),这回使训练模型变得十分困难。作者将这一现象称之为Internal Covariate Shift。针对该现象,作者将每一层网络的输入都进行归一化,这就是BN,而且在实验中采用mini-batch训练来归一化。作者解释到采用mini-batch来训练网络时,表明mini -batch输入训练梯度损失是整体训练集的一个估计,随着batch_size的增大,这个估计将会更加靠近;另外,计算一个batch的效率比计算batch个单独训练数据输入的效率要高,因为训练时对batch个训练数据是并行处理的。
  • 作者也提到由于每一层的输入都收到前面层的影响,所以如果有一些小的改变,随着网络层数的加深,其变化也能被放大。层输入数据分布的变化将会导致层需要适应不同的新的分布。

3、BN具体做法

BN的具体做法是对每一层的输入数据进行批规范化,固定为高斯分布。均值为0,方差为1。另外,采用了缩放因子\lambda和平移因子\beta
\hat{x}^{(k)}=(x^{(k)}-E[x^{(k)}])/\sqrt{var[x^{(k)}]} 其中k代表网络的层数
{y}^{(k)}=\lambda^{(k)} \hat{x}^{(k)}+\beta^{(k)}
作用:
如果采用tanh或者sigmoid饱和非线性激活函数时,用BN会控制饱和程度,有效减小梯度消失问题。
其中缩放因子\lambda和平移因子\beta是需要优化的。
当:
\lambda^{(k)}=\sqrt{var[x^{(k)}]}, \beta^{(k)}=E[x^{(k)}]
则经过先归一化到0均值1方差,然后缩放平移就成恒等映射了。


算法过程:
eg: 假设X中间特征数据维度为(N,D),N代表数据个数,D代表数据特征维度
正向传播

  1. 求出每一列特征的均值
x_mean = np.mean(x,axis =0 )
  1. 求出其方差
x_var = np.var(x,axis =0 )
  1. 归一化处理
x' = (x -x_mean)/(x_var+eps)^0.5
  1. 放缩和平移
out = \lambda *x' + \beta

注意:
每次迭代循环时需要保存x_mean和x_var。因为\lambda\beta是待学习的参数,在训练中我们实际上需要找到一个x到out的映射关系(其实就是归一化操作),但是我们在测试的时候需要根据训练得到的全局均值和方差来进行归一化,在tensorflow中,如果不设置全局的均值和方差,则测试效果就会特别差。训练时需要对所有batch的均值和方差记录下来,然后测试时对其做无偏估计,作为整体均值和方差然后进行测试。


一般在现有的深度学习框架下面关于BN的调用都含有momentum这个变量,以下是怎么计算整体的均值和方差的方法:
running^{mean} = momentum*running^{mean}+(1-momentum)*x^{mean}

running^{var} = momentum*running^{var}+(1-momentum)*x^{var}

起初训练时
running^{mean} =0,running^{var}=0
,之后随着训练迭代一直更新,训练结束
running^{mean},running^{var}
就作为全局均值和全局方差
反向传播:
过程为:
y = \lambda \hat{x}+\beta

d\lambda = dy\cdot \hat{x}

d\beta= dy

d\hat{x}= dy*\lambda

\hat{x} = \frac{x-x^{mean}}{\sqrt{x^{var}+eps}} =\frac{x-\frac{1}{N}\sum_{i=1}^{N}x^{_{i}}}{\sqrt{\frac{1}{N}\left ( x-\frac{1}{N}\sum_{i=1}^{N}x^{_{i}} \right )^{2}+eps}}

\hat{x} = \frac{x-x^{mean}}{\sqrt{x^{var}+eps}}=\frac{x-u_{b}}{\sqrt{\sigma ^{2}+\varepsilon }}

对其求导有:
d\hat{x}= dy*\lambda

d\sigma ^{2}=d\hat{x}\cdot (x-u_{b})\cdot (-0.5)(\sigma ^{2}+\varepsilon )^{-1.5}

du_{b}=-d\hat{x}/\sqrt{\sigma ^{2}+\varepsilon }+d\sigma ^{2}\frac{2u_{b}-2x}{N}

dx =d\hat{x}/\sqrt{\sigma ^{2}+\varepsilon }+d\sigma ^{2}\frac{2u_{b}-2x}{N}+du/N

其中,有关均值和方差在求导中的求和给省略了

4、总结

过小的权重初始化容易让后面层的激活值衰减到0,导致每一层的输出值都一样。过大的权重初始化容易导致饱和非线性激活函数的梯度为0。BN将每一层输入数据变为均值为0方差为1的正态分布,然后通过平移和缩放变成该有的分布,可以抑制初始化权重较差造成训练缓慢的问题。另外,通过BN可以适当增大学习率。

参考文献

  1. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341