Sigmoid Belief Net

2024-04-13 01:18
文章标签 net sigmoid belief

本文主要是介绍Sigmoid Belief Net,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概率生成模型(generative model)的目标就是要最大化输入数据x的概率p(x),信念网络是图理论与概率论结合,信念网(Belief Nets)需要解决两个问题:
1. 推理(inference),推导未观察变量的状态。
2. 学习(learning),调整权值使得观察变量生成的概率最大。
早期的图模型是人工定义图结构(各节点之间的关系)和各变量之间的条件概率。对于随机生成神经网来说,结构和条件概率这些知识需要通过学习从训练数据中获得。
有两类随机生成神经网,一类是基于能量模型的Boltzmann Machine;一类是因果的Sigmoid Belief Net。
Boltzmann Machine定义了观察变量v和未观察变量h的联合分布概率 p(v,h)=eE(v,h)v,heE(v,h) E(v,h)=iviaijhjbji,jvihjwij 是能量函数,通过调整权值可改变概率。有了联合分布概率,从而很容易得到观察变量的概率 p(v)=heE(v,h)v,heE(v,h) ,学习调整权值的目的就是极大化观察变量的似然函数 logp(v)

1. SBN似然函数和对权值的偏导

SBN的结构则有更好的因果(causal)形式,其中未观察变量被看作观察变量发生的原因。SBN中定义的是未观察变量条件下的观察变量条件概率 p(v|s1,s2,s3)=p(v|s1)p(s1|s2)p(s2|s3)p(s3)
对于任一节点 si ,其状体为1的条件概率为:
pi=p(si=1|...,sj,...)=11+exp(bijsjwij)
因此,节点 si ,其状态为1的概率为:
p(si=1)=...,sj,...pip(...,sj,...)
节点 si 状态为1的似然函数为:
log(...,sj,...pip(...,sj,...))
节点 si 状态为0的似然函数为:
log(...,sj,...(1pi)p(...,sj,...))
分别对1状态和0状态求似然函数对 wij 的偏导,状态为1时的偏导为:
...,sj,...pi(1pi)p(...,sj,...)sj...,sj,...pip(...,sj,...)=...,sj,...p(...,sj,...|si)(sipi)sj
状态为0时的偏导为:
...,sj,...pi(1pi)p(...,sj,...)sj...,sj,...(1pi)p(...,sj,...)=...,sj,...p(...,sj,...|si)(sipi)sj
因此,SBN中 si 节点似然函数对 wij 的偏导数为:
...,sj,...p(...,sj,...|si)(sipi)sj (1)
上式为 (sipi)sj 对条件概率 p(...,sj,...|si) 的期望值,如果通过Monte Carlo采样算法来计算(1)式,需要模拟条件概率 p(...,sj,...|si) 的发生,这是一个非常困难的事情。如果 p(...,sj,...|si) 条件独立,即:
p(...,sj,...|si)=p(...|si)p(sj|si)p(...|si)
通过简化,从而使得(1)式可以计算,但是由于Explaining away现象的出现,条件独立的条件不存在,因此(1)式计算非常困难。

2. Wake Sleep算法

Hinton et. al. 1995年提出了Wake-Sleep算法,用一个近似的方法来模拟条件概率 p(...,sj,...|si) 的发生。
一个是条件独立:
p(...,sj,...|si)=p(...|si)p(sj|si)p(...|si)
另一是引入识别权值(Recognition weights) rij 来计算 sj 的条件概率:
p(sj=1|si)=11+exp(bjisirij)
在Wake阶段,固定 rij 学习 wij
在Sleep阶段,固定 wij 学习 rij
由于Explaining away的出现,实际上,条件独立并不成立,使得在Sleep阶段学习得到的条件概率 p(...,sj,...|si) 与实际情况发生了偏差。

3. 最小描述字长(description length)与Wake Sleep算法

假设在SBN中,隐藏层节点的所有状态构成一个编码字典, α 为一个码字,对于任一输入d用码字 α 进行编码总共花费的字长为(包括编码字典的花费和输入d的编码花费,分别对应公式中第一项和第二项):
C(α,d)=C(α)+C(d|α)=lLjlC(sαj)+iC(sdi|α) (2)
其中, C(sαj) 为节点j的编码字长:
C(sαj)=sαjlogpαj(1sαj)log(1pαj)
(2)式中第一项为隐藏层节点编码字长,第二项为输入层节点字长。
所以输入d的平均编码字长为:
C(d)=αp(α)C(α,d)(αp(α)logp(α)) (3)
其中 p(α) 为码字 α 用于编码的概率,式中第二项对应编码字典的平均字长。
在Wake Sleep算法中, p(α) 由识别权重(Recognition Weights),可以表示为输入d的条件概率 Q(α|d) ,公式(3)重新改写如下:
C(d)=αQ(α|d)C(α,d)(αQ(α|d)logQ(α|d)) (4)
在Sleep学习阶段, C(α,d) 概率分布不变,因为 w 不变,需要调整rij,使得 C(d) 取值最小。 Q(α|d) 只有是如下Boltzmann分布时,C(d)才最小( logp(d) ,字长对应能量):
P(α|d)=exp(C(α,d))βexp(C(β,d))
因为,
logP(α|d)=C(α,d)logβexp(C(β,d))
所以,
α(P(α|d)Q(α|d))logP(α|d)=α(Q(α|d)P(α|d))C(α,d)
所以,(4)式进一步可以改写如下:
C(d)=αP(α|d)C(α,d)(αP(α|d)logP(α|d))+αQ(α|d)logQ(α|d)P(α|d)
最后一项为KL散度距离,非负,为非最优编码方案下多余出来的编码字长。

这篇关于Sigmoid Belief Net的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898752

相关文章

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </

.Net Mvc-导出PDF-思路方案

效果图: 导语:     在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;     因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。     网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习; 提要:     这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string

asp.net 中GridView的使用方法

可以看看,学习学习 https://blog.csdn.net/zou15093087438/article/details/79637042

ASP.NET状态管理的总结

由于HTTP协议的无状态特性,导致在ASP.NET编程中,每个请求都会在服务端从头到执行一次管线过程, 对于ASP.NET页面来说,Page对象都会重新创建,所有控件以及内容都会重新生成, 因此,如果希望上一次的页面状态能够在后续页面中保留,则必需引入状态管理功能。   ASP.NET为了实现状态管理功能,提供了8种方法,可帮助我们在页面之间或者整个用户会话期间保留状态数据。 这些方法分为二类: