ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Batch Normalization论文总结

2019-06-30 22:24:09  阅读:387  来源: 互联网

标签:space dfrac BN 论文 Batch Wu B2 Var Normalization


Batch Normalization要解决的问题

      \space\space\space\space\space\space      训练深度神经网络是复杂的,因为在训练过程中,每一层参数的更新变化,都会影响到下一层输入的分布,而且随着网络深度的增加,这种影响会不断放大。每一层输入分布的变化就迫使每一层要不断适应新分布,所以受到网络内部分布变化的影响,
1.训练网络的学习率不能太大,这就减慢了网络的训练速度;
2.需要谨慎初始化模型参数;
3.容易使非线性函数(sigmoid函数)达到饱和区域。sigmoid函数g(x)=11+exp(x)g(x)=\dfrac{1}{1+exp(-x)}g(x)=1+exp(−x)1​,函数如下图所示。
在这里插入图片描述
由于x受到w,b以及之前所有层的参数的影响,在训练过程中这些参数的变化可能会使x的许多维进入函数的饱和区域,使得这些维上的梯度为0(梯度消失),减缓收敛速度。
      \space\space\space\space\space\space      文章中将内部分布变化这一现象称为内部协变量变换(internal covariate shift),而解决这一问题的办法就是标准化(normalize)每一层的输入,让标准化作为模型的一部分,使得整个网络流过的数据都是同分布的,并且标准化是在每一个mini-batch上进行的,这也是Batch Normalization名字的由来。(mini-batch的优势:首先,loss在mini-batch上的梯度是对loss在整个训练集上的梯度的估计,batch越大,估计越准确,效果越好;第二,由于并行计算,mini-batch的效率高。)

Batch Normalization算法

对于一个d维输入x=(x(1)...x(d))x=(x^{(1)}...x^{(d)})x=(x(1)...x(d)),BN的操作是对其每一维进行标准化
x^(k)=x(k)E[x(k)]Var[x(k)]\hat{x}^{(k)}=\dfrac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}x^(k)=Var[x(k)]​x(k)−E[x(k)]​
但是如此简单暴力的将输入的每一维限制在均值为0方差为1的同分布内,会破坏每一层的表达能力。例如BN层会将输入特征限制在非线性函数(如sigmoid)的线性部分,多个线性层叠加和单个线性层是一样的,显然会使网络的表达能力下降。所以文章添加了两个参数γ(k),β(k)\gamma^{(k)},\beta^{(k)}γ(k),β(k),xxx在标准化后,再用这两个参数进行平移缩放(对方差进行缩放scale,对均值进行平移shift),如下所示
y(k)=γ(k)x^(k)+β(k)y^{(k)}=\gamma^{(k)}\hat{x}^{(k)}+\beta^{(k)}y(k)=γ(k)x^(k)+β(k)
γ(k),β(k)\gamma^{(k)},\beta^{(k)}γ(k),β(k)是两个可学习的参数,用来恢复每层的表达能力,不再是单一的迫使每层同分布。BN算法如下图所示,图中的xxx是指每一维的特征x(k)x^{(k)}x(k)。
在这里插入图片描述
这里也可以看出,每一层都会有一对参数γ,β\gamma,\betaγ,β;每一层也会计算出相应mini-batch的μB,σB2\mu_B,\sigma_B^2μB​,σB2​。这四个量都是多维向量,每一维对应输入向量的一维。训练过程中,每层γ,β\gamma,\betaγ,β都要更新,而且每层对应mini-batch的μB,σB2\mu_B,\sigma_B^2μB​,σB2​也在变动(随着参数更新,每层输入会变)。
反向传播更新参数的过程如下所示。
在这里插入图片描述

训练与预测时的Batch Normalization

      \space\space\space\space\space\space      训练和预测的算法如下所示。在训练的时候,文章中并没有将输入的每一维属性进行BN操作,而是选定了一个K大小的属性子集,然后在每个mini-batch上对这一子集进行BN操作,即Algorithm1(见上图)。在预测的时候,没有必要也不希望进行和训练时一样的操作,因为可能预测的时候只有一个样本,它的均值和方差是没有意义的。所以在预测时,对于每一层,我们将训练时的所有mini-batch对应的均值和方差取均值作为这一层的均值和方差,即
E(x)EB[μB]E(x)\leftarrow E_B[\mu_B]E(x)←EB​[μB​]
Var(x)mm1EB[σB2]Var(x)\leftarrow \dfrac{m}{m-1}E_B[\sigma^2_B]Var(x)←m−1m​EB​[σB2​]
(这里是对σB2\sigma^2_BσB2​的无偏估计,即mm1EB[σB2]=EB[mm1σB2]=EB[mm11mi=1m(xiμB)2]=EB[1m1i=1m(xiμB)2]\dfrac{m}{m-1}E_B[\sigma^2_B]=E_B[\dfrac{m}{m-1}\sigma^2_B]=E_B[\dfrac{m}{m-1}\dfrac{1}{m}\sum\limits_{i=1}^{m}(x_i-\mu_B)^2]=E_B[\dfrac{1}{m-1}\sum\limits_{i=1}^{m}(x_i-\mu_B)^2]m−1m​EB​[σB2​]=EB​[m−1m​σB2​]=EB​[m−1m​m1​i=1∑m​(xi​−μB​)2]=EB​[m−11​i=1∑m​(xi​−μB​)2])
最终y=γVar[x]+ϵx+(βγE[x]Var[x]+ϵ)y=\dfrac{\gamma}{\sqrt{Var[x]+\epsilon}}\cdot x+(\beta-\dfrac{\gamma E[x]}{\sqrt{Var[x]+\epsilon}})y=Var[x]+ϵ​γ​⋅x+(β−Var[x]+ϵ​γE[x]​)
在这里插入图片描述
      \space\space\space\space\space\space      与上述的神经网络对输入向量的每一维进行BN操作不同,对于卷积神经网络,BN操作的对象是以每一个特征图为单位的,即对输入特征图的每一个通道的特征图在mini-batch上求均值和方差,并对应一对参数γ,β\gamma,\betaγ,β。

Batch Normalization的优势

1.可以使用更大的学习率以及对参数初始化不用太小心谨慎
BN层会将每层输入强行拉回均值为0方差为1,或附近(γ,β\gamma,\betaγ,β平移缩放),对于某些激活函数(如sigmoid)这样避免了达到其饱和区域,从而不会由于梯度太小引起梯度消失或陷入局部最优解。
学习率过大,会使参数增长或下降过快,参数过大或者过小会使反向传播中梯度变大,从而导致梯度爆炸。而使用BN层会使得反向传播中的梯度对参数的大小不敏感。例如让参数扩大aaa倍,有
BN((aW)u)=γaWuaμa2σ2+ϵ+β=BN(Wu)=γWuμσ2+ϵ+βBN((aW)u)=\gamma\dfrac{aWu-a\mu}{\sqrt{a^2\sigma^2+\epsilon}}+\beta= BN(Wu)=\gamma\dfrac{Wu-\mu}{\sqrt{\sigma^2+\epsilon}}+\betaBN((aW)u)=γa2σ2+ϵ​aWu−aμ​+β=BN(Wu)=γσ2+ϵ​Wu−μ​+β(由于ϵ\epsilonϵ很小可忽略),那么

BN((aW)u)u=BN(Wu)u\dfrac{\partial BN((aW)u)}{\partial u}=\dfrac{\partial BN(Wu)}{\partial u}∂u∂BN((aW)u)​=∂u∂BN(Wu)​

BN((aW)u)(aW)=1aBN(Wu)W\dfrac{\partial BN((aW)u)}{\partial (aW)}=\dfrac{1}{a}\dfrac{\partial BN(Wu)}{\partial W}∂(aW)∂BN((aW)u)​=a1​∂W∂BN(Wu)​
可以看到参数越大并不会使梯度增大,反而使梯度更小。

2.有正则化的效果
BN层每次以一个mini-batch为单位进行操作,减少了单个数据尤其是异常数据对网络的影响,从而减少过拟合的风险。

论文地址:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

标签:space,dfrac,BN,论文,Batch,Wu,B2,Var,Normalization
来源: https://blog.csdn.net/ysl_ysl123/article/details/94194969

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有