26 sigmoid Belief Network

news2024/12/28 19:28:02

文章目录

  • 26 Sigmoid Belief Network
    • 26.1 背景介绍
    • 26.2 通过log-likelihood推断SBN的后验
    • 26.3 醒眠算法——Wake Sleep Algorithm

26 Sigmoid Belief Network

26.1 背景介绍

什么是Sigmoid Belief Network?Belief Network等同于Bayesian Network,表示有向图模型。sigmoid指sigmoid函数,具体表示为 σ ( x ) = 1 1 + e x p { − x } \sigma(x) = \frac{1}{1 + exp{\lbrace -x \rbrace}} σ(x)=1+exp{x}1

具体举一个Sigmoid Belief Network的例子:

在这里插入图片描述

一个Sigmoid Belief Network如上图所示,由一个数据层与多个隐藏层组成,每层之间都没有直接的连接关系。

我们可以通过sigmoid函数从根节点将每个节点的概率分布进行求解,例如我们求解 S i S_i Si节点的概率分布,因为我们一般将节点的值设置为0/1变量,所以可以写作:
{ P ( S i = 1 ∣ S j : j < i ) = σ ( ∑ j < i w j i S j ) P ( S i = 0 ∣ S j : j < i ) = 1 − P ( S i = 1 ) = σ ( − ∑ j < i w j i S j ) \begin{cases} P(S_i = 1| S_j: j<i) = \sigma( \sum_{j<i} w_{ji} S_j ) \\ P(S_i = 0| S_j: j<i) = 1 - P(S_i = 1) = \sigma( - \sum_{j<i} w_{ji} S_j ) \end{cases} {P(Si=1∣Sj:j<i)=σ(j<iwjiSj)P(Si=0∣Sj:j<i)=1P(Si=1)=σ(j<iwjiSj)
我们也可以将其表达为一个整式:
{ P ( S i ∣ S j : j < i ) = σ ( S i ∗ ∑ j < i w j i S j ) S i ∗ = 2 S i − 1 \begin{cases} P(S_i| S_j: j<i) = \sigma( S_i^* \sum_{j<i} w_{ji} S_j ) \\ S_i^* = 2 S_i - 1 \end{cases} {P(SiSj:j<i)=σ(Sij<iwjiSj)Si=2Si1
即使我们这样可以获得样本,但是我们发现其实后验还是求不出来的,以为隐藏层之间并非相互独立,关系非常的麻烦。

26.2 通过log-likelihood推断SBN的后验

首先根据上文我们可以得到两个条件:
{ P ( S i ∣ S j : j < i ) = σ ( S i ∗ ∑ j < i w j i S j ) P ( S ) = ∏ i = 1 ∣ S ∣ P ( S i ∣ S j : j < i ) = P ( V , H ) \begin{cases} P(S_i| S_j: j<i) = \sigma( S_i^* \sum_{j<i} w_{ji} S_j ) \\ P(S) = \prod_{i=1}^{|S|} P(S_i| S_j: j<i) = P(V, H) \end{cases} {P(SiSj:j<i)=σ(Sij<iwjiSj)P(S)=i=1SP(SiSj:j<i)=P(V,H)
这两个条件分别表示我们的条件概率与联合概率,通过这两个公式我们就可以对log-likelihood进行如下变换:
l o g − l i k e l i h o o d = 1 N ∑ v ∈ V log ⁡ P ( v ) ∇ w j i log ⁡ P ( v ) = 1 P ( v ) ∇ w j i P ( v ) = P ( H ∣ v ) P ( H , v ) ∇ w j i ∑ H P ( v , H ) = ∑ H P ( H ∣ v ) P ( H , v ) ∇ w j i P ( v , H ) = ∑ S P ( S ∣ v ) 1 P ( S ) ∇ w j i P ( S ) = ∑ S P ( S ∣ v ) ∇ w j i ∏ k = 1 ∣ S ∣ P ( S k ∣ S j : j < k ) ∏ k = 1 ∣ S ∣ P ( S k ∣ S j : j < k ) \begin{align} log-likelihood &= \frac{1}{N} \sum_{v \in V} \log P(v) \\ \nabla_{w_{ji}} \log P(v) &= \frac{1}{P(v)} \nabla_{w_{ji}} P(v) \\ &= \frac{P(H|v)}{P(H, v)} \nabla_{w_{ji}} \sum_{H} P(v, H) \\ &= \sum_{H} \frac{P(H|v)}{P(H, v)} \nabla_{w_{ji}} P(v, H) \\ &= \sum_{S} P(S|v) \frac{1}{P(S)} \nabla_{w_{ji}} P(S) \\ &= \sum_{S} P(S|v) \frac{\nabla_{w_{ji}} \prod_{k=1}^{|S|} P(S_k| S_j: j<k)}{\prod_{k=1}^{|S|} P(S_k| S_j: j<k)} \\ \end{align} loglikelihoodwjilogP(v)=N1vVlogP(v)=P(v)1wjiP(v)=P(H,v)P(Hv)wjiHP(v,H)=HP(H,v)P(Hv)wjiP(v,H)=SP(Sv)P(S)1wjiP(S)=SP(Sv)k=1SP(SkSj:j<k)wjik=1SP(SkSj:j<k)
答疑:

  1. 对于上面为什么 P ( H , v ) = P ( S ) P(H, v) = P(S) P(H,v)=P(S):因为v在这里表示的是一个随机变量,所以 P ( H , v ) P(H, v) P(H,v)也可以写成 P ( H , V = v ) P(H, V=v) P(H,V=v)
  2. 上文中为什么 ∑ H P ( H ∣ v )    ⟺    ∑ S P ( S ∣ v ) \sum_{H} P(H|v) \iff \sum_{S} P(S|v) HP(Hv)SP(Sv),因为这里 S S S表示联合概率分布实际上 P ( S ∣ v ) P(S|v) P(Sv)应该表达为 P ( H , v ∣ v ) P(H, v|v) P(H,vv),但是 P ( H , v ∣ v )    ⟺    P ( H ∣ v ) P(H, v|v) \iff P(H|v) P(H,vv)P(Hv),所以没问题

因为上文中 P ( S ) P(S) P(S)中实际只有一项与 w j i w_{ji} wji相关,所以可以的得到:
∇ w j i log ⁡ P ( v ) = ∑ S P ( S ∣ v ) ∇ w j i P ( S i ∣ S j : j < i ) P ( S i ∣ S j : j < i ) = ∑ S P ( S ∣ v ) ∇ w j i σ ( S i ∗ ∑ j < i w j i S j ) σ ( S i ∗ ∑ j < i w j i S j ) = ∑ S P ( S ∣ v ) σ ( S i ∗ ∑ j < i w j i S j ) ⋅ σ ( − S i ∗ ∑ j < i w j i S j ) ⋅ S i ∗ ⋅ S j σ ( S i ∗ ∑ j < i w j i S j ) = ∑ S P ( S ∣ v ) σ ( − S i ∗ ∑ j < i w j i S j ) ⋅ S i ∗ ⋅ S j \begin{align} \nabla_{w_{ji}} \log P(v) &= \sum_{S} P(S|v) \frac{\nabla_{w_{ji}} P(S_i| S_j: j<i)}{P(S_i| S_j: j<i)} \\ &= \sum_{S} P(S|v) \frac{\nabla_{w_{ji}} \sigma( S_i^* \sum_{j<i} w_{ji} S_j )}{\sigma( S_i^* \sum_{j<i} w_{ji} S_j )} \\ &= \sum_{S} P(S|v) \frac{\sigma( S_i^* \sum_{j<i} w_{ji} S_j ) \cdot \sigma( - S_i^* \sum_{j<i} w_{ji} S_j ) \cdot S_i^* \cdot S_j}{\sigma( S_i^* \sum_{j<i} w_{ji} S_j )} \\\\ &= \sum_{S} P(S|v) \sigma( - S_i^* \sum_{j<i} w_{ji} S_j ) \cdot S_i^* \cdot S_j \\ \end{align} wjilogP(v)=SP(Sv)P(SiSj:j<i)wjiP(SiSj:j<i)=SP(Sv)σ(Sij<iwjiSj)wjiσ(Sij<iwjiSj)=SP(Sv)σ(Sij<iwjiSj)σ(Sij<iwjiSj)σ(Sij<iwjiSj)SiSj=SP(Sv)σ(Sij<iwjiSj)SiSj
所以我们可以得到:
∇ w j i l o g − l i k e l i h o o d = 1 N ∑ v ∈ V ∑ S [ P ( S ∣ v ) σ ( − S i ∗ ∑ j < i w j i S j ) ⋅ S i ∗ ⋅ S j ] \nabla_{w_{ji}} log-likelihood = \frac{1}{N} \sum_{v \in V} \sum_{S} \left[ P(S|v) \sigma( - S_i^* \sum_{j<i} w_{ji} S_j ) \cdot S_i^* \cdot S_j \right] wjiloglikelihood=N1vVS[P(Sv)σ(Sij<iwjiSj)SiSj]
但是这个东西我们求不出来,为什么呢?因为这里面有 P ( S ∣ v ) P(S|v) P(Sv),也就是后验。由于SBN图的性质,隐节点之间并不相互独立,所以没法求解。我们其实也可以通过MCMC进行求解,我们可以把公式转换为(常数项都删掉):
∇ w j i l o g − l i k e l i h o o d = E H ∽ P ( S ∣ v ) , v ∽ P d a t a [ σ ( − S i ∗ ∑ j < i w j i S j ) ⋅ S i ∗ ⋅ S j ] \nabla_{w_{ji}} log-likelihood = E_{H \backsim P(S|v), v \backsim P_{data}} \left[ \sigma( - S_i^* \sum_{j<i} w_{ji} S_j ) \cdot S_i^* \cdot S_j \right] wjiloglikelihood=EHP(Sv),vPdata[σ(Sij<iwjiSj)SiSj]
但是由于后验过于复杂,所以MCMC只能完成节点较少的SBN。

26.3 醒眠算法——Wake Sleep Algorithm

醒眠算法实际上是求解SBN的一个启发式算法,什么是启发式算法呢?就是不求精确,但求能求解出来。

为了实现该算法,我们首先要对我们的图增加一些条件,做出一些假设如下图:

在这里插入图片描述

我们将所有节点之间的连接 w j i w_{ji} wji做出其反向连接,并取名为 R j i R_{ji} Rji

醒眠算法正如其名,分为两个步骤:

  1. wake:从下往上(图中蓝色部分),通过已知条件(训练数据)对 H H H进行采样,假定反向图的参数为 ϕ \phi ϕ(已知),我们可以通过分布 q ϕ ( H ∣ v ) q_\phi (H|v) qϕ(Hv)求得sleep需要用的参数 θ \theta θ
  2. sleep:从上往下(图中黑色部分),根据wake步得到的样本数据对 v v v采样,通过分布 P θ ( v , H ) P_\theta (v, H) Pθ(v,H)求取下一个wake步需要用的参数 ϕ \phi ϕ,此时 θ \theta θ已知(上一个wake步求到的)。

我们具体的目标函数表示为:

  1. wake:通过分布 q ϕ ( H ∣ v ) q_\phi (H|v) qϕ(Hv) θ \theta θ
    θ ( i ) = a r g max ⁡ θ E q ϕ ( i ) ( H ∣ v ) [ log ⁡ P θ ( H , v ) ] = a r g max ⁡ θ L ( θ ) ⏟ E L B O + K L − H [ q ] = a r g min ⁡ θ K L ( q ϕ ( i ) ( H ∣ v ) ∥ P θ ( H , v ) ) \begin{align} \theta^{(i)} &= arg\max_\theta E_{q_{\phi^{(i)}} (H|v)} \left[ \log P_\theta(H, v) \right] \\ &= arg\max_\theta \underbrace{{\mathcal L} (\theta)}_{ELBO + KL} - H[q] \\ &= arg\min_\theta KL(q_{\phi^{(i)}} (H|v) \Vert P_\theta(H, v)) \\ \end{align} θ(i)=argθmaxEqϕ(i)(Hv)[logPθ(H,v)]=argθmaxELBO+KL L(θ)H[q]=argθminKL(qϕ(i)(Hv)Pθ(H,v))

  2. sleep:通过分布 P θ ( v , H ) P_\theta (v, H) Pθ(v,H) ϕ \phi ϕ​:
    ϕ ( i + 1 ) = a r g max ⁡ ϕ E P θ ( i ) ( H , v ) [ log ⁡ q ϕ ( H ∣ v ) ] = a r g max ⁡ ϕ ∫ P θ ( i ) ( H , v ) log ⁡ q ϕ ( H ∣ v ) d H = a r g max ⁡ ϕ ∫ P θ ( i ) ( v ) ⋅ P θ ( i ) ( H ∣ v ) ⋅ log ⁡ ( q ϕ ( H ∣ v ) P θ ( i ) ( H ∣ v ) P θ ( i ) ( H ∣ v ) ) d H = a r g max ⁡ ϕ ∫ P θ ( i ) ( H ∣ v ) ⋅ log ⁡ q ϕ ( H ∣ v ) P θ ( i ) ( H ∣ v ) d H = a r g min ⁡ ϕ K L ( P θ ( i ) ( H , v ) ∥ q ϕ ( H ∣ v ) ) \begin{align} \phi^{(i + 1)} &= arg\max_\phi E_{P_{\theta^{(i)}}(H, v)} \left[ \log q_{\phi} (H|v) \right] \\ &= arg\max_\phi \int {P_{\theta^{(i)}}(H, v)} \log q_{\phi} (H|v) {\rm d}H \\ &= arg\max_\phi \int P_{\theta^{(i)}}(v) \cdot P_{\theta^{(i)}}(H| v) \cdot \log \left( \frac{q_{\phi} (H|v)}{P_{\theta^{(i)}}(H| v)} P_{\theta^{(i)}}(H| v) \right) {\rm d}H \\ &= arg\max_\phi \int P_{\theta^{(i)}}(H| v) \cdot \log \frac{q_{\phi} (H|v)}{P_{\theta^{(i)}}(H| v)} {\rm d}H \\ &= arg\min_\phi KL(P_{\theta^{(i)}}(H, v) \Vert q_\phi (H|v)) \\ \end{align} ϕ(i+1)=argϕmaxEPθ(i)(H,v)[logqϕ(Hv)]=argϕmaxPθ(i)(H,v)logqϕ(Hv)dH=argϕmaxPθ(i)(v)Pθ(i)(Hv)log(Pθ(i)(Hv)qϕ(Hv)Pθ(i)(Hv))dH=argϕmaxPθ(i)(Hv)logPθ(i)(Hv)qϕ(Hv)dH=argϕminKL(Pθ(i)(H,v)qϕ(Hv))

我们发现上面的步骤和EM算法很想,但又不一样。wake形如EM算法的M-Step,sleep形如E-Step,但sleep时的目标函数是 K L ( p ∥ q ) KL(p \Vert q) KL(pq),和wake的 K L ( q ∥ p ) KL(q \Vert p) KL(qp)不同,所以没法保证算法收敛。这也是为什么只能作为一个启发式算法的原因。

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

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

相关文章

新手如何自学PostgreSQL(PG)

如果你是一个新手&#xff0c;想要自学PostgreSQL&#xff0c;下面是一些步骤和资源&#xff0c;可以帮助你入门&#xff1a; ①了解数据库基础知识&#xff1a;在开始学习PostgreSQL之前&#xff0c;建议你先了解一些数据库的基础概念和术语&#xff0c;例如表、列、行、SQL查…

【Elasticsearch】搜索结果处理和RestClient查询文档

目录 2.搜索结果处理 2.1.排序 2.1.1.普通字段排序 2.1.2.地理坐标排序 2.2.分页 2.2.1.基本的分页 2.2.2.深度分页问题 2.2.3.小结 2.3.高亮 2.3.1.高亮原理 2.3.2.实现高亮 2.4.总结 3.RestClient查询文档 3.1.快速入门 3.1.1.发起查询请求 3.1.2.解析响应 …

LangChain(6)构建用户自己的Agent

构建用户自己的Agent 编写简单的计算工具编写有多个参数的工具其它更高级的工具 LangChain 中有一些可用的Agent内置工具&#xff0c;但在实际应用中我们可能需要编写自己的Agent。 编写简单的计算工具 !pip install -qU langchain openai transformersfrom langchain.tools …

Spring-Interceptor拦截器

使用步骤 申明拦截器bean&#xff0c;并实现HandlerInterceptor接口 true为放行&#xff0c;false为拦截 2.定义配置类&#xff0c;继承WebMvcConfigurationSupport&#xff0c;实现addInterceptors方法&#xff0c;该方法调用具体的拦截器进行拦截 也可以在配子类通过实现W…

HTPP入门教程||HTTP 状态码||HTTP content-type

HTTP 状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含 HTTP 状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 HTTP 状态码的英文为…

Springboot+Flask+Neo4j+Vue2+Vuex+Uniapp+Mybatis+Echarts+Swagger综合项目学习笔记

文章目录 Neo4j教程&#xff1a;Neo4j高性能图数据库从入门到实战 医疗问答系统算法教程&#xff1a;医学知识图谱问答系统项目示例&#xff1a;neo4j知识图谱 Vueflask 中药中医方剂大数据可视化系统可视化技术&#xff1a;ECharts、D.jsflask教程&#xff1a;速成教程Flask w…

『分割』 分割圆柱

原始点云 直通滤波过滤后&#xff08;z:0~1.5&#xff09; 分割到的平面 分割得到的圆柱形 代码&#xff1a; #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h> #include <pcl/filters/extract_indices.h> // 用于提取指定索引的数据 #inclu…

伪标签(pseudo label)(半监督学习)

使用伪标签进行半监督学习&#xff0c;在机器学习竞赛当中是一个比较容易快速上分的关键点。下面给大家来介绍一下什么是基于伪标签的半监督学习。在传统的监督学习当中&#xff0c;我们的训练集具有标签&#xff0c;同时&#xff0c;测试集也具有标签。这样我们通过训练集训练…

RS485转ETHERCAT连接西门子支持ethercat吗

我们将为大家介绍一款强大的设备——远创智控YC-ECT-RS485/232通讯网关。这是一款自主研发的ETHERCAT从站功能的网关&#xff0c;它能够将ETHERCAT网络和RS485或RS232设备无缝连接。 这款网关在ETHERCAT总线和RS485或RS232总线中均能发挥主站或从站的作用。它的最大特点就是解决…

ICCV 2023 接收结果出炉!再创历史新高!录用2160篇!(附6篇最新论文)

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信交流群 2023 年 7 月 14 日13:03&#xff0c;ICCV 2023 顶会论文接收结果出炉&#xff01;这次直接放出论文 Accepted Paper ID List。这也意味着&#xf…

【大数据趋势】7月15日 汇率,美澳,恒指期货的大数据趋势概率分析。

1. 数据源头之一 : 美元汇率破位&#xff0c;下面有3-7%的空间 从程序模拟趋势来看&#xff0c;如果没有干预&#xff0c;美元这个破位后&#xff0c;下方空间是3-7%。从中期趋势来看&#xff0c;是一次破位寻找新的稳定位置&#xff0c;在RSI的底部附近&#xff0c;现在刚刚开…

6.3.1 利用Wireshark进行协议分析(一)

6.3.1 利用Wireshark进行协议分析&#xff08;一&#xff09; Wireshark是目前全球使用最广泛的抓包软件&#xff0c;也是很强大的抓包软件&#xff0c;不管从事网络测试还是软件开发工程师&#xff0c;Wireshark都是一个非常实用的好工具。单纯的学习网络理论知识很抽象&…

个人笔记:下载及配置maven详细步骤

下载maven以及配置maven 访问 maven 官网&#xff0c;这里我下载的是 3.6.1的版本&#xff0c;尽量不要下载太新的版本&#xff0c;新版本可能会不太稳定&#xff0c;遇到一些奇奇怪怪的问题。 官网地址&#xff1a; https://maven.apache.org/download.cgi点击 download&…

安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用后台模块SessionCookieToken身份验证唯一性

文章目录 开发环境数据导入-mysql架构&库表列数据库操作-mysqli函数&增删改查数据接收输出-html混编&超全局变量第三方插件引用-js传参&函数对象调用身份验证-Cookie使用身份验证-Session使用唯一性判断-Token使用具体安全知识点&#xff1a;Cookie和Session都…

aes加密解密算法流程

有了https加密传输为何还要使用AES加密 HTTPS&#xff08;HTTP Secure&#xff09;是基于 SSL/TLS 协议的安全通信协议&#xff0c;通过对传输的数据进行加密和认证来确保通信的机密性、完整性和身份验证。它使用了公钥加密来建立安全通道&#xff0c;并使用对称密钥加密来加密…

分享一个创意滚筒按钮

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>滚筒按钮</title><style>* {border: 0;box-sizing: border-box;margin: 0;padding: 0;}:ro…

COMP527数据分析:中心性度量

在数据分析中&#xff0c;中心性度量通常是指描述数据集中心位置的统计量。

gorm实现动态sql

文章目录 前言需求实现步骤 前言 书接上回&#xff0c;解决了选择性的忽略某些字段这个问题&#xff0c;新的问题出现&#xff0c;想要使用gorm完成动态sql&#xff0c;我只知道mybatis中使用标签可以完成动态sql&#xff0c;不会使用gorm完成动态sql&#xff0c;下面通过一个…

基于linux下的高并发服务器开发(第一章)- 文件属性操作函数

08 / 文件属性操作函数 1、access.c #include <unistd.h>int access(const char *pathname, int mode); 作用&#xff1a;判断某个文件是否有某个权限&#xff0c;或者判断文件是否存在 参数&#xff1a; - pathname: 判断的文件路径 - mode: …