Inception v2&Batch Normalization论文阅读笔记

Inception v2

看这个前先学会SGD和小批量、参数的更新过程、理解梯度爆炸梯度消失的过程。

Internal Covariate Shift 内部协变量偏移

分布:是指用于表述随机变量取值的概率规律

每一层神经网络的目的:学习当前层神经网络的输入或上一层神经网络的输出的分布

机器学习(包含深度学习)的使用的基本假设:独立同分布假设,就是训练数据集与测试数据集服从相同的分布。这是通过训练数据训练得到的模型能在测试数据上工作的一个基本保障。

深度学习中的独立同分布假设:1)神经网络的训练集测试集服从相同的分布。 2)神经网络每一次输入mini-batch的样本都服从同一个分布

每层神经网络的独立同分布假设:鉴于每层神经网络的目的,我们希望每一层神经网络在每一次迭代时的输入都服从同一个分布,只有这样,这层神经网络才能有效学习这个分布。否则,如果一个神经网络每一次输入的都是服从不同分布的样本,那么,最后神经网络也不知道该学习哪个分布了,从而导致学习效果变差。

协变量漂移/偏移Convariate Shift:一般是指训练集与测试集的分布不同,或每次迭代时输入层输入的样本服从的分布不同。
参考:https://blog.csdn.net/Strive_For_Future/article/details/108323634

什么是ICS?

Training Deep Neural Networks is complicated by the fact that the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful parameter initialization, and makes it notoriously hard to train models with saturating nonlinearities.

翻译:

训练深度神经网络很复杂,因为每层的输入分布在训练期间都会变化,因为上一层的参数变了。因此网络需要更低的学习率和更小心的初始化而拖慢了训练,训练用饱和非线性的模型变得更难。这种现象叫做ICS。

由于神经网络参数的不断变化,在每次迭代时每层的输入数据都服从不同的分布,这种现象叫内部协变量漂移
Z [ L ] = W [ L ] ∗ A [ L − 1 ] + b [ L ] ( 线 性 变 化 层 ) A [ L ] = g [ L ] ( Z [ L ] ) ( 非 线 性 变 化 / 激 活 函 数 层 ) Z^{[L]}=W^{[L]} * A^{[L-1]}+b^{[L]} (线性变化层) A^{[L]}=g^{[L]}\left(Z^{[L]}\right) (非线性变化/激活函数层) Z[L]=W[L]A[L1]+b[L](线)A[L]=g[L](Z[L])(线/)

Wl和Bl都会更新,Zl的分布就会发生变化,导致Al分布变化(l+1层的输出)

每层都要去适应不同的分布变化,使得训练变得困难,学习率也得调小。

ICS会导致:

1.需要采用更低的学习率,学习速度降低

由于输入变动大,上层网络需要不断调整去适应下层网络,因此这个时候的学习速率不宜设得过大,因为梯度下降的每一步都不是“确信”的。

参考:https://zhuanlan.zhihu.com/p/456863215

2.在过激活层的时候,容易陷入激活层的梯度饱和区,降低模型收敛速度(当使用饱和激活函数,namely,signmoid,tanh,可以采用relu解决)

为什么容易陷入梯度饱和区?

用饱和激活函数,当绝对值越大时,数据落入两端的梯度饱和区(saturated regime),造成梯度消失,进而降低模型收敛速度。当数据分布变动非常大时,这样的情况是经常发生的

3.每层的更新都会影响到其它层,因此每层参数更新策略要很仔细

ICS解决:Batch Normalization

BN成功的地方不在解决ICS,*How Does Batch Normalization Help Optimization?*文中指出:

  • 就算发生了ICS问题,模型的表现也没有更差
  • BN对解决ICS问题的能力是有限的
  • BN奏效的根本原因在于它让optimization landscape更平滑
BN层插入位置:激活函数之前(或输入)
BN是什么:

归一化层,论文中是对输入的x进行归一化,让数据distribution更均匀。基于小批量随机梯度下降(Mini-Batch SGB)

注意,BN针对的是一个batch中的所有样本而非单个样本。

BN算法:

对x的dimension/channel(CNN)做归一化,如果是MLP的话就是对一个minibatch中的所有样本x的每d做均值和方差。归一化后的y均值为方差为1。γβ是两个可学习的参数。

归一化:

img

去归一化:

img

BN前向传播:

在这里插入图片描述

BN训练过程:

反向传播计算BN层的梯度更新参数:

根据反向传播的顺序,首先求取损失ℓ对BN层输出yi的偏导∂ℓ / ∂yi,然后是对可学习参数的偏导∂ℓ / ∂γ和∂ℓ / ∂β,用于对参数进行更新,想继续回传的话还需要求对输入 x偏导(梯度给下一层),于是引出对变量μ、σ2和x^的偏导,根据链式法则再求这些变量对x的偏导。

在这里插入图片描述

在推断阶段(predict),对均值和方差的求解和训练阶段时的求法不一样 (因为预测的时候没有batchsize)。这里的均值和方差是根据训练过程中每一次batch得到的均值和方差求解得到的,即求每一个batch的均值和方差的期望的无偏估计。具体如下:
E [ x ] = E B [ μ B ] var ⁡ [ x ] = m m − 1 E B [ σ B 2 ] \begin{array}{l} E[x]=E_{B}\left[\mu_{B}\right] \\ \operatorname{var}[x]=\frac{m}{m-1} E_{B}\left[\sigma_{B}^{2}\right] \end{array} E[x]=EB[μB]var[x]=m1mEB[σB2]
最终公式:
y = γ var ⁡ [ x ] + ε x + ( β γ E [ x ] var ⁡ [ x ] + ε ) y=\frac{\gamma}{\sqrt{\operatorname{var}[x]+\varepsilon}} x+\left(\beta \frac{\gamma E[x]}{\sqrt{\operatorname{var}[x]+\varepsilon}}\right) y=var[x]+ε γx+(βvar[x]+ε γE[x])
训练过程(CNN,mlp差不都):开始对一个batch中的所有相同的channel的feature map上所有的像素值做归一化(同一层的同位置feature map的对饮的卷积核共享γβ),之后把参数冻住,再通过上述无偏估计替换掉γβ。

原文:

1.so that different elements of the same feature map, at different locations, are normalized in the same way

2.so for a mini-batch of size m and feature maps of size p × q, we use the effective mini-batch of size m′ = |B| = m · p q. We learn a pair of parameters γ(k) and β(k) per feature map

BN训练过程:
在这里插入图片描述

为什么BN初始化能变大lr?

However, with Batch Normalization, backpropagation through a layer is unaffected by the scale of its parameters. Indeed, for a scalar a,
B N ( W u ) = B N ( ( a W ) u ) \mathrm{BN}(W \mathrm{u})=\mathrm{BN}((a W) \mathrm{u}) BN(Wu)=BN((aW)u)

∂ B N ( ( a W ) u ) ∂ u = ∂ B N ( W u ) ∂ u ∂ B N ( ( a W ) u ) ∂ ( a W ) = 1 a ⋅ ∂ B N ( W u ) ∂ W ( 推 导 一 遍 ) \begin{array}{l} \frac{\partial \mathrm{BN}((a W) \mathrm{u})}{\partial \mathrm{u}}=\frac{\partial \mathrm{BN}(W \mathrm{u})}{\partial \mathrm{u}} \\ \frac{\partial \mathrm{BN}((a W) \mathrm{u})}{\partial(a W)}=\frac{1}{a} \cdot \frac{\partial \mathrm{BN}(W \mathrm{u})}{\partial W} \end{array}(推导一遍) uBN((aW)u)=uBN(Wu)(aW)BN((aW)u)=a1WBN(Wu)

可见a对梯度就没有影响了。

Moreover, larger weights lead to smaller gradients, and Batch Normalization will stabilize the parameter growth.

BN作用:

1.可以使用更大的学习率

2.有正则化的作用,可以免去dropout

3.加快了收敛,提升精度

4.改变了数据分布,使得分布在激活函数敏感区间

其他

5.梯度变得平缓,避免梯度爆炸/消失

6.容易受batch大小影响

修改后的Inception-BN模型

修改点:

1.把5* 5卷积替换成了两个3*3卷积

2.加入了Batch Normalization层

实际部署调整

  1. Increase learning rate.
  2. Remove Dropout.
  3. Reduce the L2 weight regularization.
  4. Accelerate the learning rate decay.
  5. Remove Local Response Normalization
  6. Shuffle training examples more thoroughly.

实验

在这里插入图片描述

BN-Baseline: Same as Inception with Batch Normalization before each nonlinearity.

BN-x5:上述调整+lr0.0075.

BN-x30:lr0.045

BN-x5-Sigmoid:激活函数换成sigmoid(原来relu)

My Conclusion

1.作者并没有明确指出BN层的原理,文章中写的是推断。

2.写文章用词稍微fancy一点。

3.BN层可以直接拿来用,文章的角度可以从框架之外的方向进行思考。

4.动态变化在哪里看不出来,很好的思想,之后问问师兄。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值