Batch Normalization

BN,Batch Normalization,就是在深度神经网络训练过程中使得每一层神经网络的输入保持相近的分布。

BN训练和测试时的参数是一样的嘛?

对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。

而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。

对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和bata。

BN训练时为什么不用全量训练集的均值和方差呢?

因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合。

也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。

Dropout

Dropout 是在训练过程中以一定的概率的使神经元失活,即输出为0,以提高模型的泛化能力,减少过拟合。

Dropout 在训练和测试时都需要嘛?

Dropout 在训练时采用,是为了减少神经元对部分上层神经元的依赖,类似将多个不同网络结构的模型集成起来,减少过拟合的风险。

而在测试时,应该用整个训练好的模型,因此不需要dropout。

Dropout 如何平衡训练和测试时的差异呢?

Dropout ,在训练时以一定的概率使神经元失活,实际上就是让对应神经元的输出为0

假设失活概率为 p ,就是这一层中的每个神经元都有p的概率失活,如下图的三层网络结构中,如果失活概率为0.5,则平均每一次训练有3个神经元失活,所以输出层每个神经元只有3个输入,而实际测试时是不会有dropout的,输出层每个神经元都有6个输入,这样在训练和测试时,输出层每个神经元的输入和的期望会有量级上的差异。

因此在训练时还要对第二层的输出数据除以(1-p)之后再传给输出层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。

dropout部分参考:https://blog.csdn.net/program_developer/article/details/80737724

BN和Dropout共同使用时会出现的问题

BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。

相关的研究参考论文:Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift

本论文作者发现理解 Dropout 与 BN 之间冲突的关键是网络状态切换过程中存在神经方差的(neural variance)不一致行为。试想若有图一中的神经响应 X,当网络从训练转为测试时,Dropout 可以通过其随机失活保留率(即 p)来缩放响应,并在学习中改变神经元的方差,而 BN 仍然维持 X 的统计滑动方差。这种方差不匹配可能导致数值不稳定(见下图中的红色曲线)。而随着网络越来越深,最终预测的数值偏差可能会累计,从而降低系统的性能。简单起见,作者们将这一现象命名为「方差偏移」。事实上,如果没有 Dropout,那么实际前馈中的神经元方差将与 BN 所累计的滑动方差非常接近(见下图中的蓝色曲线),这也保证了其较高的测试准确率。

作者采用了两种策略来探索如何打破这种局限。一个是在所有 BN 层后使用 Dropout,另一个就是修改 Dropout 的公式让它对方差并不那么敏感,就是高斯Dropout。

第一个方案比较简单,把Dropout放在所有BN层的后面就可以了,这样就不会产生方差偏移的问题,但实则有逃避问题的感觉。

第二个方案来自Dropout原文里提到的一种高斯Dropout,是对Dropout形式的一种拓展。作者进一步拓展了高斯Dropout,提出了一个均匀分布Dropout,这样做带来了一个好处就是这个形式的Dropout(又称为“Uout”)对方差的偏移的敏感度降低了,总得来说就是整体方差偏地没有那么厉害了。

该部分参考:

https://www.jiqizhixin.com/articles/2018-01-23-4

https://zhuanlan.zhihu.com/p/33101420

BN和Dropout在训练和测试时的差别相关推荐

  1. BN和Dropout在训练和测试时有哪些差别?

    作者丨海晨威@知乎 来源丨https://zhuanlan.zhihu.com/p/61725100 编辑丨极市平台 Batch Normalization BN,Batch Normalizatio ...

  2. Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷)

    Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷) 参见了很多方法,都没有用. 简单点,直接把gpu设成-1

  3. python吃显卡还是内存不足_解决Pytorch 训练与测试时爆显存(out of memory)的问题

    Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache() ...

  4. 训练与测试时同一组测试集结果不一致

    训练与测试时同一组测试集结果不一致,相当于训练的模型不能后续使用了,这肯定不能容忍,所以耗费经历筛查: 1. 随机种子的设置问题 可在main函数加上这个: SEED = 1 np.random.se ...

  5. Pytorch 训练与测试时爆显存(out of memory)的一个解决方案

    Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache() ...

  6. 解决Pytorch 训练与测试时爆显存(out of memory)的问题

    Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache() ...

  7. FCN训练不收敛的原因分析和最详细的FCN训练与测试自己的数据程序配置

    在2015年发表于计算机视觉顶会CVPR上的Fully Convolutional Networks for Semantic Segmentation 论文(下文中简称FCN)开创了图像语义分割的新 ...

  8. [论文翻译]测试时数据增强(TTA):Automatic Brain Tumor Segmentation using Convolutional Neural Networks with TTA

    论文下载: 地址 Automatic Brain Tumor Segmentation using Convolutional Neural Networks with Test-Time Augme ...

  9. [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法

    最近用到Faster RCNN进行目标检测,前前后后两周把RCNN,SPPNet,Fast RCNN和Faster RCNN大体调查了一遍,准备写一个RCNNs系列,后面还要加上今年最新的Mask R ...

最新文章

  1. multiplexed pins
  2. 《实施Cisco统一通信VoIP和QoS(CVOICE)学习指南(第4版)》一导读
  3. SpringBatch 自定义ItemReader和可重新启动Reader(十五)
  4. VTK:背景渐变BackgroundGradient用法实战
  5. java 死锁的检测与修复_调查死锁–第4部分:修复代码
  6. mysql主从切换机制torch_MySQL Replication设置(Master/Slave)实现主从复制
  7. jieba(结巴)—— Python 中文分词
  8. cpu out of order, 性能优化
  9. 关于 idea 快捷键 alt + f7 无法使用的一些尝试
  10. 太空帝国5(Space Empires V SE5)攻略
  11. 验证数据是否满足正态分布——Q-Q图和P-P图
  12. 使用Future取消超时任务
  13. 【计算机组成原理】学了计组,CPU执行时间你肯定会算了吧
  14. f4menu2----Total Commander 增强型F4插件
  15. 微信小程序开发之——比较数字大小-页面样式(2.3)
  16. vscode调出大纲
  17. 我为什么放弃360千万期权,走向创业这条搬砖路?
  18. 华为的测试软件叫什么,【华为软件工程师面试】华为的那个上机测试-看准网...
  19. 24节气- ||大雪|| 文案、海报分享,冬寒雪落,归家愈暖。
  20. elementPlus修改主题色以及皮肤设置思路

热门文章

  1. shellcode加载器--从入门到放弃
  2. 与 Hadoop 对比,如何看待 Spark 技术
  3. 未闻花名ED《君がくれたもの》原文+罗马音+中文
  4. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
  5. u盘重装系统详细教程
  6. 十五、Fluent湿空气模拟-组分输运模型
  7. OpenStack Trove1
  8. BT结束,高宽带有何用?
  9. 大数据之Hadoop简介及环境搭建
  10. Android 手机灭屏流程分析详解