热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BatchNormalization:AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift论文学习

BatchNormalization:AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift文章试图解决的
Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift

文章试图解决的问题


  • 内部协变量转移(internal covariate shift):在训练进行时,网络中的参数不断改变,导致每一层的输入分配会进行变化,这个现象被称作内部协变量转移
  • 由于分布变化,所以需要更小的学习率,小心的初始化。但导致训练速度降低,本文就是要解决这个问题
  • 内部协变量转移不符合IID(独立同分布)的假设

常见的优化


  • 我们都知道,对初始数据减均值或者白化可以加快学习速度

这里写图片描述
    • 减均值:如上b,紫色的先是拟合线,但是训练一开始生成的线是在原点的附近,所以要变成紫色的先要花费较多的时间,所以我们可以让点都集中在原点的附近—减均值
    • 白化:白化有很多种方式:如PCA白化:
      PCA完后再进行方差归一化—>这样的数据基本满足 0均值,单位方差和弱相关性。
      • 作者首先考虑对每一层进行PCA白化:但是这样是不可取的,因为计算量很大,而且在求逆的过程中或许不可导
      • 如果只进行简单的对每一层数据归一化,会降低层的表达能力,以及梯度的作用。因为在计算梯度的时候没有把归一化的梯度考虑进去。
  • 作者想通过Batch Normalization的方式:尝试减少内部协变量转移,通过修复层输入的均值和方差来实现。


优点


  • 协变量转移减少,学习速度更快

  • 通过减小了网络对梯度的依赖,使得可以用更大学习率而不存在发散的风险

  • 减少了对dropout的需要


内容


  • 我们知道对每一层进行白化的不可行,所以我们考虑做两个必要的简化。

    • 1、我们考虑单独normalize每一个特征,使其均值为0,方差为1;而不是在输入输出上共同normalize

    • 对一个d维的input x=(x(1),...x(d))x=(x^{(1)},...x^{(d)})x=(x(1),...x(d)),我们normalize每一维

    x^(k)=x(k)−E[x(k)]Var[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)]

    • 期望和方差在总体的数据集上计算
    • 仅仅是这一个简化,就能加速收敛
    • 这个简化导致数据分布是零均值的,毕竟各层的分布都差不多了
  • 我们知道如果只这样干不行,会降低网络的表达能力,如在sigmoid之前这样干会把sigmoid非线性极值变成线性这里写图片描述

    • 所以我们对每一个激活值x^(k)\hat x^{(k)}x^(k)引进两个参数
      y(k)=γ(k)x^(k)+β(k)y^{(k)}=\gamma^{(k)}\hat x^{(k)}+\beta^{(k)} y(k)=γ(k)x^(k)+β(k)
  • 这些参数和原始网络一起学习,并恢复网络的表达能力

  • 事实上,通过设定γ(k)=Var[x(k)],β(k)=E[x(k)\gamma^{(k)}=\sqrt{Var[x^{(k)}]},\beta^{(k)}=E[x^{(k)}γ(k)=Var[x(k)]

    ,β(k)=E[x(k)是最理想的方法

    • 2、我们这样设置的训练步骤是基于整个网络的,,但是我们在进行SGD的时候是不行的。所以我们有了第二个简化:我们每次用一个Batch(小批量)的均值和方差来作为对整个数据集的估计

然后我们在测试和训练的时候是不一样的,因为训练的时候可以用mini_batch,而测试的时候我们用的是一张张的图片,所以此时直接用所有的均值和方差来做无偏估计,然后训练的网络要用net.eval()来使得参数不变

  • eval会把网络的参数固定住,比如dropout和BN的参数,不会取平均

推荐阅读
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • UVa 11683: 激光雕刻技术解析
    自1958年发明以来,激光技术已在众多领域得到广泛应用,包括电子设备、医疗手术工具、武器等。本文将探讨如何使用激光技术进行材料雕刻,并通过编程解决一个具体的激光雕刻问题。 ... [详细]
  • Adversarial Personalized Ranking for Recommendation
    目录概主要内容基础对抗扰动对抗训练细节代码HeX.,HeZ.,DuX.andChuaT.Adversarialpersonalizedrankingforrecommendatio ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
author-avatar
buddha覀mito_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有