dropout,batch norm的使用顺序,训练和测试时的差异

  最近开通了一个公众号,里面会分享一些机器学习,深度学习,推荐系统的学习笔记和相关知识,同时也会分享一些面经,感兴趣的小伙伴可以关注一下,十分感谢,比心

 

batch norm和dropout都可以起到正则化的作用,防止过拟合。

dropout:

dropout通俗理解就是,在神经网络训练的时候,有时因为神经元过多,模型参数过多等原因而导致过拟合,dropout以概率p让一部分神经元失活,从而达到降低过拟合的效果。如下图所示,使用dropout后,一部分神经元不参与训练。

  •  在前向传播时,假设有这一层n个神经元,则我们可以假设每个神经元的概率都是0~1(可以通过python得到随机的值),然后小于p的就失活,即不参与训练。
  • 在反向传播时,也只对参与训练的神经元进行参数更新。
  • 每次训练的时候,又是n个神经元,重新进行dropout

dropout可以缓解过拟合的原因:

1.类似bagging,采用dropout,使得每次训练的时候一部分神经元失活,从而导致dropout后的模型都是不一样的,因为失活的神经元不一样。这就相当于有多个网络进行训练得到最终结果,有点ensemble的感觉。

2.因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。

BN的知识后续补充

BN和Dropout训练和测试时的差异

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

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

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

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

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

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


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

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

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

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

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

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

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

不同层的顺序关系:

conv+pooling+bn+relu,可以使relu保留较好的非线性性

linear+dropout

 

参考:

dropout相关

在神经网络中,先进行BatchNorm还是先运行激活函数?

BN和Dropout在训练和测试时的差别

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Batch Normalization(批归一化)是一种常用的深度学习中的正则化技术,用于加速模型的训练过程和提高模型的性能。它通过在网络的每个层中对输入进行归一化,将其均值调整为0,方差调整为1,从而使得数据分布更加稳定,有利于模型的训练和收敛。 Batch Normalization 的主要作用有以下几点: 1. 加速收敛:通过将每个批次的输入进行归一化,Batch Normalization 能够加速模型的收敛过程。它有助于解决梯度消失或梯度爆炸的问题,使得模型能够更快地收敛。 2. 控制内部协变量偏移:内部协变量偏移是指由于训练过程中每一层输入分布的变化而导致的模型参数难以训练的问题。Batch Normalization 通过标准化输入,减少了内部协变量偏移的影响,使得模型参数更容易优化。 3. 正则化作用:Batch Normalization 在归一化的同引入了一定的噪声,类似于 Dropout 的正则化效果,有助于减少模型的过拟合。 GoogLeNet 是由 Google 提出的一种深度卷积神经网络结构,它是 Inception 系列网络的代表。GoogLeNet 采用了一种多分支的网络结构,通过并行地使用不同尺寸的卷积核和池化操作,从而在保持计算效率的同实现了更好的特征提取能力。 在 GoogLeNet 中,Batch Normalization 被广泛应用。Batch Normalization 在 GoogLeNet 的每个卷积层后都被添加,用于加速收敛和提高模型性能。通过使用 Batch Normalization,GoogLeNet 在训练过程中能够更快地收敛,并且具有更好的泛化能力。 综上所述,Batch Normalization 是一种常用的正则化技术,用于加速模型训练和提高性能。GoogLeNet 是一种深度卷积神经网络结构,其中使用Batch Normalization 来优化模型训练过程。如果你有任何进一步的问题,请随提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值