Monte-Carlo Dropout

Monte-Carlo Dropout(蒙特卡罗 dropout),简称 MC dropout。

一种从贝叶斯理论出发的 Dropout 理解方式,将 Dropout 解释为高斯过程的贝叶斯近似。

云里雾里的,理论证明看起来挺复杂,有兴趣可以参考论文:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. 以及这篇论文的 Appendix。

但其实,MC dropout 用起来就简单了,不需要修改现有的神经网络模型,只需要神经网络模型中带 dropout 层,无论是标准的 dropout 还是其变种,如 drop-connect,都是可以的。

在训练的时候,MC dropout 表现形式和 dropout 没有什么区别,按照正常模型训练方式训练即可。

在测试的时候,在前向传播过程,神经网络的 dropout 是不能关闭的。这就是和平常使用的唯一的区别。

MC dropout 的 MC 体现在我们需要对同一个输入进行多次前向传播过程,这样在 dropout 的加持下可以得到“不同网络结构”的输出,将这些输出进行平均和统计方差,即可得到模型的预测结果及 uncertainty。而且,这个过程是可以并行的,所以在时间上可以等于进行一次前向传播。

神经网络产生的 softmax 概率不能表示 uncertainty?

其实我们在很多时候都拿了 softmax 的概率计算 uncertainty,比如主动学习查询策略中的 least confident、margin、entropy。在 entropy 策略下,softmax 的概率越均匀熵越大,我们就认为 uncertainty 越大;反之,在 softmax 某一维接近 1,其它都接近 0 时,uncertainty 最小。

但是,softmax 值并不能反应该样本分类结果的可靠程度。A model can be uncertain in its predictions even with a high softmax output. [1]

以 MNIST 分类为例,当模型在验证集上面效果很烂的时候,将一张图片输入到神经网络,我们仍然可以得到很高的 softmax 值,这个时候分类结果并不可靠;当模型在验证集上效果很好了,在测试集上甚至都很好,这个时候,我们将一张图片加入一些噪声,或者手写一个数字拍成照片,输入到网络中,这个时候得到一个较高的 softmax 值,我们就认为结果可靠吗?我们这个时候可以理解为,在已知的信息中,模型认为自己做的挺好,而模型本身并不能泛化到所有样本空间中去,对于它没有见过的数据,它的泛化能力可能不是那么强,这个时候模型仍然是以已知的信息对这个没有见过的数据有很强的判断(softmax 某一维值很大),当然有时候判断很好,但有时候判断可能就有误,而模型并不能给出对这个判断有多少 confidence。

而 MC dropout 可以给出一个预测值,并给出对这个预测值的 confidence,这也就是贝叶斯深度学习的优势所在。

MC dropout 示例代码

import tensorflow as tf
mnist = tf.keras.datasets.mnist(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0inp = tf.keras.layers.Input(shape=(28, 28))
x = tf.keras.layers.Flatten()(inp)
x = tf.keras.layers.Dense(512, activation=tf.nn.relu)(x)
x = tf.keras.layers.Dropout(0.5)(x, training=True)      # dropout 在训练和测试时都将开着
out = tf.keras.layers.Dense(10, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inp, out)model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])model.fit(x_train, y_train, epochs=3)
# 在测试过程,dropout 也是打开的,得到的结果将会有波动,而不是完全一致
for _ in range(10):print(model.predict(x_test[:1]))

dropout 层一直处于打开的状态,测试过程重复进行多次。

References

[1] Gal, Y., & Ghahramani, Z. (2015). Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. Retrieved from http://arxiv.org/abs/1506.02142
[2] Gal, Y., & Ghahramani, Z. (2015). Dropout as a Bayesian Approximation: Appendix. Retrieved from http://arxiv.org/abs/1506.02157

【实验笔记】深度学习中的两种不确定性(上)-- 张子杨
Dropout的前世与今生 -- 机器之心
Deep Bayesian Neural Networks. -- Stefano Cosentino

转载于:https://www.cnblogs.com/wuliytTaotao/p/11509634.html

Monte-Carlo Dropout,蒙特卡罗 dropout相关推荐

  1. Monte Carlo Integration 蒙特卡罗方法求积分 附简单例题+代码

    摘要 蒙特卡罗积分是一种基于随机抽样的统计方法.打个比方,要想知道抛出硬币得到正面的概率,随机投1000次,得到500次左右,推测出概率应该为 1 2 \frac{1}{2} 21​.差不多是这意思, ...

  2. 蒙特卡罗(Monte Carlo)方法

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法.          一 起源 这一方法源于美国在第二次世界大战进研制原子弹的&qu ...

  3. 蒙特卡洛方法(Monte Carlo method,也有翻译成“蒙特卡罗方法”)

    蒙特卡洛方法(Monte Carlo method,也有翻译成"蒙特卡罗方法")是以概率和统计的理论.方法为基础的一种数值计算方法,将所求解的问题同一定的概率模型相联系,用计算机实 ...

  4. LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)

      容差分析技术是一种预测电路性能参数稳定性的方法.它主要研究电路组成部分参数偏差,在规定的使用条件范围内,对电路性能容差的影响. 电路容差分析包括如下几种方法: 最坏情况实验法 最坏情况分析法(包括 ...

  5. 蒙特卡罗模拟概述(Monte Carlo Simulation)

    Overview 蒙特卡洛(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于"随机数"的计算方法.这一方法源于美国在第二次世界大战中研制原子弹的"曼哈顿计 ...

  6. 【Matlab 六自由度机器人】基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间(附MATLAB建模仿真完整代码)

    [Matlab 六自由度机器人]基于蒙特卡洛法构建工作空间 往期回顾 前言 正文 一.蒙特卡洛方法及机器人工作空间的概述 1. 蒙特卡洛法 2. 机器人工作空间 二.rand函数的应用 1. rand ...

  7. Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)

    最近我们被客户要求撰写关于风险价值(VaR)的研究报告,包括一些图形和统计输出. 如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险. 金融和投资组合风险管理中 ...

  8. 蒙特卡罗方法(Monte Carlo method)浅入

    蒙特卡罗方法概述 蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一 ...

  9. 蒙特卡罗方法(Monte Carlo method)

    蒙特卡罗方法(Monte Carlo method) 蒙特卡罗方法概述   蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常 ...

最新文章

  1. 优达学城《DeepLearning》2-2:迁移学习
  2. ”图书馆助手“典型用户和用户场景
  3. ViewPager+TabLayout
  4. 2020-12-12(c++多维数组的反编译观察)
  5. python opencv 官方文档里LaTeX公式不能正常显示怎么办?
  6. 计算机设备维修税率是多少,设备维修税率是多少
  7. Windows Terminal 新手入门
  8. Java笔记(十七) 异步任务执行服务
  9. L1-065 嫑废话上代码 (5 分)-PAT 团体程序设计天梯赛 GPLT
  10. Odoo 强大的开源微信模块 oejia_wx
  11. orcad中的PSpice仿真加入厂商模型
  12. Jasperreports TextField自动换行
  13. 目前介绍区块链最好的教学视频
  14. 如何判断 Oracle RAC 中的 Master 主节点
  15. 最新最佳最重要的计算机相关网站推荐(更新版)
  16. iTween 用法总结
  17. uni-app 微信小程序分享按钮
  18. 弘辽科技:拼多多推广计划怎么设置划算?如何做好推广?
  19. Unity --- 导航网格 与 导航的使用
  20. staruml画的图怎么加载到word_StarUML配置Word生成文档模板

热门文章

  1. 检测ip是否为中国php,PHP判断IP是中国IP还是外国IP
  2. python 战舰_Python战舰随机数发生器
  3. 农夫过河算法最简便的c语言,C语言农夫过河
  4. sincerit 王者荣耀(01背包)
  5. xss漏洞开源网站包
  6. Asp.net 中将文字写入图片中
  7. 2023年有哪些值得推荐的蓝牙耳机?小米|南卡|JBL等等高性价比蓝牙耳机推荐
  8. android 音乐播放 启动方式 (3)服务通过发送广播来控制activity显示进度等
  9. (已更新)Discuz手机模板:NVBING5-APP手机版,界面美观大方,可封装安卓/苹果APP,模板文件+插件+分类信息导入文件
  10. 大于2TB的卷的知识.主要关于windows, EFI,GPT