dropout原始论文

为了防止训练过拟合,在训练过程中随机丢弃一部分输出(经常有人说随机丢弃掉一些神经元,感觉不是很准确)

左图不使用dropout

对于第lll层的输出yil{y}_{i}^{l}yil​,直接进行线性变化,然后经过激活函数,得到第l+1l+1l+1层的输出yil+1{y}_{i}^{l+1}yil+1​

zi(l+1)=wi(l+1)yil+bi(l+1),yi(l+1)=f(zi(l+1)),\begin{aligned} z_{i}^{(l+1)} &=\mathbf{w}_{i}^{(l+1)} \mathbf{y}_{i}^{l}+b_{i}^{(l+1)}, \\ y_{i}^{(l+1)} &=f\left(z_{i}^{(l+1)}\right), \end{aligned}zi(l+1)​yi(l+1)​​=wi(l+1)​yil​+bi(l+1)​,=f(zi(l+1)​),​

右图使用dropout

先按照伯努利分布,概率为ppp采样,得到ri(l)r_{i}^{(l)}ri(l)​, 与第lll层的输出yil{y}_{i}^{l}yil​维度相同。两者对应位置相乘,对yil{y}_{i}^{l}yil​中的部分位置置0,得到dropout后的 y~il\widetilde{\mathbf{y}}_{i}^{l}y​il​. 最后进行线性变化,经过激活函数,得到第l+1l+1l+1层的输出yil+1{y}_{i}^{l+1}yil+1​

ri(l)∼Bernoulli⁡(p)y~i(l)=ri(l)∗yi(l)zi(l+1)=wi(l+1)y~il+bi(l+1)yi(l+1)=f(zi(l+1))\begin{aligned} r_{i}^{(l)} & \sim \operatorname{Bernoulli}(p) \\ \widetilde{\mathbf{y}}_{i}^{(l)} &=\mathbf{r}_{i}^{(l)} * \mathbf{y}_{i}^{(l)} \\ z_{i}^{(l+1)} &=\mathbf{w}_{i}^{(l+1)} \widetilde{\mathbf{y}}_{i}^{l}+b_{i}^{(l+1)} \\ y_{i}^{(l+1)} &=f\left(z_{i}^{(l+1)}\right) \end{aligned}ri(l)​y​i(l)​zi(l+1)​yi(l+1)​​∼Bernoulli(p)=ri(l)​∗yi(l)​=wi(l+1)​y​il​+bi(l+1)​=f(zi(l+1)​)​

实现代码

import numpy as npdef dropout(x, prob):if prob < 0. or prob >= 1:  # prob概率值,在0~1之间raise Exception('Dropout prob must be in interval [0, 1[.')retain_prob = 1. - prob# 通过binomial函数,生成与x一样的维数向量sample = np.random.binomial(n=1, p=retain_prob, size=x.shape)# 二项分布,当n=1时,即为伯努利分布# 即将生成一个0、1分布的向量,0表示丢掉对应位置x的数值print(sample)x *= sampleprint(x)x /= retain_prob# infer时不进行dropout,从而保持输出的结果稳定return xx = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=np.float32)
y = dropout(x, 0.4)
print(y)

个人理解

其中,代码第14行 x /= retain_prob 是对原始的x进行rescale,那么为什么要进行 rescale呢?可能是为了保持训练和测试的时候网络输出的期望一致

假设丢弃概率是p, 原始论文中的dropout(vanilla版本)在测试时做rescale

  • 训练时,使用dropout,对于网络中的某个输出值x,期望变为 (1-p)x+p0=(1-p)x
  • 为了保持测试过程(没有dropout)期望一致,在测试时,对于相应层输出乘以1-p

inverted 版本,在训练时做rescale

  • 训练时,使用dropout,对于网络中的某个输出值x,期望变为 (1-p)x+p0=(1-p)x
  • 为了保持测试过程(没有dropout)期望一致,在训练时, 对包含dropout的输出乘1/(1-p), 使得期望仍然为1/(1-p)*(1-p)x = x,即代码中所使用的方法。从而保证测试时不需要对代码进行修改

参考

https://blog.csdn.net/hjimce/article/details/50413257

深度学习之dropout相关推荐

  1. 【深度学习】Dropout、正反向传播、计算图等的介绍和实现(Pytorch)

    [深度学习]Dropout.正反向传播.计算图等的介绍和实现(Pytorch) 文章目录 1 Dropout概述 2 实践中的dropout2.1 从零开始实现2.2 定义模型参数2.3 定义模型2. ...

  2. 【深度学习】Dropout与学习率衰减

    [深度学习]Dropout与学习率衰减 文章目录 [深度学习]Dropout与学习率衰减 1 概述 2 在Keras中使用Dropout2.1 输入中使用(噪声)2.2 Hidden层 3 LR衰减3 ...

  3. 深度学习中Dropout层作用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.dropout是什么? 二.dropout过程 三.dropout在神经网络中的过程 前言 Dropout出现的原 ...

  4. 深度学习:dropout和BN的实现

    文章目录 dropout BN dropout dropout可以看成是正则化,也可以看成是ensemble class Dropout(SubLayer):# self._prob:训练过程中每个神 ...

  5. [深度学习-优化]dropout防止过拟合的理解

    这里写目录标题 1. 通过图来理解什么是dropout 2. 原理简述 执行步骤: 3. 实验结果 其它角度的理解 1. 通过图来理解什么是dropout dropout 从字面意思就是'丢掉' 丢掉 ...

  6. 深度学习- Dropout 稀疏化原理解析

    搬运原文链接:https://zhuanlan.zhihu.com/p/38200980 深度学习中 Dropout 原理解析 文章目录 深度学习中 Dropout 原理解析 1. Dropout 简 ...

  7. 深度学习机器学习理论知识:范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧

    范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...

  8. 动手学深度学习Pytorch Task03

    第三节课的内容包括过拟合.欠拟合及其解决方案和梯度消失.梯度爆炸和循环神经网络进阶 一.过拟合.欠拟合及其解决方案 1.过拟合.欠拟合及相关概念 训练误差:模型在训练数据集上表现出的误差 泛化误差:模 ...

  9. 大厂必考深度学习算法面试题

    一,滤波器与卷积核 二,卷积层和池化输出大小计算 2.1,CNN 中术语解释 2.2,卷积输出大小计算(简化型) 2.3,理解边界效应与填充 padding 参考资料 三,深度学习框架的张量形状格式 ...

最新文章

  1. 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)
  2. 计算机专业复试线380,445名400+的科软复试线388分,计算机学硕380分,卷炸了
  3. Linux 磁盘管理 二(Raid、LVM、Quota)
  4. 网站颜色变黑白的CSS代码,Chrome、火狐、IE
  5. c语言创建文件的作用,c语言文件创建与建立
  6. F# 与 WPF 之多语言实现MVVM(二)
  7. Visual Studio Code 10 月 Python 扩展更新
  8. 赣南师范大学科技学院计算机科学与技术,2021江西独立学院转设最新消息(新增两所):赣南师范大学科技学院转设公办?...
  9. 路透社:美国打算限制英伟达等与中国人工智能界合作
  10. php 有request,php实现httpRequest的方法
  11. git推送拉取需要验证信息
  12. SDCC 2017·深圳站八大不容错过的理由
  13. android从相册或拍照获取照片第三方开源库TakePhoto
  14. SpringBoot详解(一)
  15. 如何使用Google底部导航栏创建通知徽章
  16. 摇摇开门:支付宝的痼疾、做产品与谈恋爱
  17. 使用PBO更新NV21纹理,shader处理并渲染到FBO中,再进行二次渲染的例子
  18. 视频教程-OpenGLES(iOS2018版)-其他
  19. adobe acrobat pro dc 无法打开PDF_PDF编辑Acrobat Pro软件教程 Acrobat XI Pro 全面技能标准培训视频...
  20. 基于js的网页计算器实现

热门文章

  1. 【Android游戏开发二十】物理游戏之重力系统开发,让你的游戏变得有质有量!...
  2. OpenCV-霍夫圆变换cv::HoughCircles
  3. 寄存器间接寻址缺点_详解西门子间接寻址之地址寄存器间接寻址
  4. github超简教程
  5. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例
  6. 电梯的测试用例的设计点
  7. 一个小技巧让你轻松处理Selenium处理滚动条和元素聚焦
  8. java伪唤醒,谈谈JDK线程的伪唤醒
  9. matlab虚拟现实之V-Realm Builder2复制技巧(修改)
  10. python名词解释数据仓库_python实现数据仓库ETL