Monte-Carlo Dropout(蒙特卡罗 dropout),Aleatoric Uncertainty,Epistemic Uncertainty
目录
- 深度学习中的两个不确定性
- 偶然不确定性
- 认知不确定性
- Monte-Carlo Dropout(蒙特卡罗 dropout)
- 估计不确定性
- 利用不确定性训练模型
- 回归任务
- 分类任务
深度学习中的两个不确定性
偶然不确定性
偶然不确定性(Aleatoric Uncertainty,AU)又称为数据不确定性,是由于观测数据本身的噪声产生的(人脸不清楚,标注框边缘不准确······),偶然不确定性是无法通过获取更多的观测数据来降低的。
认知不确定性
认知不确定性(Epistemic Uncertainty,EU)又称为模型不确定性,是由于模型参数的不确定性、模型结构的不确定性产生的,即模型训练的不是很好,所以模型得出来的结果不是结果存在不确定性。
Monte-Carlo Dropout(蒙特卡罗 dropout)
Monte-Carlo Dropout( 蒙特卡罗 dropout ),简称 MC dropout , 想要深入了解理论推导可以看原论文:
Dropout as a Bayesian Approximation:Representing Model Uncertainty in Deep Learning
这里只做简单介绍:
对于一个模型的输出结果,我们想得到这个结果的方差来计算模型不确定性(认知不确定性)。而模型的参数是固定的,一个单独输出值是得不到方差的。如果说——我们能够用同一个模型,对同一个样本进行T次预测,而且这T次的预测值各不相同,就能够计算方差。
问题是同一个模型同一个样本,怎么得到不同的输出呢?我们可以让学到的模型参数不是确定的值,而是服从一个分布,那么模型参数就可以从这个分布中采样得到,每一次采样,得到的模型参数都是不同的,这样模型产生的结果也是不同的,我们的目的就达到了。
但是如何让模型的参数不是确定的而是服从一个分布呢? 现成的dropout就是,使用dropout来训练模型时,模型的参数可以看成是服从一个伯努利分布(比如dropout radio =0.5,一种说法是:这层神经元中有一半会被dropout,换种说法就是——这层的每个神经元都有0.5的概率被dropout,这就是伯努利分布)。但是我们估计模型不确定度肯定是在训练好的模型上,也就是测试模型时估计的。所以我们只需要在预测的时候,仍然将dropout打开,预测 TTT 次,取预测的平均值就是最终的预测值。并且通过平均值就可以得到方差,这样就得到深度学习的不确定度了。这种方法也被称为MC Dropout贝叶斯神经网络。
估计不确定性
我们估计不确定性的目的是:估计模型对输出结果的不确定性。
同时,因为我们模型在对样本计算的时候,偶然不确定性已经存在于样本数据中,已经影响到了我们模型的输出结果,所以实际上我们对模型的输出结果进行不确定性估计的时候就是同时将偶然不确定性和认知不确定性同时估计了。
估计的方法,我们可以采用MC dropout。
对于回归问题,不确定性可以用输出值的方差来表示: 1T∑t=1T(fW^t(x)−E(y))2\displaystyle \large \frac 1T \sum_{t=1}^T (f^{\hat W_t}(x)-E(y))^2T1t=1∑T(fW^t(x)−E(y))2
其中,E(y)=1T∑t=1TfW^t(x)\large E(y) = \frac 1T \sum_{t=1}^Tf^{\hat W_t}(x)E(y)=T1∑t=1TfW^t(x)表示输出的平均值。
对于分类问题, TTT 次预测的概率为:
其中 W^t∽qθ∗(W)\hat W_t \backsim \large q^*_\theta(W)W^t∽qθ∗(W) ,就是每次采样的模型参数。
不确定性可以用熵来衡量:H(p)=−∑c=1Cpclogpc\displaystyle\large H(p) =-\sum_{c=1}^C p_c\log p_cH(p)=−c=1∑Cpclogpc
利用不确定性训练模型
回归任务
为了将两种不确定性结合到同一个模型中,我们需要两组输出:一组是最终的预测结果 y^\hat yy^,另一组是样本的偶然不确定性 σ^\hat \sigmaσ^ 。即:
通过最小化以下的损失函数来训练模型:
其中 DDD 表示样本数量, iii 为像素的索引。上面的损失包含了两部分:一部分是回归模型的残差,用于捕获模型参数的认知不确定性;另一部分是像素点的偶然不确定性,充当正则化项。注意到,在学习偶然不确定性时,其实是不需要为方差 σ^i\hat \sigma_iσ^i 额外标注标签的。
因为如果当一个样本 iii 很难预测对,为了最小化整个损失, σ^i\hat \sigma_iσ^i 会相应地变大,而 12logσi^2\frac12\log\hat {\sigma_i}^221logσi^2 又会防止 σ^i\hat \sigma_iσ^i 变得无穷大。
所以并不需要 σ^\hat \sigmaσ^ 的真实标签。
注:损失函数公式的并不是随便给出的,而是可以由数学推导得到的,上面的文字只是对公式做了解释。
实际训练中, σ^i−2\hat \sigma_i^{-2}σ^i−2 其实相当于一项自适应的权重,对于难以预测的样本,数据中存在较多的固有噪声,这项权重比较小;而对于容易预测的样本,数据中存在的固有噪声比较少,这项权重会比较大。这会让模型在训练过程中区别地对待不同的样本。
分类任务
在分类任务中,对于一个样本 iii,模型会输出一个预测向量 \largexi_ii ,然后再通过softmax操作得到一组概率 pip_ipi。假定预测向量服从高斯分布:
这里 \largefiW{^W_i}iW 和 σiW\sigma{^W_i}σiW 是网络参数为 WWW 时的输出(个人认为就是模型同时学习 \largefiW{^W_i}iW 和 σiW\sigma{^W_i}σiW )。相当于对向量 fiW{^W_i}iW 施加了一个方差为 σiW\sigma{^W_i}σiW 的噪声。
训练模型的损失函数可以写为:
其中,第二项,也就是损失函数项,实际上就是交叉熵损失函数进一步变形后的结果。
简单推导:
假定一共有C个类别,样本 iii 属于类别 ccc,yi,c′∈y_{i,c'}\inyi,c′∈ {0,1},那么样本的交叉熵损失为:
因为要执行T次预测,因此损失也要取T次的平均,最后取对数就得到了上面的损失函数公式。
至于方差σiW\sigma{^W_i}σiW的学习和x^i,t\large\hat x_{i,t}x^i,t的采样,其实就是运用 reparemerization 的技巧,详情可以参考VAE的内容。
变分自编码器(Variational Auto-Encoder,VAE)
参考文章:
深度学习中的不确定性
论文:
What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? (NIPS 2017)
Monte-Carlo Dropout(蒙特卡罗 dropout),Aleatoric Uncertainty,Epistemic Uncertainty相关推荐
- 深度学习中的两种不确定性:偶然不确定性和认知不确定性(Aleatoric Uncertainty Epistemic Uncertainty)
转载:https://zhuanlan.zhihu.com/p/56986840 注: 本文中,概念.公式与实验均基于 Alex Kendall & Yarin Gal的论文:https:// ...
- Monte Carlo Integration 蒙特卡罗方法求积分 附简单例题+代码
摘要 蒙特卡罗积分是一种基于随机抽样的统计方法.打个比方,要想知道抛出硬币得到正面的概率,随机投1000次,得到500次左右,推测出概率应该为 1 2 \frac{1}{2} 21.差不多是这意思, ...
- Monte-Carlo Dropout,蒙特卡罗 dropout
Monte-Carlo Dropout Monte-Carlo Dropout(蒙特卡罗 dropout),简称 MC dropout. 一种从贝叶斯理论出发的 Dropout 理解方式,将 Drop ...
- 蒙特卡罗(Monte Carlo)方法
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 一 起源 这一方法源于美国在第二次世界大战进研制原子弹的&qu ...
- 蒙特卡洛方法(Monte Carlo method,也有翻译成“蒙特卡罗方法”)
蒙特卡洛方法(Monte Carlo method,也有翻译成"蒙特卡罗方法")是以概率和统计的理论.方法为基础的一种数值计算方法,将所求解的问题同一定的概率模型相联系,用计算机实 ...
- LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)
容差分析技术是一种预测电路性能参数稳定性的方法.它主要研究电路组成部分参数偏差,在规定的使用条件范围内,对电路性能容差的影响. 电路容差分析包括如下几种方法: 最坏情况实验法 最坏情况分析法(包括 ...
- 蒙特卡罗模拟概述(Monte Carlo Simulation)
Overview 蒙特卡洛(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于"随机数"的计算方法.这一方法源于美国在第二次世界大战中研制原子弹的"曼哈顿计 ...
- 【Matlab 六自由度机器人】基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间(附MATLAB建模仿真完整代码)
[Matlab 六自由度机器人]基于蒙特卡洛法构建工作空间 往期回顾 前言 正文 一.蒙特卡洛方法及机器人工作空间的概述 1. 蒙特卡洛法 2. 机器人工作空间 二.rand函数的应用 1. rand ...
- Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)
最近我们被客户要求撰写关于风险价值(VaR)的研究报告,包括一些图形和统计输出. 如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险. 金融和投资组合风险管理中 ...
- 蒙特卡罗方法(Monte Carlo method)浅入
蒙特卡罗方法概述 蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一 ...
最新文章
- HashSet中的add()方法( 三 )(详尽版)
- 华为持续引领,开辟5G Massive MIMO绿色新赛道
- [每日一题] OCP1z0-047 :2013-08-17 EXTERNAL TABLE――加载数据 ............................56...
- 不是程序员学python有什么用-程序员的基本功:为什么非要用Python,其他语言不好吗?...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(包管理和环境管理)
- php 正则匹配unicode,PHP中正则表达式对UNICODE字符码的匹配方法
- Chrome谷歌浏览器76地址栏隐藏的HTTPS和WWW标记如何恢复
- arm-linux启动,linux启动流程arm
- 深度学习与 Spark 和 TensorFlow
- [转载] Python:Numpy详解
- 双线服务器有什么作用,双线服务器什么意思
- java例程练习(数组复制与arraycopy)
- Spring MVC拦截器配置以及统一登陆校验实现
- linux 内核编程之proc虚拟文件系统
- 怎么用计算机扫描照片,怎么扫描图片上的文字-无需扫描仪,教你三招轻松搞定文字识别!...
- SBC在企业IP通信系统中的应用
- 中职学校计算机技能大赛总结,中职学校技能大赛总结
- 大数据时代你需要知道的7个大数据定义
- Java基础复习-数据类型学习
- 从蓄水池算法到大数据算法一般性的一点看法
热门文章
- 滴滴章文嵩:我们比AlphaGo面临的问题要复杂很多很多倍
- (十三)jQuery addClass()和removeClass()方法
- 开机出现 A disk read error occurred Press 时怎么办
- Oracle:ORA-00054 资源正忙 -- 锁表的解决方法
- 21届校招中获得12家公司offer的一些经验(包括6家银行信息科技岗offer)
- AID Learning 0.87F3安装注意事项
- Tomcat-幽灵猫GhostCat漏洞复现
- word分节符,分页符的区别,链接到上一页
- play商店 小米_小米应用商店和Google Play商店的简单对比
- 如何获取qq空间图片的url