贝叶斯神经网络 BBB 学习中遇到的一些问题

这里写目录标题

    • 贝叶斯公式
      • 模型概率的公式
      • 1/n 形式的贝叶斯公式
    • 全概率公式
      • 全概率公式的积分形式
    • 后验推理
      • 后验预测分布 posterior predictive distribution
      • KL 散度
    • 平均场 VI
    • Bayes by Backprop 代码
      • 重新参数化

贝叶斯公式

模型概率的公式

一开始看了这个 https://zhuanlan.zhihu.com/p/98756147

假设模型参数满足一个高斯分布 W ∼ N ( 0 , 1 ) W \sim N(0,1) WN(0,1),观测数据集 X , Y X,Y X,Y 然后他介绍了一个公式说是贝叶斯公式:

p ( W ∣ X , Y ) = p ( Y ∣ X , W ) p ( W ) p ( Y ∣ X ) p(W \vert X,Y) = \dfrac{p(Y \vert X,W)p(W)}{p(Y|X)} p(WX,Y)=p(YX)p(YX,W)p(W)

我一开始是不知道贝叶斯公式是这个,感觉跟我知道的不一样;然后我还不知道他为什么说似然是 p ( W , X ∣ Y ) p(W, X|Y) p(W,XY),对先验、后验、似然的理解我是看 https://blog.csdn.net/kww_kww/article/details/52527888 的,所以我就固定死了理解右边分子上的是似然

之后看了别人的文章,也挺多看不懂,但是看到别人提了关键的一句

X 和 W 之间是相互独立的

这之后就好办了

其实我觉得贝叶斯公式本质上就是一个恒等式

p ( X , Y ) = p ( X ∣ Y ) p ( Y ) = p ( Y ∣ X ) p ( X ) p(X,Y) = p(X \vert Y)p(Y) = p(Y \vert X)p(X) p(X,Y)=p(XY)p(Y)=p(YX)p(X)

它的物理意义就是,两个事件同时发生的概率用两种条件概率的计算方法都是一样的

可以写:

p ( X , Y , W ) = p ( W ∣ X , Y ) p ( X , Y ) = p ( Y ∣ X , W ) p ( X , W ) p(X,Y,W) = p(W \vert X,Y)p(X,Y) = p(Y \vert X,W)p(X,W) p(X,Y,W)=p(WX,Y)p(X,Y)=p(YX,W)p(X,W)

然后根据隐含条件,X 和 W 是互相独立的,有 P ( X , W ) = p ( X ) p ( W ) P(X,W) = p(X)p(W) P(X,W)=p(X)p(W)

有:

p ( W ∣ X , Y ) p ( X , Y ) = p ( Y ∣ X , W ) p ( X , W ) ⇒ p ( W ∣ X , Y ) p ( Y ∣ X ) p ( X ) = p ( Y ∣ X , W ) p ( X ) p ( W ) ⇒ p ( W ∣ X , Y ) p ( Y ∣ X ) = p ( Y ∣ X , W ) p ( W ) ⇒ p ( W ∣ X , Y ) = p ( Y ∣ X , W ) p ( W ) p ( Y ∣ X ) \begin{align} \notag p(W \vert X,Y)p(X,Y) &= p(Y \vert X,W)p(X,W) \\ \notag \Rightarrow p(W \vert X,Y)p(Y \vert X)p(X) &= p(Y \vert X,W)p(X)p(W) \\ \notag \Rightarrow p(W \vert X,Y)p(Y \vert X) &= p(Y \vert X,W)p(W) \\ \notag \Rightarrow p(W \vert X,Y) &= \dfrac{p(Y \vert X,W)p(W)}{p(Y|X)} \end{align} p(WX,Y)p(X,Y)p(WX,Y)p(YX)p(X)p(WX,Y)p(YX)p(WX,Y)=p(YX,W)p(X,W)=p(YX,W)p(X)p(W)=p(YX,W)p(W)=p(YX)p(YX,W)p(W)

似然的理解,其实就是,联合概率 = 似然 * 先验,不用纠结在公式的哪里,因为我们可以写 联合概率 = 似然1 * 先验1 = 似然2 * 先验2,所以我们根据需要的物理意义称其中一个似然为后验的时候,另外一个就叫似然就行了,就是这样

1/n 形式的贝叶斯公式

一开始我看不懂这个公式是怎么来的

p ( θ ∣ D ) = p ( D y ∣ D x , θ ) p ( θ ) ∫ θ p ( D y ∣ D x , θ ′ ) p ( θ ′ ) d θ ′ p(\theta \vert D) = \dfrac{p(D_y \vert D_x, \theta)p(\theta)}{\int_{\theta} p(D_y \vert D_x, \theta')p(\theta')\mathrm{d}\theta'} p(θD)=θp(DyDx,θ)p(θ)dθp(DyDx,θ)p(θ)

看了这个才理解 https://www.zhihu.com/question/21134457/answer/169523403

”1/n 形式的贝叶斯公式“这个名称是我瞎起的……主要是我感觉,它的物理意义就是跟 1/n 很像

就是, p ( θ ∣ D ) p(\theta \vert D) p(θD) 中的 θ \theta θ 只是一个分布,但是 θ \theta θ 可以有很多种可能,就是说他是一个自变量,然后现在如果我们给定一个 θ \theta θ,那么想要知道单独这一个 θ \theta θ 在所有可能的 θ \theta θ 中的概率,所以我们分母就是已知发生 θ ′ \theta' θ 然后同时也发生 D D D 的所有可能的 θ ′ \theta' θ 的情况的概率之和,然后分子就是单独 θ \theta θ 那一种情况的概率

全概率公式

全概率公式的积分形式

离散形式的全概率公式:

p ( A ) = ∑ i p ( A ∣ B i ) p ( B i ) p(A) = \sum_i{p(A \vert B_i)p(B_i)} p(A)=ip(ABi)p(Bi)

积分形式:

p ( A ) = ∫ p ( A ∣ B ) p ( B ) d B p(A) = \int p(A \vert B)p(B)\mathrm{d}B p(A)=p(AB)p(B)dB

也可以写为

p ( A ) = ∫ p ( A , B ) d B p(A) = \int p(A, B)\mathrm{d}B p(A)=p(A,B)dB

后验推理

后验预测分布 posterior predictive distribution

后验预测分布的公式:

p ( y ∣ x , D ) = ∫ θ p ( y ∣ x , θ ′ ) p ( θ ′ ∣ D ) d θ ′ p(y \vert x, D) = \int_{\theta} p(y \vert x, \theta')p(\theta' \vert D)\mathrm{d}\theta' p(yx,D)=θp(yx,θ)p(θD)dθ

或者这个参数 θ ′ \theta' θ 也有人写作 W

p ( y ∣ x , D ) = ∫ p ( y ∣ x , W ) p ( W ∣ D ) d W p(y \vert x, D) = \int p(y \vert x, W)p(W \vert D)\mathrm{d}W p(yx,D)=p(yx,W)p(WD)dW

一开始不知道这个公式怎么来的

看了 https://math.stackexchange.com/questions/1606372/how-to-derive-the-posterior-predictive-distribution 才懂

他这里写的形式又不一样,好像是把 x , D x, D x,D 写成了 D D D y y y 写成了 D ′ D' D

p ( D ′ ∣ D ) = ∫ θ p ( D ′ ∣ θ ′ ) p ( θ ′ ∣ D ) d θ ′ p(D' \vert D) = \int_{\theta} p(D' \vert \theta')p(\theta' \vert D)\mathrm{d}\theta' p(DD)=θp(Dθ)p(θD)dθ

这里有点让我迷惑的是, y ∣ x , D y \vert x, D yx,D 这个形式到底是代表着 y ∣ ( x , D ) y \vert (x, D) y(x,D) 还是 ( y ∣ x ) , D (y \vert x), D (yx),D

按照他这么写,似乎是代表着 y ∣ ( x , D ) y \vert (x, D) y(x,D)

假设按照他这么写

使用全概率公式

p ( A ) = ∫ p ( A , B ) d B p(A) = \int p(A, B)\mathrm{d}B p(A)=p(A,B)dB

得到

p ( D ′ ∣ D ) = ∫ p ( D ′ , θ ∣ D ) d θ p(D' \vert D) = \int p(D', \theta \vert D)\mathrm{d}\theta p(DD)=p(D,θD)dθ

p ( W ∣ D ) p(W \vert D) p(WD) 就是我们的神经网络,所以它的解析式很难写

所以我们需要一个变分推断

KL 散度

在这里插入图片描述
w 是模型参数,D 是数据集,θ 是 (μ,σ),是模型参数的概率分布的参数,他现在应该是要用 θ 来近似 w,所以他这里写的是用 w|θ 来近似 w|D,w|D 我觉得应该是指的用数据集训练出来的真实的 w,w|θ 我觉得是,我们实际上不知道 w,所以我们就用 θ 表示的概率分布在计算机上代表 w

现在就是,我觉得可能是,D 数据集不依赖于模型参数 w……?因为我是从现实世界中获得数据,然后这个模型参数 w 并不是我获得 D 的原因,所以 D 不依赖于 w,但是模型参数 w 是根据 D 训练出来的,所以依赖于 D?

所以他这里才直接让 E_w(p(D)) = p(D) 了

平均场 VI

在看别人的讲座 https://www.youtube.com/watch?v=xH1mBw3tb_c&list=PLe5rNUydzV9QHe8VDStpU0o8Yp63OecdW&index=4

他有一个推导我一时间没看懂

在这里插入图片描述
我一开始还以为是

在这里插入图片描述

于是我写成

在这里插入图片描述
后来看到别人的推导,才觉得这个变换这里应该是先写一下积分的形式才比较好懂

https://bjlkeng.io/posts/variational-bayes-and-the-mean-field-approximation/

在这里插入图片描述
在这里插入图片描述

Bayes by Backprop 代码

重新参数化

一开始我看的是这个 https://www.zhihu.com/tardis/zm/art/263053978?source_id=1003

他算的损失是

loss = log_post - log_prior - log_like

对应

L = ∑ i l o g q ( w i ∣ θ i ) − ∑ i l o g P ( w i ) − ∑ i l o g p ( y i ∣ w i , x i ) \mathcal L = \sum_i \mathrm{log} q(w_i \vert \theta_i) - \sum_i \mathrm{log} P(w_i) - \sum_i \mathrm{log}p(y_i \vert w_i,x_i) L=ilogq(wiθi)ilogP(wi)ilogp(yiwi,xi)

其中前两个的计算的方式看了一会还是可以理解的

对于 log_prior

# sample weights
w_epsilon = Normal(0, 1).sample(self.w_mu.shape)
self.w = self.w_mu + torch.log(1+torch.exp(self.w_rho)) * w_epsilon# sample bias
b_epsilon = Normal(0, 1).sample(self.b_mu.shape)
self.b = self.b_mu + torch.log(1+torch.exp(self.b_rho)) * b_epsilon# record log prior by evaluating log pdf of prior at sampled weight and bias
w_log_prior = self.prior.log_prob(self.w)
b_log_prior = self.prior.log_prob(self.b)
self.log_prior = torch.sum(w_log_prior) + torch.sum(b_log_prior)

对应到公式中 w w w 为模型参数, θ = ( μ , ρ ) \theta = (\mu, \rho) θ=(μ,ρ) 的话,首先要知道,这里的模型是啥,这里的模型是一个普通的线性层,他这里甚至都没写激活函数,就是一个线性层,线性层的参数是 w 和 b,也就是缩放和偏置,那么其实公式中的模型参数 w w w 对应到代码中就是 w 和 b,那么其实我要算 p ( w ) p(w) p(w) 的话,我其实就是要算出来代码中对应到公式中的 w w w 的值,然后再放到 prior 分布中计算对应的函数值

他这个文章没有说的是,他应该是假设了 p(w) 的分布是正态分布

然后他说明了,假设 q(w|θ) 是 θ 决定的 w 的正态分布

那么这个后验 log_post 的计算也很合理

self.w_post = Normal(self.w_mu.data, torch.log(1+torch.exp(self.w_rho)))
self.b_post = Normal(self.b_mu.data, torch.log(1+torch.exp(self.b_rho)))
self.log_post = self.w_post.log_prob(self.w).sum() + self.b_post.log_prob(self.b).sum()

最后他那个似然 log_like 的计算我有点不懂

def sample_elbo(self, input, target, samples):# we calculate the negative elbo, which will be our loss function#initialize tensorsoutputs = torch.zeros(samples, target.shape[0])log_priors = torch.zeros(samples)log_posts = torch.zeros(samples)log_likes = torch.zeros(samples)# make predictions and calculate prior, posterior, and likelihood for a given number of samplesfor i in range(samples):outputs[i] = self(input).reshape(-1) # make predictionslog_priors[i] = self.log_prior() # get log priorlog_posts[i] = self.log_post() # get log variational posteriorlog_likes[i] = Normal(outputs[i], self.noise_tol).log_prob(target.reshape(-1)).sum() # calculate the log likelihood# calculate monte carlo estimate of prior posterior and likelihoodlog_prior = log_priors.mean()log_post = log_posts.mean()log_like = log_likes.mean()

主要我是不知道为什么这个分布是均值是 y_pred 的正态分布

之后看到 https://krasserm.github.io/2019/03/14/bayesian-neural-networks/,发现这只是别人的假设而已

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 2021.x及以下全版本Crack

前言 最近Unity那档子事不出来了吗,搞得所有人都挺烦的,顺便在公司内网需要我完成一个游戏的项目,就研究了一下如何将Unity给Crack掉。 注意所有操作应有连接外网的权限 以我选择的版本为例,我使用的是Unity 2021.3.5f1与Unity…

企业商标信息API:品牌管理的秘密武器

引言 当今数字时代,品牌管理变得比以往任何时候都更具挑战性。企业需要不断创新、保护知识产权、实时监测市场动态以及应对竞争压力。在这个竞争激烈的环境中,企业商标信息API已经成为品牌管理的秘密武器,为企业提供了无可估量的价值。 企业…

CFCA企业版通配符SSL证书

CFCA是中国CFCA企业版通配符SSL证书金融认证中心的缩写,即China Financial Certification Authority。它是一家经过中国人民银行和国家信息安全机构批准成立的国家级权威安全认证机构,也是国际CA浏览器联盟组织(CA/Browser Forum)…

基础算法--位运算

位运算理解: n >> k:代表n右移k位 比如 000011 >> 1 000001 前面会补零(所以第几位是从0开始计算) n & 1:表示最后一位是否为1 比如:n 3 0011 而 1 0001 则3 & 1 0011 & 000…

红日靶场五(vulnstack5)渗透分析

环境搭建 win7 192.168.111.132(仅主机) 192.168.123.212(桥接) .\heart p-0p-0p-0win2008 ip: 192.168.111.131(仅主机) sun\admin 2020.comkali ip: 192.168.10.131(nat)vps&…

【vue】vue+easyPlayer 实现宫格布局及视频播放

由于业务需要,ant-design-vue框架集成easyPlayer.js作为视频播放器。EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS视频直播与视频点播等多种协议,支持H.264、H.265、AAC等多种音视频编码格…

解密list的底层奥秘

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…

CDN加速器有哪些?

一、前端使用CDN加速的优缺点 1.CDN优点 (1). 提高网站性能: CDN(内容分发网络)可以将静态资源(如脚本、样式表、图片等)缓存在服务器节点上,并通过就近访问用户,从而提供更快的加载速度和更好…

服务器搭建(TCP套接字)-基础版(客户端)

一、socket 1.1、vim man查看socket :!man socket1.2、 依赖的头文件 #include <sys/types.h> #include <sys/socket.h>1.3、原型 int socket(int domain, int type, int protocol);domain说明AF_INETIPV4协议AF_INET6IPV6协议AF_LOCALUnix域协议 type说明S…

GDPU 数据结构 天码行空2

实验内容 用顺序表实现病历信息的管理与查询功能。具体要求如下: 利用教材中定义顺序表类型存储病人病历信息(病历号,姓名&#xff0c;症状)&#xff1b;要求使用头文件。 设计顺序表定位查找算法&#xff0c;写成一个函数&#xff0c;完成的功能为:在线性表L中查找数据元素x…

MATLAB中ilu函数用法

目录 语法 说明 示例 不同类型的不完全 LU 分解 不完全 LU 分解的调降容差 使用 ilu 作为预条件子来求解线性系统 ilu函数的功能是对矩阵进行不完全 LU 分解。 语法 [L,U] ilu(A) [L,U,P] ilu(A) W ilu(A) [___] ilu(A,options) 说明 [L,U] ilu(A) 用零填充执行…

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…

【前段基础入门之】=>初识 HTML

文章目录 前言HTML的详情简介HTML 发展史HTML 入门1. HTML 标签元素2. HTML标签属性3. HTML的标准结构 总结 前言 在整个前端开发中&#xff0c;必须掌握的技术栈为&#xff1a; HTML &#xff0c;CSS&#xff0c;JavaScript&#xff0c;它们三者&#xff0c;共同组成了前端开发…

JavaEE学习之--类和对象

&#x1f495;粗缯大布裹生涯&#xff0c;腹有诗书气自华&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;Java学习之--类和对象 类和对象 类的实例化&#xff1a; 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化&#xff01; 当我们创建了…

简单的手机电脑无线传输方案@固定android生成ftp的IP地址(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server 高级:固定android设备IP准备检查模块是否生效 windows 访问ftp服务器快捷方式命令行方式双击启动方式普通快捷方式映射新的网络位…

Kindle电子书下载功能关闭怎么办,借助calibre和cpolar搭建私有的网络书库公网访问

Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01; 文章目录 Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01;1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

竞赛选题 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

案例丨如何提升可视化分析能力?听听这两家企业怎么说

神策分析 2.5 版本正式发布经营分析能力以来&#xff0c;已有不少客户接入使用&#xff0c;并充分实现了可视化分析能力的提升。 本文将为大家分享两家客户的真实反馈&#xff0c;希望能够帮助您进一步了解神策经营分析的能力。 案例一&#xff1a;神策数据助力美篇打造公司级“…

基于Python+Pygame实现一个俄罗斯方块小游戏【完整代码】

俄罗斯方块&#xff0c;一款起源于上世纪80年代的经典电子游戏&#xff0c;凭借简单的规则和独特的魅力&#xff0c;一跃成为全球家喻户晓的经典。你知道其实只需要一些基础的编程知识&#xff0c;就可以自己实现它吗&#xff1f;今天&#xff0c;我们将使用Python的Pygame库&a…

第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序

一、Ubuntu18.04中安装并且编译移植mysql驱动程序连接qt执行程序 1 、安装Mysql sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-d2、查看是否安装成功&#xff0c;即查看MySQL版本 mysql --version 3、MySQL启动…