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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos7中firewall防火墙详解和配置_centos8 防火墙

    centos7中firewall防火墙详解和配置_centos8 防火墙一、ipset概述ipset与iptableiptables是在Linux内核中配置防火墙规则的用户空间工具。在内核版本更新到2.4以来,iptable一直作为系统中主要的防火墙解决方案。CentOS7将原来的iptable替换为firewall,而firewall提供了对ipset的支持。ipset相当于iptable的扩展,它和iptable处理方式,iptable通过链表…

    2022年9月27日
    2
  • 2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python python 入门教程非常详细

    2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python python 入门教程非常详细python入门教程,python入门教程,python入门教程,python入门教程,python入门教2.无门槛学会数据类型与输入、输出函数,滚雪球学Pythonpython入门

    2022年7月6日
    17
  • Linux发邮件-ubuntu和centos

    Linux发邮件-ubuntu和centosLinux发邮件–ubuntu和centos当我用公司的服务器和虚拟机都尝试过发邮件之后,发现真是坑,Ubuntu和centos发邮件,安装配置都是有区别的;注意:这里是用第三方邮件发送邮件。直接上表格来对比吧,这个步骤亲测可用的,但是也要注意mailx的版本号。1、查看系统版本cat/etc/issue或uname-a2、查看邮件安装包版本(1)ub…

    2022年10月20日
    0
  • setCapture 和 releaseCapture

    setCapture 和 releaseCapturesetCapture函数的作用就是将后续的mouse事件都发送给这个对象,releaseCapture就是将鼠标事件还回去,由document、window、object之类的自行来处理。这样就保证了在拖动的过程中,不会由于经过了其它的元素而受到干扰另外,还有一个很重要的事情是,在Win32上,mousemove的事件不是一个连续的,也就是说,并不是我们每次移动1px的鼠标指针,就会发生一个mousemove,windows会周期性检查mouse的位置变化来产生mousemove的事件。所以,如

    2022年5月3日
    50
  • 变量定义规范_类型转换运算符

    变量定义规范_类型转换运算符变量定义规则定义方式驼峰体下划线你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种,第一种AgeOfOldboy咋一看以为是AngelaBaby定义变量不好的方式举例变量名为中文、

    2022年8月4日
    11
  • java calendar 设置小时_Java Calendar类的时间操作[通俗易懂]

    java calendar 设置小时_Java Calendar类的时间操作[通俗易懂]JavaCalendar类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单,演示了获取时间,日期时间的累加和累减,以及比较。注意事项:Calendar的month从0开始,也就是全年12个月由0~11进行表示。而Calendar.DAY_OF_WEEK定义和值如下:Calendar.SUNDAY=1Calendar.MONDAY=2Calend…

    2022年4月30日
    210

发表回复

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

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