解读Batch Normalization

【活动】Python创意编程活动开始啦!!!     CSDN日报20170424 ——《技术方向的选择》    程序员4月书讯:Angular来了!

解读Batch Normalization

5262人阅读 评论(1) 收藏 举报
本文章已收录于:
分类:
作者同类文章X

    目录(?)[+]

    1. 目录
      1. 1-Motivation
      2. 2-Normalization via Mini-Batch Statistics
        1. 测试
        2. BN before or after Activation
      3. 3-Experiments

    目录

      • 目录
        • 1-Motivation
        • 2-Normalization via Mini-Batch Statistics
          • 测试
          • BN before or after Activation
        • 3-Experiments

    本次所讲的内容为Batch Normalization,简称BN,来源于《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,是一篇很好的paper。

    1-Motivation

    作者认为:网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。作者将分布发生变化称之为 internal covariate shift

    大家应该都知道,我们一般在训练网络的时会将输入减去均值,还有些人甚至会对输入做白化等操作,目的是为了加快训练。为什么减均值、白化可以加快训练呢,这里做一个简单地说明:

    首先,图像数据是高度相关的,假设其分布如下图a所示(简化为2维)。由于初始化的时候,我们的参数一般都是0均值的,因此开始的拟合y=Wx+b,基本过原点附近,如图b红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。如果我们对输入数据先作减均值操作,如图c,显然可以加快学习。更进一步的,我们对数据再进行去相关操作,使得数据更加容易区分,这样又会加快训练,如图d。
    这里写图片描述

    白化的方式有好几种,常用的有PCA白化:即对数据进行PCA操作之后,在进行方差归一化。这样数据基本满足0均值、单位方差、弱相关性。作者首先考虑,对每一层数据都使用白化操作,但分析认为这是不可取的。因为白化需要计算协方差矩阵、求逆等操作,计算量很大,此外,反向传播时,白化操作不一定可导。于是,作者采用下面的Normalization方法。

    2-Normalization via Mini-Batch Statistics

    数据归一化方法很简单,就是要让数据具有0均值和单位方差,如下式:
    这里写图片描述
    但是作者又说如果简单的这么干,会降低层的表达能力。比如下图,在使用sigmoid激活函数的时候,如果把数据限制到0均值单位方差,那么相当于只使用了激活函数中近似线性的部分,这显然会降低模型表达能力。
    这里写图片描述

    为此,作者又为BN增加了2个参数,用来保持模型的表达能力。
    于是最后的输出为:
    这里写图片描述
    上述公式中用到了均值E和方差Var,需要注意的是理想情况下E和Var应该是针对整个数据集的,但显然这是不现实的。因此,作者做了简化,用一个Batch的均值和方差作为对整个数据集均值和方差的估计。
    整个BN的算法如下:
    这里写图片描述
    求导的过程也非常简单,有兴趣地可以自己再推导一遍或者直接参见原文。

    测试

    实际测试网络的时候,我们依然会应用下面的式子:
    这里写图片描述
    特别注意: 这里的均值和方差已经不是针对某一个Batch了,而是针对整个数据集而言。因此,在训练过程中除了正常的前向传播和反向求导之外,我们还要记录每一个Batch的均值和方差,以便训练完成之后按照下式计算整体的均值和方差:
    这里写图片描述

    BN before or after Activation

    作者在文章中说应该把BN放在激活函数之前,这是因为Wx+b具有更加一致和非稀疏的分布。但是也有人做实验表明放在激活函数后面效果更好。这是实验链接,里面有很多有意思的对比实验:https://github.com/ducha-aiki/caffenet-benchmark

    3-Experiments

    作者在文章中也做了很多实验对比,我这里就简单说明2个。
    下图a说明,BN可以加速训练。图b和c则分别展示了训练过程中输入数据分布的变化情况。
    这里写图片描述

    下表是一个实验结果的对比,需要注意的是在使用BN的过程中,作者发现Sigmoid激活函数比Relu效果要好。
    这里写图片描述

    6
    0

    我的同类文章

    http://blog.csdn.net
    • CNN不能识别Negative图像2017-04-10
    • 深度模型一些新的运行框架或者辅助库工具等2016-11-04
    • 深度学习——PReLU激活2016-05-08
    • GoogLeNet系列解读2016-02-25
    • 多尺度竞争卷积2016-01-12
    • 思考深度学习的泛化能力2017-02-20
    • 深度学习——MSRA初始化2016-05-08
    • 深度学习——Xavier初始化方法2016-05-07
    • 系列解读Dropout2016-01-25
    • mxnet学习记录【1】2015-12-01

    参考知识库

    img

    软件测试知识库

    img

    算法与数据结构知识库

    更多资料请参考:
    猜你在找
    使用决策树算法对测试数据进行分类实战
    使用决策树算法对测试数据进行分类实战
    《C语言/C++学习指南》加密解密篇(安全相关算法)
    数据结构与算法在实战项目中的应用
    C语言系列之 字符串相关算法
    深入浅出深度学习中的Batch Normalization使用
    Batch Normalization 学习
    Batch Normalization导读
    Batch Normalization 神经网络加速算法
    Batch Normalization导读
    关闭
    查看评论
    1楼 meadl 2016-11-23 18:20发表 [回复] [引用] [举报]
    博主 具体到一个batch,假设为20,要对每个map在激活前使用BN,我要对y=wx+b的中的y求和,然后除以20 ,这样就是这个神经元的均值吗?那么方差是多少了?难道把输入的20张map看成一个数来求方差吗?比如2*1的向量方差是2*2的呀
    发表评论
    • 用 户 名:
    • jqw11
    • 评论内容:
    • 插入代码
      HTML/XMLobjective-cDelphiRubyPHPC#C++JavaScriptVisual BasicPythonJavaCSSSQL其它
    •   
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    快速回复 TOP
    核心技术类目
    全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云计算iOS6Rackspace Web AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510307.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)

    承接上一篇SSD介绍:SSDcaffe︱Single Shot MultiBox Detector 目标检测(一) 如果自己要训练SSD模型呢,关键的就是LMDB格式生成,从官方教程weiliu89/caffe来看,寥寥几行code,但是前面的数据整理…

    sdut 双向队列(STL)

    deque<ll>q;//定义一个双向队列q&#xff0c;类型为long long q.push_front(a);//将a从队首插入队列 q.push_back(a);//将a从队尾插入队列 q.pop_front();//队首弹掉一个元素 q.pop_back();//队尾弹出一个元素 aq.front();//返回队首元素 aq.back();//返回队尾元素 aq.si…

    pip install scikit-image on windows 失败 解决方案

    到官网下载包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-image 我们下载 scikit_image‑0.13.0‑cp35‑cp35m‑win_amd64.whl 也可到我的CNDS下载 安装时会出现一下错误 scikit_image-0.13.0-cp34-none-win_amd64.whl is not a supported wheel on this platform…

    Caffe训练源码基本流程

    苏的专栏 致力于学习计算机视觉、模式识别、机器学习、深度学习相关技术&#xff1a;&#xff1a;&#xff1a;&#xff1a;希望结识更多同道中人。 QQ&#xff1a;2816568984 微信&#xff1a;Suc1011 目录视图 摘要视图 订阅 【活动】2017 CSDN博客专栏评选 【评论送书】…

    ubuntu16.04下安装opencv3.2版本

    1、下载OpenCV的源码 OpenCV官网上有linux版本的源码包可以下载&#xff0c;不过最好是从git上下载&#xff0c;这样可以保证下载得到的是最新的代码&#xff1a;1 wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip 2 unzip opencv.zip 2、编译安装…

    windows 静态IP设置

    1.打开cmd&#xff0c;输入ipconfig 记录 IP address 子网掩码 网关 打开 wlan 属性 选中一个网络右键 “属性” 设置 ipv4&#xff0c;选择“使用下面的IP地址” 对应填写 ip地址 子网掩码 网关 tips&#xff1a;DNS建议和网关一样

    window 远程linux

    1.我们需要在Linux安装ssh服务 sudo apt-get install openssh-server 2.然后开启ssh服务 sudo /etc/init.d/ssh start 3.在window上安装PUTTY 下载网址 4.填写Linux ip 查看ip: 在Linux输入&#xff1a;ifconfig 5.然后填写登陆Linux的账户名和密码 大功告成。。。。。…

    赫夫曼编码长度计算问题?

    例题&#xff1a;一组字符(a,b,c,d)在文中出现的次数分别为(7,6,3,5),字符&#xff07;d&#xff07;的哈夫曼编码的长度为&#xff1f; 题解&#xff1a; 首先构造huffman树 每一步都将所有数字排序 方法如下: 1: 3 5 6 7 2: 6 7 8 / \ 3 5 3: 8 13 / \ / \ 3 5 6 7 4: 21 /…

    windows + cmake + vs2019 编程

    1.安装minGW64 2.安装cmake 3.安装vs2019 4.组建代码文件结构&#xff1a; 5.在build 文件下打开git bash&#xff0c;执行一下指令 cmake .. -G"Visual Studio 16 2019" tips( vs2017 对应 cmake .. -G"Visual Studio 15 2017" ) cmake 模板…

    所感

    记住别太善良了&#xff0c;别太大方了&#xff0c;也别太能干了&#xff0c;时间久了人家会觉得&#xff0c;你做的一切都是应该的。即使有一天你撑不住&#xff0c;哭了累了&#xff0c;也没人心疼你。 因为在他们眼里这都是你愿意的。有时候心眼也别太好了不要什么事都为别人…

    享受孤独

    今天看见网易云音乐一个 有趣的活动。。。突发其感参与了评论“孤独”这个话题&#xff1a;

    使自己的注意力集中方法

    英国Kent大学最近有一篇文章对注意力做出了详尽的分析&#xff0c;关于如何保持专心养成好习惯的&#xff0c;其中包括了如下几点建议&#xff1a; 养成好习惯&#xff1a;养成在固定时间、固定地点专心学习工作的好习惯。如果可能&#xff0c;在进入学习或者工作状态前做一些小…

    PCL “(”:“::”右边的非法标记 和 E2512 功能测试宏的参数必须是简单标识符

    PCL “(”:“::”右边的非法标记 解决方法&#xff1a; 项目属性 ——> C/C ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关 NOMINMAX&#xff09; E2512 功能测试宏的参数必须是简单标识符 解决方法&#xff1a; 将SDL 设置为否。

    普通本科生应该坚持ACM吗?知乎

    这是本人当初学ACM有疑惑从知乎看见这一篇文章&#xff0c;从中解决了自己的疑惑&#xff0c;虽然是粘贴复制&#xff0c;但是我觉得我们可以从里面找出自己想要的答案&#xff01; 非211一本学校&#xff0c;软件工程专业。学校搞ACM的水平不高&#xff0c;最好的大概就是区域…

    解决虚拟机打开不了?提示VMware Workstation cannot connect to the virtual machine的问题

    解决方法&#xff1a; 从提示消息我们可以看到&#xff0c;问题在于VMware授权服务没有开启&#xff0c;具体处理方法如下&#xff1a; No1. "This PC&#xff08;我的电脑&#xff09;"---右键"manage&#xff08;管理&#xff09;"---"Service and…

    Redis-3.2.4服务搭建

    1.下载安装包并解压 全部版本地址&#xff1a;http://download.redis.io/releases 安装包下载&#xff1a; http://download.redis.io/releases/redis-3.2.4.tar.gz 我们这里使用3.2.4 2.编译安装 cd redis-3.2.4 make && make install 可能异常&#xff1a;&…

    Android Fragment 真正的完全解析(上)

    转载请标明出处&#xff1a;http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现&#xff0c;曾经有段时间&#xff0c;感觉大家谈什么都能跟Fragment谈上关系&#xff0c;做什么都要问下Fragment能实现不~~~哈哈&#xff0c;是不是有点过~~~ 本篇博…

    Hbase Import导入数据异常处理-RetriesExhaustedWithDetailsException

    CDH显示 问题导致原因&#xff1a; hbase org.apache.hadoop.hbase.mapreduce.Import -Dmapred.job.queue.nameetl crawl:wechat_biz /hbase/test4 执行import时&#xff0c;短时间内写入数据量过大导致写入异常。 18/09/11 09:44:27 INFO mapreduce.Job: Task Id : attempt_…

    Android RecyclerView 使用完全解析 体验艺术般的控件

    转载请标明出处&#xff1a; http://blog.csdn.net/lmj623565791/article/details/45059587&#xff1b; 本文出自:【张鸿洋的博客】 概述 RecyclerView出现已经有一段时间了&#xff0c;相信大家肯定不陌生了&#xff0c;大家可以通过导入support-v7对其进行使用。 据官方的…

    三维刚体变换

    1.旋转向量&#xff1a; 满足以下关系 (E单位阵) 进一步得到&#xff1a; p经过旋转和平移得到,公式表达如下&#xff1a; ;(t平移矩阵) 我们可以将上面的式子写成齐次&#xff1a; T也成为变换举证&#xff08;transform Matrix&#xff09; 它的反变换可以表示如下&am…