深度学习之dropout
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}yil. 最后进行线性变化,经过激活函数,得到第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)yi(l)zi(l+1)yi(l+1)∼Bernoulli(p)=ri(l)∗yi(l)=wi(l+1)yil+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相关推荐
- 【深度学习】Dropout、正反向传播、计算图等的介绍和实现(Pytorch)
[深度学习]Dropout.正反向传播.计算图等的介绍和实现(Pytorch) 文章目录 1 Dropout概述 2 实践中的dropout2.1 从零开始实现2.2 定义模型参数2.3 定义模型2. ...
- 【深度学习】Dropout与学习率衰减
[深度学习]Dropout与学习率衰减 文章目录 [深度学习]Dropout与学习率衰减 1 概述 2 在Keras中使用Dropout2.1 输入中使用(噪声)2.2 Hidden层 3 LR衰减3 ...
- 深度学习中Dropout层作用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.dropout是什么? 二.dropout过程 三.dropout在神经网络中的过程 前言 Dropout出现的原 ...
- 深度学习:dropout和BN的实现
文章目录 dropout BN dropout dropout可以看成是正则化,也可以看成是ensemble class Dropout(SubLayer):# self._prob:训练过程中每个神 ...
- [深度学习-优化]dropout防止过拟合的理解
这里写目录标题 1. 通过图来理解什么是dropout 2. 原理简述 执行步骤: 3. 实验结果 其它角度的理解 1. 通过图来理解什么是dropout dropout 从字面意思就是'丢掉' 丢掉 ...
- 深度学习- Dropout 稀疏化原理解析
搬运原文链接:https://zhuanlan.zhihu.com/p/38200980 深度学习中 Dropout 原理解析 文章目录 深度学习中 Dropout 原理解析 1. Dropout 简 ...
- 深度学习机器学习理论知识:范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧
范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...
- 动手学深度学习Pytorch Task03
第三节课的内容包括过拟合.欠拟合及其解决方案和梯度消失.梯度爆炸和循环神经网络进阶 一.过拟合.欠拟合及其解决方案 1.过拟合.欠拟合及相关概念 训练误差:模型在训练数据集上表现出的误差 泛化误差:模 ...
- 大厂必考深度学习算法面试题
一,滤波器与卷积核 二,卷积层和池化输出大小计算 2.1,CNN 中术语解释 2.2,卷积输出大小计算(简化型) 2.3,理解边界效应与填充 padding 参考资料 三,深度学习框架的张量形状格式 ...
最新文章
- 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)
- 计算机专业复试线380,445名400+的科软复试线388分,计算机学硕380分,卷炸了
- Linux 磁盘管理 二(Raid、LVM、Quota)
- 网站颜色变黑白的CSS代码,Chrome、火狐、IE
- c语言创建文件的作用,c语言文件创建与建立
- F# 与 WPF 之多语言实现MVVM(二)
- Visual Studio Code 10 月 Python 扩展更新
- 赣南师范大学科技学院计算机科学与技术,2021江西独立学院转设最新消息(新增两所):赣南师范大学科技学院转设公办?...
- 路透社:美国打算限制英伟达等与中国人工智能界合作
- php 有request,php实现httpRequest的方法
- git推送拉取需要验证信息
- SDCC 2017·深圳站八大不容错过的理由
- android从相册或拍照获取照片第三方开源库TakePhoto
- SpringBoot详解(一)
- 如何使用Google底部导航栏创建通知徽章
- 摇摇开门:支付宝的痼疾、做产品与谈恋爱
- 使用PBO更新NV21纹理,shader处理并渲染到FBO中,再进行二次渲染的例子
- 视频教程-OpenGLES(iOS2018版)-其他
- adobe acrobat pro dc 无法打开PDF_PDF编辑Acrobat Pro软件教程 Acrobat XI Pro 全面技能标准培训视频...
- 基于js的网页计算器实现
热门文章
- 【Android游戏开发二十】物理游戏之重力系统开发,让你的游戏变得有质有量!...
- OpenCV-霍夫圆变换cv::HoughCircles
- 寄存器间接寻址缺点_详解西门子间接寻址之地址寄存器间接寻址
- github超简教程
- C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例
- 电梯的测试用例的设计点
- 一个小技巧让你轻松处理Selenium处理滚动条和元素聚焦
- java伪唤醒,谈谈JDK线程的伪唤醒
- matlab虚拟现实之V-Realm Builder2复制技巧(修改)
- python名词解释数据仓库_python实现数据仓库ETL