Batch Normalization 和 Dropout在训练和测试的不同

Batch Normalization

(几种归一化)一文读懂BN、LN、IN、GN

训练和测试的参数是否一致?

  • 对于BN,训练的时候是对每一批数据操作,所以用到的均值方差都是一批的。
  • 测试的时候,没有一批的概念,这时候的均值和方差用到的是全量训练数据的(可以通过一定的方法求得)

BN中均值 方差 训练不用全局的原因?

  • 在训练的第一个完整epoch过程中是无法得到输入层之外其他层全量训练集的均值和方差,只能在前向传播过程中获取已训练batch的均值和方差。
  • 每一批数据的均值、方差都会有差别,会增加模型的鲁棒性

Dropout

Dropout就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
可以参考很详细

Dropout在训练和测试的差别

(1)训练阶段
在这里插入图片描述
此时公式变化如下 是让神经元的激活函数的输出0

  • 没有Dropout的网络计算公式:
    在这里插入图片描述
  • 有Dropout的公式

在这里插入图片描述
上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。

代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、…、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。
(2)在测试模型阶段
只有在训练阶段没有除(1-p)的,在测试的时候会乘P 否则不用

预测模型的时候,每一个神经单元的权重参数要乘以概率p。
在这里插入图片描述
测试阶段Dropout公式:
在这里插入图片描述

其问题 Dropout层的位置?

Dropout一般放在全连接层防止过拟合,提高模型返回能力,由于卷积层参数较少,很少有放在卷积层后面的情况,卷积层一般使用batch norm。

全连接层中一般放在激活函数层之后,有的帖子说一定放在激活函数后,个人推测是因为对于部分激活函数输入为0输出不一定为0,可能会起不到效果,不过对于relu输入0输出也是0就无所谓了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值