深度学习入门-基于python的理论和实现10

防止过拟合的方法

1,损失函数加上w的L2 范数。

损失函数加上w的L2 范数。相应的,梯度也会变大,假如说用梯度下降算法的话,w会减少的多一些。来 惩罚数值过大的w。

grads['W' + str(idx)] = self.layers['Affine' + str(idx)].dW + self.weight_decay_lambda * self.layers['Affine' + str(idx)].W

2, Dropout

随机删除一部分神经元,

如果网络的模型变得很复杂,只用权值衰减就难以应对了。在这种情 况下,我们经常会使用 Dropout 方法。
训练时,每传递一次数据,就会随机选择要删除的神经元。
然后,测试时,虽然会传递所有的神经元信号,但是对于各个神经元的输出, 要乘上训练时的删除比例后再输出。
def forward(self, x, train_flg=True):
 if train_flg:
 self.mask = np.random.rand(*x.shape) > self.dropout_ratio
 return x * self.mask
 else:
 return x * (1.0 - self.dropout_ratio)
 def backward(self, dout):
 return dout * self.mask

补充一下:

机器学习中经常使用集成学习。
所谓集成学习,就是让多个模型单独进行学习,
推理时再取多个模型的输出的平均值。用神经网络的语境来说,
比如,准备 5个结构相同(或者类似)的网络,分别进行学习,
测试时,以这 5个网络的输出的平均值作为答案。
实验告诉我们,通过进行集成学习,神经网络的识别精度可以提高好几个百分点。
这个集成学习与 Dropout有密切的关系。
这是因为可以将 Dropout理解为,通过在学习过程中随机删除神经元,从而每一次都让不同的模型进行学习。
并且,推理时,通过对神经元的输出乘以删除比例(比如,0.5等),可以取得模型的平均值。也就是说,可以理解成,Dropout将集成学习的效果(模拟地)通过一个网络实现了。

Dropout为什么要乘以删除神经元的比例

为了保证神经元输出激活值的期望值与不使用dropout时一致,我们结合概率论的知识来具体看一下:假设一个神经元的输出激活值为a,在不使用dropout的情况下,其输出期望值为a,如果使用了dropout,神经元就可能有保留和关闭两种状态,把它看作一个离散型随机变量,它就符合概率论中的0-1分布,其输出激活值的期望变为 p*a+(1-p)*0=pa,此时若要保持期望和不使用dropout时一致,就要除以 p。
————————————————
版权声明:本文为CSDN博主「飘啊飘啊飘啊飘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qbyqby7628/article/details/103449196)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值