论文解析:Inception_V2(Batch Normalization)

BatchNormalization(BN)层的引入旨在解决神经网络中内部协变量漂移问题,通过稳定每层输入的分布,提高训练效率。BN层在每个小批量数据上进行标准化,保持输入的零均值和单位方差,同时引入可学习参数以保持网络的表达能力。在推理阶段,BN层使用训练集的整体统计信息,确保输出的稳定性。BN层可以增大学习率,减少对初始化权重的敏感性,甚至替代dropout层,允许使用如sigmoid这样的饱和激活函数。BN层在训练和测试时的算法有所不同,确保了模型在不同数据分布下的适应性。

Incepiont_V2(Batch Normalization)

痛点

 当我们使用SGD来更新神经网络的参数时,默认隐含着一个最基本的假设:minibatch上的数据分布和原始数据集中的数据分布是类似(一致)的,我们可以通过在minibatch上计算参数的梯度来更新网络对整个数据集的参数。那如果测试时数据的原始分布发生了较大的变化,那么训练所得的网络参数就会水土不服,面临covariate shift问题,需要通过domain adaptation来解决。而如果我们将整个神经网络的每一层都视为一个单独的存在,其训练和测试时输入的分布差异情况也会对其训练效率和最终表现有着较大影响,训练时由于输入的分布在不断变化,梯度的更新过于无序;测试时和训练时目标不一致,表现不佳。这种由于网络内部层输入分布发生变化造成的问题定义为 Internal covariate shift。作者提出了BN层来使得网络内每层的输入分布是固定的,给训练带来以下几项增益:

  1. 由于输入分布固定,减少了梯度消失也就是激活函数死区的可能,我们可以使用更大学习率来训练网络。
  2. 减少了对参数初始权重的依赖,不用怕梯度爆炸和消失
  3. 可以使用存在饱和区域的激活函数。

解决方案

 首先确定了我们的设计目标是希望网络内部每层的输入分布都应该是稳定的,而在LeCun之前的研究中论述过当网络的输入经过了白化,满足零均值、方差为1、去相关时,网络的训练收敛速度最快,因此我们希望设计一个模块使得每层网络的输入都应该是白化的。

原始白化

 首先考虑一下最原始的方案,如果我们只是要求网络的输入是白化的,直接对每层的输入数据进行归一化操作即可。但为此在前向传播时我们要计算整个训练集上的协方差矩阵,Cov[x]=Ex∈χ[xxT]−E[x]E[x]TCov[x]=E_{x\in \chi}[xx^T]-E[x]E[x]^TCov[x]=Exχ[xxT]E[x]E[x]T,这无疑是十分耗时的。而在反向传播时如果我们不考虑白化参数μ,σ2\mu,\sigma^2μ,σ2和输入的关系会可能使得网络的损失不变,而参数不断更新直到爆炸,举个例子:

假定某层网络的输入为μ\muμ,输出为x=μ+bx=\mu+bx=μ+b,那么如果我们对其输出(下一层输入)进行零均值处理,得到x^=x−E[x]\hat{x}=x-E[x]x^=xE[x]。而在反向传播时b=b+Δb,Δb∝−∂loss∂bb=b+\Delta b ,\Delta b \propto -\frac{\partial loss}{\partial b}b=b+Δb,Δbb

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值