建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

yyy7124

发帖: 19粉丝: 0

级别 : 实习版主

发消息 + 关注

发表于2020年11月21日 18:01:32 47 3
直达本楼层的链接
楼主
显示全部楼层
[其他] BN和Dropout在训练和测试时有哪些差别?

Batch Normalization

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

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

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

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

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

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

因为在训练的第一个完整epoch过程中是无法得到输入层之外其他层全量训练集的均值和方差,只能在前向传播过程中获取已训练batch的均值和方差。那在一个完整epoch之后可以使用全量数据集的均值和方差嘛?

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

但是一批数据和全量数据的均值和方差相差太多,又无法较好地代表训练集的分布,因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,去缩小与全量数据的差别。

Dropout

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

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

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

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

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

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

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

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

相关的研究参考论文:

Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift

https://arxiv.org/abs/1801.05134


举报
分享

分享文章到朋友圈

分享文章到微博

小强鼓掌

发帖: 38粉丝: 1

级别 : 外部版主

发消息 + 关注

发表于2020年11月21日 20:47:23
直达本楼层的链接
沙发
显示全部楼层

写的非常详细,学习到了

点赞 评论 引用 举报

RabbitCloud

发帖: 32粉丝: 1

级别 : 外部版主

发消息 + 关注

发表于2020年11月21日 23:34:09
直达本楼层的链接
板凳
显示全部楼层

很好的分享,对比一下感觉概念比较容易理解了。

点赞 评论 引用 举报

yzq18941596181

发帖: 14粉丝: 0

级别 : 实习版主

发消息 + 关注

发表于2020年11月28日 21:25:25
直达本楼层的链接
地板
显示全部楼层

讲解的很详细,好好学习下

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册