资讯专栏INFORMATION COLUMN

【深度学习】Dropout原理以及代码实现

Invoker / 855人阅读

摘要:起源随着深度学习的发展,各种网络结构层出不穷,导致网络越来越深,数据的容纳量越来越大,模型的参数也越来越多,这样就会导致神经网络很容易过拟合,过拟合的模型几乎是不能用于实践中的,因为拟合的数据与测试数据不一致,导致模型的泛化性能较低。

Drouout起源

随着深度学习的发展,各种网络结构层出不穷,导致网络越来越深,数据的容纳量越来越大,模型的参数也越来越多,这样就会导致神经网络很容易过拟合,过拟合的模型几乎是不能用于实践中的,因为拟合的数据与测试数据不一致,导致模型的泛化性能较低。

由于这个问题,现在有很多解决办法,比如使用集成模型,同时训练多个模型,最终让几个模型进行加权,这样能够解决过拟合是因为使用了不同的模型,每个模型拟合到的数据特征不同,最终由于互补,能够使模型的泛化性能更强,随机森林就是很经典的ensemble模型,分别多带带训练多个子树,每个子树之间互不依赖。

但是这种方法对于深度学习不太现实,因为要训练多个网络,并且使得每个网络最终得到它们的最优解,我们都知道现在的网络很复杂,训练太过昂贵,训练一个模型都很不容易,何况是同时训练多个,这显然是不太现实的,另外一点就是可以使用同一个网络结构,然后训练不同的数据,也就是说,分别使用不同的训练子集进行训练获得每个训练子集对应的网络结构,这样的问题就是导致浪费了数据,而且真实中没有那么多的数据进行切分。

神经网络的两个缺点:

  • 捕捉高阶特征依赖,容易过拟合
  • 训练费时费力

什么是Dropout

Dropout是一项技术可以解决上面提到的问题,它可以理解是一种正则化的技术,它的原理是在模型正向传播过程中,以一定的概率p使隐层中的神经元暂时性失活,注意只是暂时失活,并不是永久失活,每个mini-batch进行传播时,都会随机失活一定神经元,这样就会缓解过拟合的现象,原因是训练每个mini-batch时,并不是所有的神经元都会参与训练,说白了就是每个传播都是网络结构的部分神经元在发挥作用,这样与原网络就会少很多训练参数,因为失活一定神经元,会导致每个mini-batch的数据不会完全拟合,这就是Dropout的原理所在。

对于概率p是我们指定的,它的意思就是每个神经元有多大的概率仍在工作,如果令p=0.3,那么也就是说每个神经元有70%的概率会失活,如果p=0,那么所有的神经元会全部失活,导致网络不会传播。

在训练期间,我们会指定p,然后随机产生一个符合伯努利分布的张量,该张量的形状和该隐层神经元的个数相同,如果一个隐层的神经元的个数为 5 个,那么产生的张量就是 【 0,0,1,1,0】,就是说只有第三个和第四个工作,其余全部失活。

还有个问题就是,由于在训练期间使用Dropout让部分神经元失活,而在模型推断的过程中所有的神经元是存活的,这样就会导致训练期间该层的输出与推断时该层的输出期望不一致

有人会说在推断时也采用Dropout那这样不就和训练一致了,这样期望是一致的,但是这样在现实中会存在一个问题,因为Dropout会随机的进行失活神经元,如果推断时使用Dropout随机失活的话,这样就会导致每个推断的结果不一致,带来结果不稳定的问题

  • 训练: p x ∗ 1 + ( 1 − p ) ∗ 0 = p x px*1+(1-p)*0=px px1+(1p)0=px
  • 推断: x x x

这样导致推断时的期望会与训练时不一致,解决办法有两种,一种是训练时进行缩放,第二种是在推断时进行放大

  • 方法一: x / = p x/=p x/=p
  • 方法二: x ∗ = p x*=p x=p

代码实现

import numpy as np"""discard_prob : 每个神经元被丢弃的概率,计算时要换成keep_prob"""def dropout(x, discard_prob=0.5, seed=None):    if discard_prob < 0 or discard_prob > 1:        raise ValueError("Dropout prob must be in interval [0,1].")            keep_prob = 1 - discard_prob    seed = np.random.seed(seed)    random_tensor = np.random.binomial(n=1, p=keep_prob, size=x.shape)        x *= random_tensor    x /= keep_prob        return xx = np.random.uniform(low=1, high=5, size=10)out = dropout(x,discard_prob=0.2)out

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125038.html

相关文章

  • 深度学习论文解读系列】(一)--Dropout原理剖析

    摘要:另一方面,有性生殖可能会破坏这些共同适应的基因集,特别是如果这些基因集很大,直觉上,这会降低已经进化出复杂共同适应的生物体的适应性。 文章目录 Dropout: ...

    k00baa 评论0 收藏0
  • 递归的艺术 - 深度递归网络在序列式推荐的应用

    摘要:因为在每一时刻对过去的记忆信息和当前的输入处理策略都是一致的,这在其他领域如自然语言处理,语音识别等问题不大,但并不适用于个性化推荐,一个用户的听歌点击序列,有正负向之分。 在内容爆炸性增长的今天,个性化推荐发挥着越来越重要的作用,如何在海量的数据中帮助用户找到感兴趣的物品,成为大数据领域极具挑战性的一项工作;另一方面,深度学习已经被证明在图像处理,计算机视觉,自然语言处理等领域都取得了不俗...

    ZweiZhao 评论0 收藏0
  • 当AlphaGo火了以后,我们来聊聊深度学习

    摘要:大家好,我是黄文坚,今天给大家讲讲深度学习。我们再来看看这两个深度学习的网络,左边是策略网络,我走到一步的时候,分析棋盘上每个位置有多大价值,给每个位置打一个分数。可以说深度学习让机器人拥有几岁小孩拾起物体的能力。 大家好,我是黄文坚,今天给大家讲讲深度学习。我不讲技术原理,讲讲技术应用。深度学习是我们明略重要的研究方向,是未来实现很多令人惊叹的功能的工具,也可以说是通向人工智能的必经之路。...

    silvertheo 评论0 收藏0
  • 一文概览深度学习中的五大正则化方法和七大优化策略

    摘要:近来在深度学习中,卷积神经网络和循环神经网络等深度模型在各种复杂的任务中表现十分优秀。机器学习中最常用的正则化方法是对权重施加范数约束。 近来在深度学习中,卷积神经网络和循环神经网络等深度模型在各种复杂的任务中表现十分优秀。例如卷积神经网络(CNN)这种由生物启发而诞生的网络,它基于数学的卷积运算而能检测大量的图像特征,因此可用于解决多种图像视觉应用、目标分类和语音识别等问题。但是,深层网络...

    2shou 评论0 收藏0
  • [ResNet系] 004 WRN

    摘要:显示了残差连接可以加速深层网络的收敛速度,考察了残差网络中激活函数的位置顺序,显示了恒等映射在残差网络中的重要性,并且利用新的架构可以训练极深层的网络。包含恒等映射的残差有助于训练极深层网络,但同时也是残差网络的一个缺点。 WRN Wide Residual NetworksSergey Zagoruyko, Nikos Komodakis Caffe实现:https://github...

    hankkin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<