https://blog.csdn.net/qq_36330643/article/details/78445130

如果网络的问题在于连接密集,那么久强制让它稀疏,基于这种想法的算法就是dropout算法。

一:引言

  因为在机器学习的一些模型中,如果模型的参数太多,而训练样本又太少的话,这样训练出来的模型很容易产生过拟合现象。在训练bp网络时经常遇到的一个问题,过拟合指的是模型在训练数据上损失函数比较小,预测准确率较高(如果通过画图来表示的话,就是拟合曲线比较尖,不平滑,泛化能力不好),但是在测试数据上损失函数比较大,预测准确率较低。

  常用的防治过拟合的方法是在模型的损失函数中,需要对模型的参数进行“惩罚”,这样的话这些参数就不会太大,而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。因此在添加权值惩罚项后,应用梯度下降算法迭代优化计算时,如果参数theta比较大,则此时的正则项数值也比较大,那么在下一次更新参数时,参数削减的也比较大。可以使拟合结果看起来更平滑,不至于过拟合。

  Dropout是hintion最近2年提出的;为了防止模型过拟合,Dropout可以作为一种trikc供选择。在hinton的论文摘要中指出,在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

二 Dropout方法

训练阶段:

  1.Dropout是在标准的bp网络的的结构上,使bp网的隐层激活值,以一定的比例v变为0,即按照一定比例v,随机地让一部分隐层节点失效;在后面benchmark实验测试时,部分实验让隐层节点失效的基础上,使输入数据也以一定比例(试验用20%)是部分输入数据失效(这个有点像denoising autoencoder),这样得到了更好的结果。

  2.去掉权值惩罚项,取而代之的事,限制权值的范围,给每个权值设置一个上限范围;如果在训练跟新的过程中,权值超过了这个上限,则把权值设置为这个上限的值(这个上限值得设定作者并没有说设置多少最好,后面的试验中作者说这个上限设置为15时,最好;为啥?估计是交叉验证得出的实验结论)。

  这样处理,不论权值更新量有多大,权值都不会过大。此外,还可以使算法使用一个比较大的学习率,来加快学习速度,从而使算法在一个更广阔的权值空间中搜索更好的权值,而不用担心权值过大。

测试阶段:

  在网络前向传播到输出层前时隐含层节点的输出值都要缩减到(1-v)倍;例如正常的隐层输出为a,此时需要缩减为a(1-v)。

  这里我的解释是:假设比例v=0.5,即在训练阶段,以0.5的比例忽略隐层节点;那么假设隐层有80个节点,每个节点输出值为1,那么此时只有40个节点正常工作;也就是说总的输出为40个1和40个0;输出总和为40;而在测试阶段,由于我们的权值已经训练完成,此时就不在按照0.5的比例忽略隐层输出,假设此时每个隐层的输出还是1,那么此时总的输出为80个1,明显比dropout训练时输出大一倍(由于dropout比例为0.5);所以为了得到和训练时一样的输出结果,就缩减隐层输出为a(1-v);即此时输出80个0.5,总和也为40.这样就使得测试阶段和训练阶段的输出“一致”了。(个人见解)

三 Dropout原理分析

  Dropout可以看做是一种模型平均,所谓模型平均,顾名思义,就是把来自不同模型的估计或者预测通过一定的权重平均起来,在一些文献中也称为模型组合,它一般包括组合估计和组合预测。

  Dropout中哪里体现了“不同模型”;这个奥秘就是我们随机选择忽略隐层节点,在每个批次的训练过程中,由于每次随机忽略的隐层节点都不同,这样就使每次训练的网络都是不一样的,每次训练都可以单做一个“新”的模型;此外,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。

  这样dropout过程就是一个非常有效的神经网络模型平均方法,通过训练大量的不同的网络,来平均预测概率。不同的模型在不同的训练集上训练(每个批次的训练数据都是随机选择),最后在每个模型用相同的权重来“融合”,介个有点类似boosting算法。

四 代码详解

  首先先介绍一个基于matlab deeplearning toolbox版本的dropout代码,主要参考(tornadomeet大牛博客),如果了解DenoisingAutoencoder的训练过程,则这个dropout的训练过程如出一辙;不需要怎么修改,就可以直接运行,因为在toolbox中已经修改完成了。

  这个过程比较简单,而且也没有使用L2规则项,来限制权值的范围;主要是用于理解dropout网络,在训练样本比较少的情况下,dropout可以很好的防止网络过拟合。

训练步骤:

1.提取数据(只提取2000个训练样本)

2 初始化网络结构:这里主要利用nnsetup函数构建一个[784 100 10]的网络。由于是练习用途,所以不进行pre_training。

3 采用minibatch方法,设置dropout比例nn.dropoutFraction=0.5;利用nntrain函数训练网络。

  按比例随机忽略隐层节点:

if(nn.dropoutFraction > 0)
 
           if(nn.testing)%测试阶段实现mean network,详见上篇博文
 
                nn.a{i} = nn.a{i}.*(1 - nn.dropoutFraction);
 
           else%训练阶段使用
                nn.dropOutMask{i} =(rand(size(nn.a{i}))>nn.dropoutFraction);
 
                nn.a{i} =nn.a{i}.*nn.dropOutMask{i};
           end
end

>> a=rand(1,6)
 
>> temp=(rand(size(a))>0.5)
 
>> dropout_a=a.*temp

误差delta反向传播实现:

% delta(i)=delta(i+1)W(i)*a(i)(1-a(i)) ;之后再进行dropout

if(nn.dropoutFraction>0)
 
   d{i} = d{i} .* [ones(size(d{i},1),1) nn.dropOutMask{i}];
 
end

权值更新值delta_w实现:

%  delta_w(i)=delta(i+1)*a(i)
for i = 1 : (n - 1)
    if i+1==n
       nn.dW{i} = (d{i + 1}' * nn.a{i}) / size(d{i + 1}, 1);
    else
   nn.dW{i} = (d{i + 1}(:,2:end)' * nn.a{i}) / size(d{i + 1}, 1);
    end
end

测试样本错误率:15.500% without dropout

测试样本错误率:12.100% with dropout

参考文献:

http://www.cnblogs.com/tornadomeet/p/3258122.html
---------------------
作者:Soyoger
来源:CSDN
原文:https://blog.csdn.net/qq_36330643/article/details/78445130
版权声明:本文为博主原创文章,转载请附上博文链接!

深度学习中的Dropout原理介绍相关推荐

  1. 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    Attention是一种用于提升基于RNN(LSTM或GRU)的Encoder + Decoder模型的效果的的机制(Mechanism),一般称为Attention Mechanism.Attent ...

  2. 深度学习中迁移学习方法原理

    迁移学习是当前深度学习领域的⼀系列通⽤的解决⽅案,⽽不是⼀个具体的算法模型.我们使用模型在特定任务上收集的知识来解决不同但相关的任务.模型可以从上一个任务中学到的东西中获益,从而更快地学习新任务. 迁 ...

  3. 深度学习中的Dropout简介及实现

    在训练神经网络模型时候,如果模型相对复杂即参数较多而训练样本相对较少,这时候训练出的模型可能对训练集中的数据拟合的比较好,但在测试集上的表现较差,即出现了过拟合的情况.这种情况下可以使用Dropout ...

  4. 深度学习中使用显卡的介绍

    独立显卡主要分为NVIDIA和AMD两大阵营,相对来说,NVIDIA显卡知名度与市场占有率都更高.CPU的全称是Central Processing Unit,GPU的全称是Graphics Proc ...

  5. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏

    作者:Zeyuan Allen-Zhu 来源:AI公园 编译:ronghuaiyang 在现在的标准技术下,例如过参数化.batch-normalization和添加残差连接,"现代&quo ...

  6. 深度学习中的Momentum算法原理

    一.介绍 在深度学习中,Momentum(动量)优化算法是对梯度下降法的一种优化, 它在原理上模拟了物理学中的动量,已成为目前非常流行的深度学习优化算法之一.在介绍动量优化算法前,需要对 指数加权平均 ...

  7. 关于深度学习中的注意力机制,这篇文章从实例到原理都帮你参透了(很系统,重点看)

    最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理.图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一. 本文以机器翻译为 ...

  8. 在基于图像的深度学习中如何做数据的自动标注以及自动标注的等级介绍

    作者:Tobias Schaffrath Rosario 编译:ronghuaiyang 原文:在基于图像的深度学习中如何做数据的自动标注以及自动标注的等级介绍_ronghuaiyang的博客-CSD ...

  9. 深度学习中batch-size介绍

    诞生概念 batch-size中文翻译是批量大小,所谓的批量是指学习样本的数量,因为在训练模型时需要将样本图像全部读入到内存中,这么做的原因是提升收敛速度. 如果每次读一个图像到内存然后提取特征然后在 ...

最新文章

  1. 2022-2028年中国微藻行业市场调查研究及前瞻分析报告
  2. Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
  3. ab 发送post请求测试API性能
  4. 俞军:产品经理必备的2个模型
  5. mysql报错排查总结
  6. SQL Server里PIVOT运算符的”红颜祸水“
  7. Facebook应用Moments使用C++实现跨平台代码共享
  8. 前端学习(1390):多人管理项目10服务器认证
  9. android app 移植到pc,微软开发新应用把Android app“移植”到Win Phone
  10. 《前端JavaScript面试技巧》
  11. 数据库JDBC的基本内容
  12. 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析(二)...
  13. VSC为_LCC 和 VSC (MMC) 的底层特性区别
  14. cad计算机快捷键命令大全,cad快捷键命令有哪些?常用cad快捷键命令大全
  15. 猫狗大战-caffe模型训练实例amp;NSDK识别运行
  16. 脖子黑色素沉淀怎么去除,有效方法
  17. 数字签密算法JPBC实现
  18. 戴尔服务器虚拟机巨兽龙在哪,dell服务器安装的vmware esxi 虚拟机紫萍
  19. 50个汉字对应到 varchar是多少
  20. 3个方法恢复彻底删除的苹果手机视频!

热门文章

  1. 数据分析与数据科学圈潜在“标杆级”著作,亚马逊智囊团副团长新书
  2. 真正从零开始了解 Julia
  3. 如何设计一款地震高岗一派溪山千古秀的反爬虫?
  4. 谷歌大脑2017总结1
  5. 比利时皇家科学院院士Luc De Raedt:从统计关系人工智能到神经符号计算
  6. 新春快乐!数据派又双叒叕送福利啦~
  7. 数据蒋堂 | 数据分段讨论
  8. 独家 | 这15个最热门的GitHub库你不可错过!
  9. 纽约时报:近1/3美国顶尖AI科学家来自中国,88%中国籍博士会留下建设美利坚...
  10. 00后MIT美女学霸获2022年罗德奖学金!4位中国学霸入学牛津