Batch Normalization:Accelerating Deep Network Training by Reducing Internal Concariate Shift《》

internal covariate shift:
由于训练过程中网络参数的变化,导致网络内部激活层分布的变化。
这种思想的由来:
1,统计机器学习中有一个经典的假设:训练数据和测试数据是满足相同分布的。covariate shift:训练集的样本数据分布变化时,训练得到的模型无法很好的Generalization。
2,在神经网络中的各输出层可以作为下一层的输入层,也就是输出层可以作为训练数据,但每一层所指的label不变,所以如果各输出层如果分布不一样,就可以当作是covariate shift。

Introduce
1,介绍了SGD的优缺点,优点比如mini-batch,简单有效之类的。缺点,调参困难,特别是学习率和初始值。参数小的波动会扩大影响整个网络,特别是网络很深的时候。接着通过 F 2 ( F 1 ( u , θ 1 ) , θ 2 ) F_2(F_1(u,\theta_1),\theta_2) F2(F1(u,θ1),θ2)说明,如果输入输出的分布相同, θ 2 \theta_2 θ2就无需调整去补偿x的分布的变化。也是ICS的思想
2,通过sigmod函数的分析,得到当|x|增大时,会导致导数的值趋于0,从而使得x陷入饱和区域,梯度消失。这里也提出另外一些工作比如relu,xavier的初始化。
3,提出ICS,并大致介绍了batch normalization的优点,后文会具体介绍。

Towards Reducing ICS
引入的思想:1,降低ICS。 2,当输入white时,网络训练的收敛速度变快。
大致介绍了在中心化的过程中(不包括除以方差),bias项的改变对中心化后的x没有影响。也就是说 x ^ = x − E ( x ) x = u + b \hat{x} = x - E(x)\\ x= u + b x^=xE(x)x=u+b与b无关。因此不需要添加b。又通过矩阵 C o n v [ x ] = E [ x x T ] − E [ x ] E [ x ] T Conv[x] = E[xx^T] - E[x]E[x]^T Conv[x]=E[xxT]E[x]E[x]T标准化 C o n v − 1 / 2 ( x − E ( x ) ) Conv^{-1/2}(x-E(x)) Conv1/2(xE(x))x是层输入,Conv[x]是协方差矩阵,可以看出全维度的normalization的计算量非常大。

Normalzation via Mini-Batch Statistics
这部分反而是最简单的,作者对normalization进行了两个优化
1、由于全维度的normalization计算量太大,对每个特征维度分别进行normalization。比如有d个维度的输入 x = ( x ( 1 ) . . . , x ( d ) ) x = (x^{(1)} ...,x^{(d)}) x=(x(1)...,x(d))
x ^ ( k ) = x ( k ) − E ( x ( k ) ) V a r [ x ( k ) ] \hat{x}^{(k)} = \frac{x^{(k)} - E(x^{(k)})}{\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E(x(k))
作者提出简单的normalization可能会改变层中输入的表达,所以引入 γ k , β k \gamma_k,\beta_k γk,βk,当 γ k = x ( k ) \gamma_{{k}} = \sqrt{x^{(k)}} γk=x(k) β ( k ) = E ( x ( k ) ) \beta^{(k)} = E(x^{(k)}) β(k)=E(x(k))时,还原原始的输入值。
2、由于对整个训练集进行normalization计算量太大(主要是后续的batch normalization的backwards),在SGD中又使用了mini-batch,刚好对mini-batch中的数据进行normalization。

在这里插入图片描述
文中通过进一步的梯度推导公式,也说明了该函数可微分,可以进行backwards。
公式具体如下:
在这里插入图片描述
然后是它在测试集上的应用。测试集中使用的方差是方差的无偏估计(无偏估计指的是估计量的数学期望等于被估计参数)
在这里插入图片描述
对于cnn,文中将cnn中的每个特征图当成一个神经元,因此在使用Batch Normalization,mini-batch size 的大小就是:mpq,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。
batch normalization 允许使用更大的学习率,在一般情况下当学习率增大时,w变化的范围变大,会导致w的范围变大,从而在正向传播时,每一层的输出范围会变大,在反向传播时,可以大概知道对w求导的导数,与层输出相关,会导致反向传播的值很大,学习率又偏大,就可能导致梯度爆炸。
在这里插入图片描述

而当进行正则化之后,每一层的输出范围确定。W较大,BN()反向传播的梯度反而减小,有利于遏制梯度爆炸

优点:
1,有效遏制了梯度消失和梯度爆炸。
2,解决了internal covariate shift的问题,将训练集和测试集强行拉到标准正态分布。

衍生的优点:
1,训练更快,优点(1,2)
2,容忍更高的学习率 优点(2)
3,让权重更容易初始化 优点(2)
4. 可支持更多的激活函数 优点(2)
5. 简化创建深层的神经网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值