前言

贝叶斯的一系列方法让我们在对数据建模的时候可以评估模型的认知不确定性,即:我们可以获得一种模型对自己的预测值有多大把握的评价指标,这种评价在许多方法中通常以方差的形式出现。本文介绍2016年在模型uncertainty方面比较有影响力的一篇文章,文章的附录中有大量的推导,考虑到其中有些公式的变换涉及到额外的文献,对一些推导细节不做深入讨论,只大概了解其过程和思想,重点看如何搭建模型,以及如何体现uncertainty。
文章:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning
附录:Dropout as a Bayesian Approximation: Appendix

背景

Dropout

设有一个只有一层隐藏层的神经网络,隐藏层的神经元数量为KKK,由第一层连接隐藏层的网络权重为W1W_1W1​,大小为Q×KQ\times KQ×K,由隐藏层连接输出的权重为W2W_2W2​,大小为K×DK\times DK×D,隐藏层的偏置向量为bbb,大小为KKK。

如果在隐藏层和输出层之前添加dropout应该如何用数学表示?
设z1,z2\bm{z_1},\bm{z_2}z1​,z2​分别为QQQ和KKK维的二进制向量,向量中的每个元素只能取000或111,dropout就相当于每个元素服从伯努利分布,即:
z1,q∼Bernouli(p1)forq=1,...,Qz2,k∼Bernouli(p2)fork=1,...,Kz_{1,q}\sim \text{Bernouli} (p_1) \quad for \quad q=1,...,Q \\ z_{2,k}\sim \text{Bernouli} (p_2) \quad for \quad k=1,...,K z1,q​∼Bernouli(p1​)forq=1,...,Qz2,k​∼Bernouli(p2​)fork=1,...,K
其中p1,p2p_1,p_2p1​,p2​就是每层神经元激活的概率。将z\bm{z}z表示成对角矩阵diag(z)\text{diag}(z)diag(z),网络的输出可以表示为:
y^=σ(x(z1W1)+b)(z2W2)\hat y=\sigma(x(z_1W_1)+b)(z_2W_2) y^​=σ(x(z1​W1​)+b)(z2​W2​)
其中σ\sigmaσ为激活函数。网络的损失函数表示为(只考虑回归问题):
Ldropout=12N∑n=1N∣∣yn−y^n∣∣22+λ1∣∣W1∣∣22+λ2∣∣W2∣∣22+λ3∣∣b∣∣22\mathcal{L}_{dropout}=\frac{1}{2N}\sum_{n=1}^N||y_n-\hat y_n||_2^2+\lambda_1||W_1||_2^2+\lambda_2||W_2||_2^2+\lambda_3||b||_2^2 Ldropout​=2N1​n=1∑N​∣∣yn​−y^​n​∣∣22​+λ1​∣∣W1​∣∣22​+λ2​∣∣W2​∣∣22​+λ3​∣∣b∣∣22​
记住dropout所对应的损失函数的表示形式,因为文章的中心意思就是在说变分推断+高斯过程也可以得到相同表示形式的损失函数。

高斯过程

详见高斯过程回归----MC dropout前导篇

变分推断

详见贝叶斯神经网络----从贝叶斯准则到变分推断

如何使用dropout近似贝叶斯

高斯过程

高斯过程是贝叶斯的一种表现形式,现定义一个高斯过程的协方差函数为:
K(x,y)=∫p(w)p(b)σ(wTx+b)σ(wTy+b)dwdbK(x,y)=\int p(w)p(b) \sigma(w^Tx+b)\sigma(w^Ty+b) \text{d}w\text{d}b K(x,y)=∫p(w)p(b)σ(wTx+b)σ(wTy+b)dwdb
使用Monte Carlo近似上式:
K^(x,y)=1K∑i=1Kσ(wkTx+bk)σ(wkTy+bk)\hat K(x,y)=\frac{1}{K}\sum_{i=1}^K \sigma(w_k^Tx+b_k)\sigma(w_k^Ty+b_k) K^(x,y)=K1​i=1∑K​σ(wkT​x+bk​)σ(wkT​y+bk​)
式中p(w)p(\bm{w})p(w)和p(b)p(\bm{b})p(b)均服从标准的多元高斯分布,即每一元服从均值为000,方差为111的高斯分布。Monte Carlo采样的次数KKK与隐藏神经元的数量相同,所以此时的W1W_1W1​是一个Q×KQ\times KQ×K的矩阵。

从高斯过程来看,输入到输出的关系如何表示?
F∣X,W1,b∼N(0,K^(X,X))Y∣F∼N(F,τ−1IN)F|X,W_1,b \sim N(0,\hat K(X,X)) \\ Y|F \sim N(F, \tau^{-1}I_N) F∣X,W1​,b∼N(0,K^(X,X))Y∣F∼N(F,τ−1IN​)
这样看来好像只有W1W_1W1​,网络隐藏层去哪了?先接着向下计算,先将FFF视为一个隐变量,通过对上式积分可以得到由输入预测输出的条件概率:
p(Y∣X)=∫p(Y∣F)p(F∣W1,b,X)p(W1)p(b)dW1dbdFp(Y|X)=\int p(Y|F)p(F|W_1,b,X)p(W_1)p(b)\text{d}W_1\text{d}b\text{d}F p(Y∣X)=∫p(Y∣F)p(F∣W1​,b,X)p(W1​)p(b)dW1​dbdF
令:
ϕ(x,W1,b)=1Kσ(W1Tx+b)Φ=[ϕ(xn,W1,b)]n=1NK^(X,X)=ΦΦT\phi(x,W_1,b)=\sqrt{\frac{1}{K}}\sigma(W_1^Tx+b) \\ \Phi=[\phi(x_n,W_1,b)]_{n=1}^N \quad \hat K(X,X)=\Phi\Phi^T ϕ(x,W1​,b)=K1​​σ(W1T​x+b)Φ=[ϕ(xn​,W1​,b)]n=1N​K^(X,X)=ΦΦT
此时条件概率p(Y∣X)p(Y|X)p(Y∣X)改写为(高斯分布的性质):
p(Y∣X)=∫N(Y;0,ΦΦT+τ−1IN)p(W1)p(b)dW1dbdFp(Y|X)=\int N(Y;0,\Phi\Phi^T+\tau^{-1}I_N)p(W_1)p(b)\text{d}W_1\text{d}b\text{d}F p(Y∣X)=∫N(Y;0,ΦΦT+τ−1IN​)p(W1​)p(b)dW1​dbdF
上式的分号表示条件概率,即已知后面的分布,计算YYY对应的概率值。因为YYY的每个元素ydy_dyd​代表一个样本的输出,是一个DDD维的向量,所以每个ydy_dyd​是一个多元高斯分布,整个YYY是一个高斯过程。现引入辅助随机变量wd∼N(0,IK)w_d\sim N(0, I_K)wd​∼N(0,IK​),则有(不要管为什么可以这样改写,作者引入了其他的参考文献):
N(yd;0,ΦΦT+τ−1IN)=∫N(yd;Φwd,τ−1IN)N(wd;0,IK)dwdN(y_d;0,\Phi\Phi^T+\tau_{-1}I_N)=\int N(y_d;\Phi w_d,\tau^{-1}I_N)N(w_d;0,I_K)\text{d}w_d N(yd​;0,ΦΦT+τ−1​IN​)=∫N(yd​;Φwd​,τ−1IN​)N(wd​;0,IK​)dwd​
看起来好像是把其中的一个Φ\PhiΦ换成了另一种高斯分布的参数,这也是前面的Monte Carlo要采样KKK次的原因:为了与隐藏层的神经元数量保持一致,接下来,令W2=[wd]d=1DW_2=[w_d]_{d=1}^DW2​=[wd​]d=1D​,为K×DK\times DK×D的矩阵,条件概率可以改写为:
p(Y∣X)=∫p(Y∣X,W1,W2,b)p(W1)p(W2)p(b)dW1dW2dbp(Y|X)=\int p(Y|X,W_1,W_2,b)p(W_1)p(W_2)p(b)\text{d}W_1\text{d}W_2\text{d}b p(Y∣X)=∫p(Y∣X,W1​,W2​,b)p(W1​)p(W2​)p(b)dW1​dW2​db
这个公式可以认为是神经网络预测的表达式,但它实际上是通过高斯过程实现的,直接计算高斯分布会牵涉到对于N×NN\times NN×N矩阵的逆运算,复杂度很高,所以文章使用变分推断的方式来近似求解。

变分推断

定义一个变分分布:
q(W1,W2,b):=q(W1)q(W2)q(b)q(W_1,W_2,b):=q(W_1)q(W_2)q(b) q(W1​,W2​,b):=q(W1​)q(W2​)q(b)
:=:=:=表示用右边的表达式来表达左边。定义q(W1)q(W_1)q(W1​)和q(W2)q(W_2)q(W2​)均为高斯混合分布,q(b)q(b)q(b)为一元高斯分布,则有:
q(W1)=∏q=1Qq(wq)q(wq)=p1N(mq,σ2IK)+(1−p1)N(0,σ2IK)q(W2)=∏k=1Kq(wk)q(wk)=p2N(mk,σ2ID)+(1−p1)N(0,σ2ID)q(b)=N(m,σ2IK)q(W_1)=\prod_{q=1}^Qq(w_q)\\q(w_q)=p_1N(m_q,\sigma^2I_K)+(1-p_1)N(0,\sigma^2I_K) \\ q(W_2)=\prod_{k=1}^Kq(w_k)\\q(w_k)=p_2N(m_k,\sigma^2I_D)+(1-p_1)N(0,\sigma^2I_D) \\ q(b)=N(m,\sigma^2I_K) q(W1​)=q=1∏Q​q(wq​)q(wq​)=p1​N(mq​,σ2IK​)+(1−p1​)N(0,σ2IK​)q(W2​)=k=1∏K​q(wk​)q(wk​)=p2​N(mk​,σ2ID​)+(1−p1​)N(0,σ2ID​)q(b)=N(m,σ2IK​)
令M1=[mq]q=1Q,M2=[mk]k=1KM_1=[m_q]_{q=1}^Q,M_2=[m_k]_{k=1}^KM1​=[mq​]q=1Q​,M2​=[mk​]k=1K​,则原来关于W1,W2,bW_1,W_2,bW1​,W2​,b的优化变成了对M1,M2,mM_1,M_2,mM1​,M2​,m的求解,这里的q(W1,W2,b)q(W_1,W_2,b)q(W1​,W2​,b)是一种条件分布,它是对后验分布p(W1,W2,b∣X,Y)p(W_1,W_2,b|X,Y)p(W1​,W2​,b∣X,Y)的近似。
我们看q(wq)q(w_q)q(wq​)和q(wk)q(w_k)q(wk​)的表示是由两个高斯分布组成,这很像伯努利的表示形式,即有ppp的概率选mqm_qmq​,有1−p1-p1−p的概率为0,不同的地方在于wqw_qwq​从分布中采样,而不是一个确定值。作者用这种分布来近似后验分布也是为了说明dropout的意义,需要注意的是,我们可以选择任意的分布形式来近似待求解的后验分布,这种混合高斯的形式只是一种可用形式而已,作者选它正好解释dropout为什么可以在传统的NN模型中引入不确定性,是因为用这种混合高斯来近似后验分布得到的损失函数与在传统的NN模型中添加dropout得到的损失函数一致。

回归问题的ELBO计算

在贝叶斯推断中,通过优化Evidence Lower Bound(ELBO)来求解后验分布:
LGP−VI:=∫p(W1,W2,b)log⁡p(Y∣X,W1,W2,b)−KL(q(W1,W2,b)∣∣p(W1,W2,b∣X,Y))dW1dW2db\mathcal{L}_{GP-VI}:=\int p(W_1,W_2,b)\log p(Y|X,W_1,W_2,b)-KL(q(W_1,W_2,b)||p(W_1,W_2,b|X,Y))\text{d}W_1\text{d}W_2\text{d}b LGP−VI​:=∫p(W1​,W2​,b)logp(Y∣X,W1​,W2​,b)−KL(q(W1​,W2​,b)∣∣p(W1​,W2​,b∣X,Y))dW1​dW2​db
根据高斯分布的表达式log⁡p(Y∣X,W1,W2,b)\log p(Y|X,W_1,W_2,b)logp(Y∣X,W1​,W2​,b)可以写为:
log⁡p(Y∣X,W1,W2,b)=∑d=1Dlog⁡N(yd;Φwd,τ−1IN)=−ND2log⁡(2π)+ND2log⁡(τ)−∑d=1Dτ2∣∣yd−Φwd∣∣22\log p(Y|X,W_1,W_2,b)=\sum_{d=1}^D\log N(y_d;\Phi w_d,\tau^{-1}I_N)\\=-\frac{ND}{2}\log(2\pi)+\frac{ND}{2}\log (\tau)-\sum_{d=1}^D\frac{\tau}{2}||y_d-\Phi w_d||_2^2 logp(Y∣X,W1​,W2​,b)=d=1∑D​logN(yd​;Φwd​,τ−1IN​)=−2ND​log(2π)+2ND​log(τ)−d=1∑D​2τ​∣∣yd​−Φwd​∣∣22​
需要注意的一点,这里的ydy_dyd​是相互独立的,此时ydy_dyd​服从一个高斯分布,因为YYY是一个N×DN\times DN×D的矩阵,如果按照单个样本来看,即yny_nyn​之间不条件独立,但是从另一个方向来看,即预测值的不同元之间是条件独立的,也就是说ydy_dyd​是条件独立的。令Y^=ΦW2\hat Y=\Phi W_2Y^=ΦW2​,有
∑d=1Dτ2∣∣yd−y^d∣∣22=∑n=1Nτ2∣∣yn−y^n∣∣22\sum_{d=1}^D\frac{\tau}{2}||y_d-\hat y_d||_2^2=\sum_{n=1}^N \frac{\tau}{2}||y_n-\hat y_n||_2^2 d=1∑D​2τ​∣∣yd​−y^​d​∣∣22​=n=1∑N​2τ​∣∣yn​−y^​n​∣∣22​
此时y^n=ϕ(xn,W1,b)W2=1Kσ(xnW1+b)W2\hat y_n=\phi(x_n,W_1,b)W_2=\sqrt{\frac{1}{K}}\sigma(x_nW_1 + b)W_2y^​n​=ϕ(xn​,W1​,b)W2​=K1​​σ(xn​W1​+b)W2​,有
log⁡p(Y∣X,W1,W2,b)=∑n=1Nlog⁡N(yn;ϕ(xn,W1,b)W2,τ−1ID)=∑n=1Nlog⁡p(yn∣xn,W1,W2,b)\log p(Y|X,W_1,W_2,b)=\sum_{n=1}^N\log N(y_n;\phi(x_n,W_1,b)W_2,\tau^{-1}I_D) \\=\sum_{n=1}^N\log p(y_n|x_n,W_1,W_2,b) logp(Y∣X,W1​,W2​,b)=n=1∑N​logN(yn​;ϕ(xn​,W1​,b)W2​,τ−1ID​)=n=1∑N​logp(yn​∣xn​,W1​,W2​,b)
此时的ELBO可以写为:
∑n=1N∫p(W1,W2,b)log⁡p(yn∣xn,W1,W2,b)−KL(q(W1,W2,b)∣∣p(W1,W2,b∣X,Y))dW1dW2db\sum_{n=1}^N\int p(W_1,W_2,b)\log p(y_n|x_n,W_1,W_2,b)-KL(q(W_1,W_2,b)||p(W_1,W_2,b|X,Y))\text{d}W_1\text{d}W_2\text{d}b n=1∑N​∫p(W1​,W2​,b)logp(yn​∣xn​,W1​,W2​,b)−KL(q(W1​,W2​,b)∣∣p(W1​,W2​,b∣X,Y))dW1​dW2​db

q(ϵ1)=N(0,IQ×K),q(z1,q)=Bernouli(p1)forq=1,...,Qq(ϵ2)=N(0,IK×D),q(z1,k)=Bernouli(p2)fork=1,...,Kq(ϵ)=N(0,IK)q(\epsilon_1)=N(0,I_{Q\times K}),q(z_{1,q})=\text{Bernouli}(p_1) \quad for \quad q=1,...,Q\\ q(\epsilon_2)=N(0,I_{K\times D}),q(z_{1,k})=\text{Bernouli}(p_2) \quad for \quad k=1,...,K \\ q(\epsilon)=N(0,I_K) q(ϵ1​)=N(0,IQ×K​),q(z1,q​)=Bernouli(p1​)forq=1,...,Qq(ϵ2​)=N(0,IK×D​),q(z1,k​)=Bernouli(p2​)fork=1,...,Kq(ϵ)=N(0,IK​)
这里的ϵ\epsilonϵ是为了与σ\sigmaσ相乘时能够得到输出的矩阵大小符合WWW的大小。根据原来变分近似的写法,参数可以分别重新写为:
W1=z1(M1+σϵ1)+(1−z1)σϵ1W2=z2(M2+σϵ2)+(1−z2)σϵ2b=m+σϵW_1=z_1(M_1+\sigma \epsilon_1)+(1-z_1)\sigma \epsilon_1 \\ W_2=z_2(M_2+\sigma \epsilon_2)+(1-z_2)\sigma \epsilon_2 \\ b=m+\sigma \epsilon W1​=z1​(M1​+σϵ1​)+(1−z1​)σϵ1​W2​=z2​(M2​+σϵ2​)+(1−z2​)σϵ2​b=m+σϵ
则有:
∑n=1N∫p(W1,W2,b)log⁡p(yn∣xn,W1,W2,b)dW1dW2db=∑n=1N∫p(z1,ϵ1,z2,ϵ2,ϵ)log⁡p(yn∣xn,W1(z1,ϵ1),W2(z2,ϵ2),b(ϵ))\sum_{n=1}^N\int p(W_1,W_2,b)\log p(y_n|x_n,W_1,W_2,b)\text{d}W_1\text{d}W_2\text{d}b\\ =\sum_{n=1}^N\int p(z_1,\epsilon_1,z_2,\epsilon_2,\epsilon)\log p(y_n|x_n,W_1(z_1,\epsilon_1),W_2(z_2,\epsilon_2),b(\epsilon)) n=1∑N​∫p(W1​,W2​,b)logp(yn​∣xn​,W1​,W2​,b)dW1​dW2​db=n=1∑N​∫p(z1​,ϵ1​,z2​,ϵ2​,ϵ)logp(yn​∣xn​,W1​(z1​,ϵ1​),W2​(z2​,ϵ2​),b(ϵ))
使用Monte Carlo对上式近似可得:
∑n=1N∫p(W1,W2,b)log⁡p(yn∣xn,W1,W2,b)dW1dW2db≈∑n=1Nlog⁡p(yn∣xn,W^1n,W^2n,b^n)\sum_{n=1}^N\int p(W_1,W_2,b)\log p(y_n|x_n,W_1,W_2,b)\text{d}W_1\text{d}W_2\text{d}b \\ \approx\sum_{n=1}^N\log p(y_n|x_n,\hat W_1^n,\hat W_2^n,\hat b^n) n=1∑N​∫p(W1​,W2​,b)logp(yn​∣xn​,W1​,W2​,b)dW1​dW2​db≈n=1∑N​logp(yn​∣xn​,W^1n​,W^2n​,b^n)
又有对KL散度的近似(具有足够大的维数且均值随机分布的混合高斯函数的熵趋向于高斯函数体积之和,原文是这样讲的,我也不知道为什么):
KL(q(W1)∣∣p(W1))≈QK(σ2−log⁡(σ2)−1)+p12∑q=1QmqTmq+CKL(q(W2)∣∣p(W2))≈QK(σ2−log⁡(σ2)−1)+p22∑k=1KmkTmk+CKL(q(b)∣∣p(b))=12(mTm+K(σ2−log⁡(σ2)−1))+CKL(q(W_1)||p(W_1)) \approx QK(\sigma^2-\log(\sigma^2)-1)+\frac{p_1}{2}\sum_{q=1}^Qm_q^Tm_q+C \\ KL(q(W_2)||p(W_2)) \approx QK(\sigma^2-\log(\sigma^2)-1)+\frac{p_2}{2}\sum_{k=1}^Km_k^Tm_k+C \\ KL(q(b)||p(b))=\frac{1}{2}(m^Tm+K(\sigma^2-\log(\sigma^2)-1))+C KL(q(W1​)∣∣p(W1​))≈QK(σ2−log(σ2)−1)+2p1​​q=1∑Q​mqT​mq​+CKL(q(W2​)∣∣p(W2​))≈QK(σ2−log(σ2)−1)+2p2​​k=1∑K​mkT​mk​+CKL(q(b)∣∣p(b))=21​(mTm+K(σ2−log(σ2)−1))+C
我们将原来的ELBO拆分成了近似的形式,忽略常数项,可以得到待优化的目标函数为:
LGP−MC∝−12N∑n=1N∣∣yn−y^n∣∣22−p12τN∣∣M1∣∣22−p22τN∣∣M2∣∣22−12τN∣∣m∣∣22\mathcal{L}_{GP-MC} \varpropto -\frac{1}{2N}\sum_{n=1}^N||y_n-\hat y_n||_2^2-\frac{p_1}{2\tau N}||M_1||_2^2-\frac{p_2}{2\tau N}||M_2||_2^2-\frac{1}{2\tau N}||m||_2^2 LGP−MC​∝−2N1​n=1∑N​∣∣yn​−y^​n​∣∣22​−2τNp1​​∣∣M1​∣∣22​−2τNp2​​∣∣M2​∣∣22​−2τN1​∣∣m∣∣22​
写了这么多,推导过程其实还有很多细节,并且还有分类问题没有写,但是思想已经概括了:高斯过程+变分推断可以得到与NN+dropout相同的损失函数,而因为高斯过程本身就实现了对模型不确定性的评估,所以传统NN在添加dropout也可以引入不确定性。直观来看,在传统的神经网络中添加dropout之后,由于每个输入和每次前向传播dropout选择激活哪个神经元都是随机的,即使是相同的输入样本,得到的输出也有可能不一样,多次输入同一个样本,输出围绕均值上下浮动的程度就可以看成是模型的一种不确定性

编程实现

import numpy as np
import matplotlib.pyplot as plt
import tensorflow._api.v2.compat.v1 as tf
tf.disable_v2_behavior()class VariationalDense:def __init__(self, n_in, n_out, model_prob, lam):self.model_prob = model_probself.lam = lamself.bern = tf.compat.v1.distributions.Bernoulli(probs=self.model_prob, dtype=tf.float32)self.model_M = tf.Variable(tf.random.truncated_normal([n_in, n_out], stddev=0.01))self.model_m = tf.Variable(tf.zeros([n_out]))self.model_W = tf.matmul(tf.diag(self.bern.sample((n_in, ))), self.model_M)def __call__(self, X, activation=tf.identity):output = activation(tf.matmul(X, self.model_W) + self.model_m)if self.model_M.shape[1] == 1:output = tf.squeeze(output)return output@propertydef regularization(self):return self.lam * (self.model_prob * tf.reduce_sum(tf.square(self.model_W)) + tf.reduce_sum(tf.square(self.model_m)))n_samples = 100
X = np.random.normal(size=(n_samples, 1))
y = np.random.normal(np.cos(5. * X) / (np.abs(X) + 1.), 0.1).ravel() # np.ravel()函数将多维数组转化为一维数组
X_pred = np.atleast_2d(np.linspace(-3., 3, num=100)).T  # 将数组转化为至少两维
X = np.hstack((X, X**2, X**3)) # 将两个数组按水平方向合起来
X_pred = np.hstack((X_pred, X_pred**2, X_pred**3))# create the tensorflow model
n_feats = X.shape[1]
n_hidden = 100
model_prob = 0.9
model_lam = 1e-2
model_X = tf.placeholder(tf.float32, [None, n_feats])
model_y = tf.placeholder(tf.float32, [None])
model_L_1 = VariationalDense(n_feats, n_hidden, model_prob, model_lam)
model_L_2 = VariationalDense(n_hidden, n_hidden, model_prob, model_lam)
model_L_3 = VariationalDense(n_hidden, 1, model_prob, model_lam)
model_out_1 = model_L_1(model_X, tf.nn.relu)
model_out_2 = model_L_2(model_out_1, tf.nn.relu)
model_pred = model_L_3(model_out_2)
model_sse = tf.reduce_sum(tf.square(model_pred - model_y))
model_mse = model_sse / n_samples
model_loss = (model_sse + model_L_1.regularization + model_L_2.regularization + model_L_3.regularization)train_step = tf.train.AdamOptimizer(1e-3).minimize(model_loss)
with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(1000):sess.run(train_step, {model_X: X, model_y:y})if i % 100 == 0:mse = sess.run(model_mse, {model_X: X, model_y:y})print("Iteration {}. Mean squared error: {:.4f}.".format(i, mse))# sample from the posteriorn_post = 1000Y_post = np.zeros((n_post, X_pred.shape[0]))for i in range(1000):Y_post[i] = sess.run(model_pred, {model_X: X_pred})if __name__ == '__main__':plt.figure(figsize=(9, 7))for i in range(n_post):plt.plot(X_pred[:, 1], Y_post[i], "b-", alpha=1./200)plt.plot(X[:, 1], y, "r.")plt.grid()plt.show()


从实验结果图来看,对于已经训练的样本点,蓝色的实线部分都很密集,说明这部分方差小,模型对这些数据的预测比较有把握,而在预测两边这些未知数据时,蓝色实线明显呈现发散趋势,方差大,反应模型对这部分数据预测的不确定性。
模型的不确定性计算在风险评估,医疗诊断方面是很有意义的,毕竟并不是什么事情都不需要考虑代价,如果没有多大把握且代价很大,就会造成很严重的后果,这个时候评估模型对于预测的不确定程度就变得很重要。

传统深度模型的uncertainty----Monte Carlo dropout相关推荐

  1. Matlab用Copula模型进行蒙特卡洛(Monte Carlo)模拟和拟合股票收益数据分析

    最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出. 最近,copula 在仿真模型中变得流行起来.Copulas 是描述变量之间依赖关系的函数,并提供了一种创建分布以对相关多元 ...

  2. 强化学习系列(五):蒙特卡罗方法(Monte Carlo)

    一.前言 在强化学习系列(四):动态规划中,我们介绍了采用DP (动态规划)方法求解environment model 已知的MDP(马尔科夫决策过程),那么当environment model信息不 ...

  3. 应用Bulter-Volmer方程与Monte Carlo 模型分析CO电氧化动力学

    Kinetics analysis of the CO electrooxidation by Bulter-Volmer equation and Mante Carlo simulation Bu ...

  4. Matlab用向量误差修正VECM模型蒙特卡洛Monte Carlo预测债券利率时间序列和MMSE 预测

    最近我们被客户要求撰写关于VECM的研究报告,包括一些图形和统计输出. 此示例说明如何从 VEC( q ) 模型生成 Monte Carlo 预测.该示例将生成的预测与最小均方误差 (MMSE) 预测 ...

  5. Matlab用向量误差修正VECM模型蒙特卡洛Monte Carlo预测债券利率时间序列和MMSE 预测...

    原文链接:http://tecdat.cn/?p=27246  此示例说明如何从 VEC( q ) 模型生成 Monte Carlo 预测.该示例将生成的预测与最小均方误差 (MMSE) 预测和来自V ...

  6. ADPRL - 近似动态规划和强化学习 - Note 10 - 蒙特卡洛法和时序差分学习及其实例 (Monte Carlo and Temporal Difference)

    Note 10 蒙特卡洛法和时序差分学习 Monte Carlo and Temporal Difference 蒙特卡洛法和时序差分学习 Note 10 蒙特卡洛法和时序差分学习 Monte Car ...

  7. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例

    强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...

  8. 深度学习在CTR预估中的应用 | CTR深度模型大盘点

    作者丨辛俊波 单位丨腾讯 研究方向丨CTR预估,推荐系统 前言 深度学习凭借其强大的表达能力和灵活的网络结构在 NLP.图像.语音等众多领域取得了重大突破.在广告领域,预测用户点击率(Click Th ...

  9. martingale、markov chain、Monte Carlo、MCMC

    文章结构如下: 1: MCMC 1.1 MCMC是什么 1.2 为什么需要MCMC 2: 蒙特卡罗 2.1 引入 2.2 均匀分布,Box-Muller 变换 2.3 拒绝接受采样(Acceptanc ...

  10. 马毅:低维模型与深度模型的殊途同归(神经网络、压缩感知和低秩分解与补全)

    机器之心原创 作者:邱陆陆 上周,今日头条人工智能实验室在清华大学举办了第二期 AI 技术沙龙,邀请到上海科技大学信息科学与技术学院的马毅教授带来题为「高维数据的低维结构与深度模型」的主题分享.马毅教 ...

最新文章

  1. 附录5:TensorFlow基础(一)
  2. 2010有道难题练习赛2
  3. 【C语言笔记】指定初始化器
  4. 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  5. 【三十二】thinkphp之连接数据库、实例化模型
  6. DenseNet:密集卷积网络(2018)
  7. openssl源代码方式安装以及简单的实验
  8. CCF关于举办CSP-J1 CSP-S1 初赛的报名通知
  9. EXCEL数值变为文本型
  10. 批量发送邮件(java开发、带图片和附件)
  11. ESP-MQTT-AT指令连接阿里云物联网平台
  12. mysql下载完安装包怎么办_MySQL下载压缩包安装详细过程
  13. UnionPay-银联支付-netcore(二)
  14. Caused by: net.sf.jsqlparser.parser.ParseException: Encountered “ “LIKE“ “LIKE ““ at line 77。。。。
  15. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
  16. 【Unity3D】点选物体、框选物体、绘制外边框
  17. AD入门学习—元件库的创建2
  18. 平凡而经典的36句人生格言
  19. HTML5-布局篇( 总结 )
  20. 赠书五本《数据分析咖哥十话》

热门文章

  1. http://txt.mop.com/static/788/231/5231788.html
  2. python之Scrapy 的Xpath常用定位相关
  3. 视觉-摄像机3】}摄像机镜头--焦距与视角(选相机和镜头)
  4. 内容市场的2017年:五件大事,每件事都惊心动魄
  5. Dwz 国产框架 JUI 分页组件下拉菜单bug解决方案
  6. PD快速充电协议(转)
  7. 【案例】某区医院绩效工资分配系统和绩效工资分配优化服务案例
  8. nginx.conf配置文件中timeout超时时间设置
  9. 计算机主机硬盘的拆装,机械硬盘怎么拆开?机械硬盘拆卸方法
  10. 50个程序员的网站!建议收藏