前言

正则化是一种广泛用于机器学习和深度学习的手段,它的目的就是阻碍模型过度学习(过拟合),从而提升算法的泛化能力。

Dropout 是一种常见的缓解过拟合的方法。接下来,本文将从原理和实践来介绍Dropout技术。

一、Dropout原理

      丢弃法(Dropout Method):在训练一个深度神经网络时,可以随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合
训练时,每次选择丢弃的神经元是随机的,这些随机选出隐藏层的神经元将被删除,它们将不再传递信号。
 
常规dropout
(训练测试不一致,测试时调整输入保持一致)     
设置一个固定的概率,对每一个神经元都以概率 来判定不要保留。对于一个神经层 = ( + ),可引入一个掩蔽函数mask(⋅) 使得 = (mask() + )。掩蔽函数mask(⋅)的定义为:
      但在测试时,所有神经元都可激活,这会造成训练和测试时网络的输出不一致。为了缓解这个问题,在测试时需要将神经层的输入 乘以 ,也相当于把不同的神经网络做了平均。(这里的p为保留率)
 

二、Dropout实现

      每次正向传播时,self.mask中都会以False的形式保存要删除的神经元。
     self.mask会随机生成和x形状相同的数组,并将值比dropout_ratio大的元素设为True。反向传播时的行为和ReLU相同。
     也就是说,正向传播时传递了信号的神经元,反向传播时按原样传递信号;对于正向传播时没有传递信号的神经元,反向传播时信号将停止

大于丢弃率则保留 (不训练时乘以 1-p,保持输出期望不变)
实际dropout

在训练时就缩放,不改变其输入期望

实际在Pytorch中。F.dropout 是一个函数,参数包含输入的tensor,概率和training 为真还是假:
  • training 为真时,才会将一部分元素置为0,其他元素会乘以 scale 1/(1-p).
  • training 为false时,dropout直接就不起作用。默认情况下training是True。
实际操作:
  • 对于输入层的神经元,其保留率通常设为更接近1的数,使得输入变化不会太大。对输入层神经元进行丢弃时,相当于给数据增加噪声,以此来提高网络的鲁棒性。
  • 一般来讲,对于 中间隐藏层的神经元,其 = 0.5 时效果最好,这对大部分的网络和任务都比较有效。当 = 0.5时,在训练时有一半的神经元被丢弃,只剩余一半的神经元是可以激活的,随机生成的网络结构最具多样性。
  • 输出层一般就不加了
集成学习角度的解释
      每做一次丢弃,相当于从原始的网络中采样得到一个子网络。如果一个神经网络有 个神经元,那么总共可以采样出 2 个子网络。每次迭代都相当于训练一个不同的子网络,这些子网络都共享原始网络的参数。
      那么,最终的网络可以近似看作集成了指数级个不同网络的组合模型。(子网络的平均,Dropout提供了一种廉价的Bagging集成近似)

参考内容

不加train的话,相当于没有用dropout
 

【深度学习】神经网络正则化方法之Dropout的更多相关文章

  1. 吴恩达深度学习笔记(十一)—— dropout正则化

    主要内容: 一.dropout正则化的思想 二.dropout算法流程 三.dropout的优缺点 一.dropout正则化的思想 在神经网络中,dropout是一种“玄学”的正则化方法,以减少过拟合 ...

  2. 深度学习中正则化技术概述(附Python代码)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 磐石 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合. ...

  3. 【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  4. 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks

    本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...

  5. 深度学习面试题14:Dropout(随机失活)

    目录 卷积层的dropout 全连接层的dropout Dropout的反向传播 Dropout的反向传播举例 参考资料 在训练过程中,Dropout会让输出中的每个值以概率keep_prob变为原来 ...

  6. 构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)

    毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西.但也不能否认,人工智能技术也具备像传统架构一样"套路化"的流程,也 ...

  7. go微服务框架go-micro深度学习(四) rpc方法调用过程详解

    上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取server的地 ...

  8. [深度学习] 神经网络的理解(MLP RBF RBM DBN DBM CNN 整理学习)

    转载于 http://lanbing510.info/2014/11/07/Neural-Network.html 开篇语 文章整理自向世明老师的PPT,围绕神经网络发展历史,前馈网络(单层感知器,多 ...

  9. 深度学习----Xavier初始化方法

    “Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedf ...

  10. 深度学习——Xavier初始化方法

    “Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedf ...

随机推荐

  1. C++ Boost 内存池与智能指针

    Pool内存池: 只能开辟常规内存,数据类型为int,float,double,string等. #include <iostream> #include <boost/pool/p ...

  2. 如何控制Tomcat的catalina.out的大小

    catalina.out文件,数据主要来源为:System.out 和 System.err 在控制台上直接输出的信息. 编码时应避免使用System.out.println()和e.printSta ...

  3. iOS安装包瘦身总结

    前段时间APP要做资源压缩,需要把项目中使用的所有图片资源进行压缩,以减小APP安装包体积.想着既然压缩APP资源是为了缩小APP体积,那么来一遍APP整体瘦身流程并做一下总结吧. 整个过程分三步: ...

  4. 【Linux】常用基本指令大汇总系列(篇一)【超详细的图解保姆教程】

    常用基本指令大汇总系列(篇一) 大家好,欢迎大家来到我的博客.从今天开始,博主就要开启一个全新的系列了!Linux操作系统常用基本指令汇总系列,当大家按顺序学完这个系列,在Linux上编写基本的C语言 ...

  5. list集合去重_谈谈Java中Set集合去重的原理

    导读:Java中Set接口是Collectio的子接口,Set集合不允许包含相同的元素.如果添加相同的元素, add()会返回FALSE, 新元素不会加入.Set集合常用于元素为数字.字符串去重等,但 ...

  6. sshd命令-测试sshd_config配置是否正确

    sshd命令来自于英文词组"SSH daemon"的缩写,其功能是用于openssh服务器守护进程.openssh套件能够为两台主机之间建立加密的.可信任的数据通信服务,是rlog ...

  7. [Spring]Junit单元测试时取不到本地文件问题

    Junit单元测试时取不到本地文件问题 问题 当使用Junit进行单元测试时,遇到了以下问题: 2022-10-24 16:13:19.902 [main] ERROR zonetop.gisboot ...

  8. Kubernetes 1.26.0实战:在本地配置k8s集群

    阶段一:开发环境及版本 以下环境均来自官网: 本地宿主机环境:Windows 10 21H2 64位 虚拟机软件:VMware workstation 15.5 pro 虚拟机镜像版本:ubuntu- ...

  9. Pandas resample数据重采样

    随机抽样,是统计学中常用的一种方法,它可以帮助我们从大量的数据中快速地构建出一组数据分析模型.在 Pandas 中,如果想要对数据集进行随机抽样,需要使用 sample() 函数. sample() ...

  10. dotnet-cnblog tool 测试案例

    这是测试donet-cnblog工具是否能将正常的Typora图片转换为博客园格式 测试1:本地图片导入 测试2:QQ截图 测试3:url https://pics3.baidu.com/feed/9 ...