论文心得:BatchNorm及其变体

论文心得:BatchNorm及其变体本文记录BatchNormalization及其四个拓展,分别是BatchRenormalization、AdaBN、WeightNormalization、NormalizationPropagation

大家好,又见面了,我是你们的朋友全栈君。

本文记录BatchNormalization的总结思考及其拓展,目前收录BatchRenormalization、AdaBN、WeightNormalization、NormalizationPropagation。

0.BatchNormalization
 

该层的设计是为了解决Internal Covariate Shift的问题,这里首先要区分一下Internal Covariate Shift与Covariate Shift,前者是对层与层之间数值偏移的描述,batchnorm对数值层面做了高斯均衡化,而后者是迁移学习中解决原空间和目标空间边缘分布不一致的一个分支问题,是对不同空间表征的偏移的描述。机器学习领域有个很重要的假设,就是独立同分布假设(训练测试数据分布相同)。如果有Internal Covariate Shift问题存在,则每层数据不再满足独立同分布,且输入分布的不断变化会降低收敛速度,某些层过早进入饱和区。解法例如pca白化,就可以去除特征之间的相关性以及相同均值方差,但速度太慢。于是诞生了batchnorm,batchnorm前传公式如下,反传由标准的链式法则给出(本文省略):

论文心得:BatchNorm及其变体

因为输入变得很稳定,促进了模型的收敛并一定程度上阻止了过拟合,作者猜测BatchNormalization层的雅可比矩阵的奇异值接近1,这加速了模型的收敛速度。 从Bayesian的角度去解释batchnorm,首先引出PRML中解释的L2-NORM的由来:【似然函数*先验分布=后验分布,log(后验分布)=log(似然函数)+L2-NORM】,可知在log域的L2-NORM(即先验分布)对应原值域的高斯分布,因此目标函数的拟合相当于后验分布的拟合,对weight的L2-NORM 正则项是对weight先验分布的拟合,这种拟合压制了训练中weight的波动,而原值域的变化不仅依赖于weight,也依赖于输入X,因此batchnorm就是一种对X波动的压制,从这个意义上,batchnorm便可解释为对X的正则项。这种压制其实并不是刚刚出现的,所谓白化操作就是对输入数据的normalize,而batchnorm简化了其计算。对后验分布的拟合使得模型去更快地适应数据,于是就加速了收敛。
实际用的时候再加入scale和shift,使得BN能够表达identity,这样卷积层inference时就不再依赖于miniBatch,如下式所示:

论文心得:BatchNorm及其变体

而scale与shift也对应着Bayesian解释,由于采用部分数据的分布作为所有数据的先验分布,其实便破坏了整个空间的原始表征,scale与shift就是在逆转对表征的破坏,逆转的程度由模型在训练中自己调整。通常将带scale和shift的BN层加在非线性激活函数之前,在caffe的官方版本中将bias转移到了batchnorm后面的scale层中。

BN的两个缺陷也很明显,因为是对mini-batch求统计信息,因此具有数据依赖性,数据的随机性会导致训练的不稳定,且batch=1时无法使用。而各种变体本质上就是在寻找Natural Gradient,在加速收敛的同时,保证模型的泛化能力。

1.BatchRenormalization

本文系batch norm原作者对其的优化,该方法保证了train和inference阶段的等效性,解决了非独立同分布和小minibatch的问题。其实现如下:

论文心得:BatchNorm及其变体
其中r和d首先通过minibatch计算出,但stop_gradient使得反传中r和d不被更新,因此r和d不被当做训练参数对待。试想如果r和d作为参数来更新,如下式所示:
论文心得:BatchNorm及其变体
这样一来,就相当于在训练阶段也使用moving averages μ和σ,这会引起梯度优化和normalization之间的冲突,优化的目的是通过对权重的scale和shift去适应一个minibatch,normalization则会抵消这种影响,而moving averages则消除了归一化后的激活对当前minibatch的依赖性,使得minibatch丧失了对每次权重更新方向的调整,从而使得权重尺度因normalization的抵消而无边界的增加却不会降低loss。而在前传中r和d的仿射变换修正了minibatch和普适样本的差异,使得该层的激活在inference阶段能得到更有泛化性的修正。
这样的修正使得minibatch很小甚至为1时的仍能发挥其作用,且即使在minibatch中的数据是非独立同分布的,也会因为这个修正而消除对训练集合的过拟合。
从Bayesian的角度看,这种修正比需要自己学习的scale和shift能更好地逆转对表征的破坏,且这种逆转的程度是由minibatch数据驱动的,在inference时也能因地制宜,而scale和shift对不同数据在inference时会施加相同的影响,因此这样的修正进一步降低了不同训练样本对训练过程的影响,也使得train和inference更为一致。

2.AdaBN

 这个变体不是为了解决BN带来的缺陷,而是解决了一个BN没能很好解决的问题,就是当训练图像和测试图像不是同一个源时,需要不小的数据集进行finetune,AdaBN采用了一个简单粗暴的方法缓解了跨域的transfer learning,即domain adaption问题,公式如下:

论文心得:BatchNorm及其变体

其中j表示每一个神经元。 作者在实验中验证了该方法的有效性,adaption之后训练域和测试域的数据混杂地更为均衡,同时同一层的神经元之间的KL离散度降低,减小了域的差异。然而作者并没有给出详细的理论性的解释。

下表是KL离散度的对比:

论文心得:BatchNorm及其变体

3.WeightNormalization

作者将每个neuron的权值normalize为1,weight的优化便以另一种表达:

论文心得:BatchNorm及其变体

 更新公式如下:

论文心得:BatchNorm及其变体

如此便解耦了权重向量的范数和方向,加速了收敛,保证了gradient的稳定,不会爆炸或者消失;同时解决了BN的数据依赖性,计算开销也降低了许多。相比于BN,该方法没能将每一层特征尺度固定住,因此作者设计了一种初始化方法,在初始化时利用了mini-batch的信息,保证了features在初始化时为0均值,1方差。作者在实验部分验证了该方法在CIFAR-10、Convolutional VAE、DRAW、DQN等模型中都取得了更好的结果;作者同时提出了两个extensions,一个是对参数g引入log-scale的参数s,即$g=e^(cs)$;一个是给v的范数设定一个范围,这样虽然延长了参数更新,但收敛后的测试性能会比较好。

4.NormalizationPropagation
该方法的论文详细论述了比WeightNormalization更多的理论意义和直观解释,主要思想就是对输入数据做normalization,然后将normalization的效果传递到后续的层中,下式是对该方法有效性的理论分析命题:
论文心得:BatchNorm及其变体

由上式可以看出:1)协方差矩阵近似是一个误差有界的对角矩阵,误差大小由W控制2)如果希望u有单位方差,则要除一个$||W_i||_2^2$,这实际上就是对WeightNormalization做出了解释。上式中的bound第一项在W归一化后为0了,第二项是与W的coherence(即列矩阵的相关系数)有关,而真实的数据确实比较低,这便又印证了1)。 下式以Relu为例,给出了数据进过非线性单元后的调整:

论文心得:BatchNorm及其变体

 然后,作者严格地论述了NormalizationPropagation的雅可比矩阵的奇异值接近1(1.21)。最后给出了完整的全连接和卷积层的变换公式:

论文心得:BatchNorm及其变体


图1是试验中的各层mean对比,NormProp的各层mean达到稳定的速度更快且更接近0:

论文心得:BatchNorm及其变体
 

5.后言
综上,Normalization在深度网络中的价值是值得深度挖掘下去的。正如WeightNormalization文中提到的,从优化方面,基于一阶梯度的优化高度依赖于目标函数的曲率,如果目标在最优点的hessian矩阵的条件数太小,就是病态曲率,不同的参数化方法就会导致不同的曲率,通过Normalization来优化参数化的方法也不失为一个好的策略。
文献
1.Revisiting Batch Normalization For Practical Domain Adaptation
2.Weight Normalization: A Simple Reparameterizationto Accelerate Training of Deep Neural Networks
3.Normalization Propagation: A Parametric Technique for Removing Internal Covariate Shift in Deep Networks
4.
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
5.http://www.cnblogs.com/neopenx/p/5211969.html
6.Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-NormalizedModels
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138951.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 160个练手CrackMe-034

    160个练手CrackMe-0341 无壳 FileKey 类型 2 OD 载入 00 6A00push0x0 hTemplateFil NULL00 push0x80 Attributes NOR

    2025年6月18日
    6
  • Ubuntu下使用IntelliJ IDEA的正确姿势

    Ubuntu下使用IntelliJ IDEA的正确姿势

    2022年3月7日
    35
  • 单应性矩阵的理解及求解3「建议收藏」

    http://www.sohu.com/a/223594989_100007727前面文章《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:其中,u、v表示像素坐标系中的坐标,s表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,R,t表示相机外参,Xw、Yw、Zw(假设标…

    2022年4月18日
    93
  • u盘拒绝访问怎么解决win11_u盘无权限访问

    u盘拒绝访问怎么解决win11_u盘无权限访问使用U盘启动盘安装系统时需要用到U盘,但是当我们将U盘插上电脑,结果出现拒绝访问的情形,别说是使用U盘启动盘重装系统了,连U盘基础的文件存储功能都无法使用。当U盘出现拒绝访问怎么解决呢?就此问题,下面小编分享u盘拒绝访问没有权限的原因和解决方法。U盘出现拒绝访问怎么解决1、U盘问题1)鼠标右键单击U盘盘符,在右键菜单中点击属性。2)在弹出的属性窗口中点击“工具”选项卡,再点击“开始检查”按钮,如下图所示:3)接着勾选“自动修复文件系统错误”和“扫描并尝试恢复坏扇区”并点击“开始”按钮(1)4)

    2022年10月1日
    4
  • ServletContextListener作用[通俗易懂]

    ServletContextListener作用[通俗易懂]ServletContext被Servlet程序用来与Web容器通信。例如写日志,转发请求。每一个Web应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的ServletContext的最大应用是Web缓存—-把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。Serv…

    2022年6月11日
    30
  • 2021DIY电脑配置入门篇(包含各cpu显卡天梯图对比)

    2021DIY电脑配置入门篇(包含各cpu显卡天梯图对比)前言:我本来以为一篇文章可以把电脑配置讲清楚的,但是发现电脑比我想象的要复杂,所以可能分了几篇来写如何查看自己的电脑配置最简单的右键桌面此电脑->点击属性下载个电脑管家等电脑助手软件也可以查看详细配置如何DIY自己的第一台电脑篇幅有限,这里我只详细分析一台电脑的核心配置(CPU、主板、显卡),外加内存定好预算对于电脑来说,预算是最重要的!没有预算,一切都是空谈。没预算默认外星人Area51M(价格在2万左右),现在电脑往往充当一种娱乐需求,相对来说比较次要,因此大多数人配电脑.

    2022年7月12日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号