Inception v2&Batch Normalization论文阅读笔记

本文探讨了深度学习中的内部协变量偏移问题及其解决方案Batch Normalization(BN)。介绍了BN如何通过稳定输入分布来加速训练过程,并允许使用更高的学习率。此外,还讨论了BN在实际应用中的调整建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]=EB[μB]var⁡[x]=mm−1EB[σB2] \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,
BN(Wu)=BN((aW)u) \mathrm{BN}(W \mathrm{u})=\mathrm{BN}((a W) \mathrm{u}) BN(Wu)=BN((aW)u)

∂BN((aW)u)∂u=∂BN(Wu)∂u∂BN((aW)u)∂(aW)=1a⋅∂BN(Wu)∂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.动态变化在哪里看不出来,很好的思想,之后问问师兄。

<think>好的,我现在需要回答用户关于Inception v2模型的架构和版本特点的问题。首先,我应该回顾已有的知识,并查看用户提供的引用资料。用户提到了引用[2]、[3]、[4],其中引用[2]提到了Inception v1的源码链接,引用[3]讨论了Inception V2/V3的论文,引用[4]则详细介绍了Batch Normalization的内容。 首先,我需要确定Inception v2的主要改进点。根据记忆,Inception v2和v3通常在同一篇论文中被提出,主要改进包括更深的网络结构、分解卷积(如将5x5分解为两个3x3)、引入Batch Normalization等。不过用户提供的引用[3]可能直接提到这些内容。根据引用[3]的标题“Inception V2/Inception V3:Rethinking the Inception Architecture for Computer Vision”,说明该论文同时涵盖了v2和v3的设计,而用户的问题集中在v2上。 接下来,需要确认架构的具体变化。分解卷积可能包括将大卷积核分解为小卷积核的组合,例如将5x5分解为两个3x3,或者使用1xn和nx1的卷积来替代nxn,以减少参数数量。此外,引用[4]提到Batch Normalization(BN)的应用,这可能也是Inception v2的一个关键特点,因为BN可以加速训练并提高模型性能。 另外,用户提供的引用[2]中虽然链接是v1的源码,但可能提到了一些基础结构,而v2可能在此基础上进行改进。引用[3]的表5可能比较了不同模型的性能,但具体架构细节可能需要结合论文内容。 需要注意的是,用户可能混淆了Inception v2和v3,因为通常这两个版本是在同一篇论文中提出的。例如,Inception v2可能对应论文中的某些改进步骤,而v3则是进一步的优化。但根据引用[3]的标题,可能将两者合并讨论,因此需要明确区分。 可能的结构要点包括: 1. 分解卷积:将大的卷积核分解为更小的、更高效的结构。 2. 使用Batch Normalization来减少内部协变量偏移,加速训练。 3. 网络结构的优化,如更深的网络,模块设计的变化。 4. 可能的其他优化,如标签平滑(但可能属于v3的部分)。 需要确保回答正确引用用户提供的资料,特别是引用[3]和[4]。例如,分解卷积部分可能引用论文中的设计原则(引用[3]),而Batch Normalization则引用[4]中的内容。 此外,用户要求生成相关问题,需要根据回答内容设计相关问题,如优化方法、其他版本的差异、应用场景等。 现在需要组织这些信息,用中文清晰回答架构和特点,同时正确使用LaTeX格式,并添加引用标识。</think>### Inception v2模型架构及版本特点 #### 1. **核心设计思想** Inception v2的核心改进基于**因子分解卷积(Factorized Convolutions)**和**批量归一化(Batch Normalization)**两大方向,旨在提升计算效率并增强模型鲁棒性[^3][^4]。 #### 2. **架构改进** - **分解大卷积核** 将较大的卷积核拆分为更小的组合以减少参数量: - 将$5 \times 5$卷积分解为两个连续的$3 \times 3$卷积,参数量减少28%。 - 使用**非对称卷积(Asymmetric Convolution)**,例如将$n \times n$卷积分解为$1 \times n$和$n \times 1$的组合(如用$1 \times 3$ + $3 \times 1$替代$3 \times 3$),进一步降低计算复杂度。 - **优化Inception模块** Inception模块中引入更细粒度的分支设计,例如: - 在部分分支中使用**并行卷积层**(如$1 \times 1$、$3 \times 3$)提取多尺度特征。 - 增加**辅助分类器**以缓解梯度消失问题。 #### 3. **关键技术创新** - **批量归一化(Batch Normalization, BN)** 在每一层的输入前增加BN层,标准化数据分布以解决**内部协变量偏移**问题。这使得: - 允许使用更高的学习率,加速训练收敛[^4]。 - 减少对参数初始化的依赖,并部分替代Dropout的正则化作用[^4]。 - **标签平滑(Label Smoothing)** (注:此技术可能属于Inception v3的改进,需结合论文确认) #### 4. **性能对比** 根据论文实验,Inception v2在ImageNet数据集上实现了更低的分类错误率,且训练速度显著提升(例如减少14倍训练步骤达到相同精度)。表5中多模型集成的结果进一步验证了其有效性[^3]。 ```python # 示例:Inception模块中的因子分解卷积(伪代码) def inception_v2_block(inputs): branch1 = Conv2D(64, (1,1))(inputs) branch2 = Conv2D(64, (1,1))(inputs) branch2 = Conv2D(96, (3,3))(branch2) branch3 = Conv2D(64, (1,1))(inputs) branch3 = Conv2D(96, (1,3))(branch3) # 非对称卷积 branch3 = Conv2D(96, (3,1))(branch3) return Concatenate()([branch1, branch2, branch3]) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值