BN层原理解析_视频解析接口原理

BN层原理解析_视频解析接口原理前几天看了BN的那篇经典论文《《BatchNormalization_AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。1训练数据为什么要和测试数据同分布?看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前几天看了BN的那篇经典论文《《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。

1 训练数据为什么要和测试数据同分布?

看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角这样子,跟训练数据完全不在同一个分布上面,你觉得泛化能力能好吗?

BN层原理解析_视频解析接口原理

2 为什么白化训练数据能够加速训练进程

如下图,训练数据如果分布在右上角,我们在初始化网络参数w和b的时候,可能得到的分界面是左下角那些线,需要经过训练不断调整才能得到穿过数据点的分界面,这个就使训练过程变慢了;如果我们将数据白化后,均值为0,方差为1,各个维度数据去相关,得到的数据点就是坐标上的一个圆形分布,如下图中间的数据点,这时候随便初始化一个w,b设置为0,得到的分界面已经穿过数据了,因此训练调整,训练进程会加快

BN层原理解析_视频解析接口原理

3 什么是梯度爆炸

如果网络使用sigmod激活函数,误差在向前传递的时候,经过sigmod单元,需要乘sigmod的梯度,而sigmod的梯度最大是0.25,因此越向前传递,误差就越小了,这就是梯度消散,但是梯度爆炸是什么?注意误差在经过全连接或者卷积层时,也要乘以权重w,如果w都比较大,大过sigmod造成的减小,这样越往前误差就越来越大,梯度爆炸了!

4 为什么BN层可以加速网络收敛速度

原理如上面2类似,BN层的计算图如下面所示,x是输入数据,到xhat均值方差归一化,也就是类似2中白化的加速的原理,后面xhat到y其实就是普通的一个线性变换,类似全连接但是没有交叉,将这个线性变换和后面的网络看成一体的,是不是就跟2中情况一样了?如果没有BN层,x直接输入后面的网络,训练过程中x分布的变换必然导致后面的网络去调整学习以来适应x的均值和方差,映入了BN层,xhat是一个归一化的数据,代价就是网络中多了一个线性层y,但是前者带来的性能更加大,因此加速了。

BN层原理解析_视频解析接口原理

BN层原理解析_视频解析接口原理

后面想想,感觉还是有点不清楚,虽然xhat是个归一化分布,但是y不一定是啊,最终是y输入到子网络,对原网络不一定有效吧?这里怀疑真正对加速起作用的是xhat到y的变换,这种单独对维度的线性变换只是在全连接的基础上少了输入输出间的交叉连接,这种形式的变换可能非常有利于分布的调整,如果在网络输入最前端加入这样一层,那岂不是无需对输入进行归一化了?后面有时间进行验证。那是不是x到xhat的变换就可以去掉了呢?不是,x到xhat的变换作用是缓解梯度弥散,这一点可以看下下面一点

5 为什么BN层可以改善梯度弥散

下面xhat到x的梯度公式,可以表示为正常梯度乘一个系数a,再加b,这里加了个b,整体给梯度一个提升,补偿sigmod上的损失,改善了梯度弥散问题。

BN层原理解析_视频解析接口原理BN层原理解析_视频解析接口原理

6 为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

原文中是这样解释的,因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。其实想想也是的,像relu这样的激活函数,如果你输入的数据是一个高斯分布,经过他变换出来的数据能是一个什么形状?小于0的被抑制了,也就是分布小于0的部分直接变成0了,这样不是很高斯了。

BN层原理解析_视频解析接口原理

作者在一个mnist上面也做了一个实验,用三个100个神经元的全连接隐藏层,每个输出接sigmoid非线性化,初始化W为小高斯值,最后隐藏层连接一个输出10个值的全连接,交叉熵损失。BN层用在每个全连接层的输出上,最后统计了训练速度和sigmoid的输入分布变化如下图,可以看到没有用BN的时候,sigmoid的输入分布是有剧烈调整的,正是这种剧烈调整拖慢了训练速度。最后训练完毕时,方差和均值都不在有大的变化,直接取一个均值用在推断上就可以了

BN层原理解析_视频解析接口原理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • opengl pushmatrix(gltranslatef函数)

    http://anony3721.blog.163.com/blog/static/511974201133095555708/题外话:学习OpenGL有两个礼拜了,总结下才发现仅仅明白了其基本概念。光是GDI绘图中的窗口、视口以及设备环境的概念,就足足困扰我了一个礼拜,其实明白了只后发现一句话就描述清楚了,根本不像MSDN和google上讲的难的很。高手们可能是不屑于基础概念的讲解或者根本不

    2022年4月17日
  • 4个世界上最长域名的网站是_域名最长多少个字符

    4个世界上最长域名的网站是_域名最长多少个字符第一个http://www.llanfairpwllgwyngyllg…iliogogogoch.co.uk/这个域名属于一个旨在宣传英国圭内斯郡安格尔西的一个同名村庄,这个名字的意思是“位于急流附近白榛树山谷中的圣玛丽亚教堂和红山洞附近的圣泰西里奥教堂。”第二个http://www.111111111111111111111…11111111111111.com/这个域

    2022年10月3日
  • 区块链入门——比特币科普

    区块链入门——比特币科普

    2022年3月12日
  • 如何通过 User-Agent 识别百度蜘蛛

    如何通过 User-Agent 识别百度蜘蛛如果有大量的百度蜘蛛抓取网站就需要注意了:有可能是其他爬虫伪造百度蜘蛛恶意抓取网站。如果遇到这种情况,这时候就需要查看日志来确定是不是真正的百度蜘蛛(baiduspider)。搜索引擎蜘蛛、用户访

    2022年7月3日
  • DVWA登录出现allow_url_fopen = On allow_url_include = On的错误

    DVWA登录出现allow_url_fopen = On allow_url_include = On的错误进入到DVWA页面中:点击下图中按钮Creat/ResetDatabase创建数据库:出现如下错误提示:CouldnotconnecttotheMySQLservice.Pleasechecktheconfigfile.12意思是:无法连接到MySQL服务。请检查你的config文件。问题解决此时我们找到config文件下的config.inc.php文件打开进行操作,将$DVWA[‘db_password’]改为和phpstudy_pro中数据

    2022年7月16日
  • Vue大数据可视化(大屏展示)解决方案

    Vue大数据可视化(大屏展示)解决方案一个基于vue、datav、Echart框架的大数据可视化(大屏展示)模板,最近更新了详细的介绍说明,实现大数据可视化。通过vue组件实现数据动态刷新渲染,内部图表可自由替换。部分图表使用DataV自带组件,可自由进行更改,持续更新…项目地址:vue-big-screen(码云)一、项目描述一个基于vue、datav、Echart框架的”数据大屏项目”,通过…

    2022年6月7日

发表回复

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

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