pgm6
有个比较有意思的想法是编码理论的反问题是 machine learning,这也是这部分学习的一个收获。这个其实很奇怪,编码理论其实是有 ground truth 的,然后通过编码产生“冗余”,这样才能通过含有噪声的信道后仍然能够被正确的解码(比较好的是相关的理论上界和最优编码已经非常接近了),这个问题的本质其实也是 inference。那为什么我说 machine learning 是它的反问题呢?我们通常会假定数据本身具有“结构”,尽管我们看到的数据是来自某个高维的空间,但是往往有某些内在的东西能够简化我们的模型、表示等等。这意味着我们假定数据是“冗余”的,我们寻求的往往是没有冗余的表示,在这个基础上我们的分类也好还是别的什么会有较好的效果,难度在于我们没有 ground truth。这两者的关系看起来就跟概率论与统计一样。这一方面也激发了我后面看完这部分,希望能扫一遍 David McKay 的那本书的欲望。
这部分本质上是一个比较大的 topic,message passing/belief propagation,每个人的讲法可能不大一样,当时大概先看的 Jordan 的写法觉得有点难懂,这次 Koller 同志的 video 倒是比较容易让人接受(先讲 general case 的 LBP 算法,点出一些核心的性质,然后在特定的图上说明对应的的确是精确解,获得该算法与 independency、消元法之间的关系,然后回到一般情况下介绍一些思路进行优化和推广),不过似乎她的书上并不是这个顺序讲述的。我们这里沿用她书上的思路。
前面讲了消元法(variable elimination,简写为 VE),我们这里将每一步分解:首先我们选择了某个 r.v.s 进行消除,这时我们做的是将相关的 factor 放在一起,我们将这个 factor 记为 (这部分是 product),这时我们通过 sum/integral 得到了一个新的 factor 记为
,那么我们不断的消元过程中就会得到一系列的
,而我们可以将其与一个 graph 关联起来,这就是所谓的 cluster graph。
cluster graph 的每个顶点是一个随机变量的子集(记为 ),这个graph 与一个 factorization 相关,我们称这个性质为 family preserving,即每个顶点对应的子集必须可以用若干个 factor 对应的 r.v.s 获得,且每两个顶点不共用 factor,且任意一个 factor 必须属于某个顶点。这里顶点之间的边我们称为 sep set(记为
),对应的也是一个随机变量子集,且
。
事实上给定一个 factorization 可以有多个 cluster graph,而 VE 导致的 cluster graph 却有着重要的作用:我们在 和
之间有边,当且仅当
(即
消掉某个变量后的 message)用来计算了
。这样一来我们每个节点
最多存在一个(如果当成有向关系的话)父节点,这说明获得的图是一个 tree。我们将最后一个获得的 cluster 称为这棵树的根节点。这里我们说明了 VE 可以诱导出 cluster graph 的一个特例,即 cluster tree。
一般的 cluster graph 未必是 tree,但是后面的讨论,特别是所谓的 running intersection property(RIP)成立情况下,我们的算法可以推广,这部分将在后面的笔记详细讨论,这将导致所谓的 loopy belief propagation(LBP)以及 approximate inference。
RIP 一个 cluster graph 具有 RIP 当且仅当对任意 r.v.,,则
会出现在连接
与
的(唯一)路径上每一个顶点和 sep set 里。
定理 VE 所诱导的 cluster tree 满足 RIP。
由于现在已经是一棵树了,所以这条连接 与
的路经一定存在且唯一,我们只需要说明
出现在这条路径上了。我们可以借助另外一个 clutser,即
被 eliminate 掉的,不妨设为
,这样我们可以证明
到
的路径上都含有
,这是因为
在到达
之前不可能消失,之后不可能存在。所以这个结论其实非常显然。同时我们也可以断言
也必须存在于中间的 sep set 中(即对应的
里)。这也告诉我们其实
,这告诉我们可以将
当做是
发送给
的 message。
clique tree 我们称一个 factorization 导致的 cluster tree 如果满足 RIP 为一个 clique tree,类似的名字还有 junction tree 和 join tree。
关于 RIP 的另一个重要的结论是与 independency 的关系:一个 cluster tree 满足 RIP 当且仅当 ,由于我们是在 MRF 里面讨论的(BN 可以通过 moralization 转换成对应的 MRF),这等价于要求
能够分离
与
。
至此为止我们对 clique tree 的理解还停留在 VE 所需要的结果上(VE 能做一个/组 variable 的 inference query),我们其实能够借助 clique tree 解决更多的问题,比如我们花两倍的计算代价就能计算任意一个/组 variable 的 inference query 了!这个工具就是前面抽象出来的 message,那个地方我们是按照 upstream 的方向(也就是 VE)计算了 发送给
的消息,即
,事实上我们如果逆转按照 downstream 的方向计算相应的 message 之后我们就会有很多新的发现。这仍然将我们的算法局限在 VE 的基础上,我们下面抛开 VE。
我们将 upstream 的逻辑整理一下,一个具有多个 child 的节点只有收到了所有的 child 的 message 才可能继续它自己的 elimination;换言之对于(无向图)每一个 cluster 收到了其他相邻的 cluster 的 message 之后就可以向尚未收到信息的那个发出消息:
像叶子节点由于只有一条边,所以对上一级发出的消息就是 将不必要的变量 sum out。这就是所谓的 sum-product message passing。我们可以为每个 cluster 定义所谓的 belief(从有向情况下的 root 来看,它收到了所有的 message 后),
不难猜测 即为对应的 margin distribution。可以证明这个策略的确能够得到我们需要的效果,这只需要我们证明每个 message 是什么
这里 表示边一侧的所有相关的 r.v.s,而
是这侧 cluster 相关的 factor 的并集。
calibration 如果一个 cluster graph 的两个相邻的 cluster 获得的 belief 对 sep set 是一致的,我们称这个 belief 是 calibrated。
首先我们说明一下这个的必要性,这相当于保证不同的 cluster 在 shared r.v.s 的 margin 至少是 agree with each other 的,没有矛盾。下面我们会发现我们的算法给出的 belief 的确是 calibrated:这我们只需要证明 。
有了这些结果之后我们可以给出不使用 参数化原分布的另一种参数化形式,这个形式依赖于所有的 margin,即这里的 beliefs
和
,我们可以简单的推导发现
这仍然是一组乘积。事实上,对于 calibrated clique tree 而言两者相等,当且仅当每个 belief 正比与 margin。这样做参数化的好处是在于对应的 message passing 要更为“随意”。初始情况下 就是对应的
,而
,从
向
发送消息不需要等候,而只需要计算 $\sigma_{i\to j} = \sum_{C_i – S_{i, j}} \beta_i$,然后更新
,然后
即可,每条边两个方向走一遍即可(似乎有点不对 -,-b)。这个策略称为 belief update,sum-product-divide message passing scheme 或者 Lauritzen-Spiegelhalter 算法。
下面我们讨论如何利用 message passing/belief propagation 解决 inference query。如果 query 是有 evidence,我们需要将部分相关的 message 重新计算一下;如果 query 的变量在一个 clique 里面我们显然可以用对应的 belief 进行 elimination 得到需要的结果;如果 query 的变量在两个 clique 里面,我们可以选择一个子树包含所有 query 中的 r.v.s.,然后将这个子树里面的 belief 和 message 转换(首先随便选一个作为根节点,用对应的 与父节点传递的消息除一下)成为一个新的 factor graph,在这里面做消元法。
最后我们讨论如何构造 clique tree,显然前面 VE 的一些 trick 可以使用(一般 VE 的结果还可以剪枝,即将全部是子集的 path collapse 掉),另外一种思路是从 chordal graph(记得 induced width 决定了复杂度),在这种 graph 上的 maximal clique 问题是容易的,我们只需要按照前面的 maximal cardinality 做法就能找到了。
——————
And Abimelech said to Abraham, What saw you, that you have done this thing?
pgm6的更多相关文章
随机推荐
- calico 排错记录 apt-get install telnet
1.用kubespray部署一个单节点集群,kubectl get pods -n kube-system,结果: calico-node-7v8wx 1/1 Running 0 2dcalico-n ...
- 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
原文:https://blog.csdn.net/dengyisheng/article/details/71215234 服务发现比较:Consul vs Zookeeper vs Etcd vs ...
- 20155217《网络对抗》Exp07 网络欺诈防范
20155217<网络对抗>Exp07 网络欺诈防范 实践内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS spoof引导特定访问到冒 ...
- 《基于Cortex-M4的ucOS-III的应用》课程设计 结题报告
<基于Cortex-M4的ucOS-III的应用>课程设计 结题报告 小组成员姓名:20155211 解雪莹 20155217 杨笛 20155227 辜彦霖 指导教师:娄嘉鹏 一.设计方 ...
- 20155333 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155333 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题 哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和 ...
- Luogu P4071 [SDOI2016]排列计数
晚上XZTdalao给我推荐了这道数论题.太棒了又可以A一道省选题了 其实这道题也就考一个错排公式+组合数+乘法逆元 我们来一步一步分析 错排公式 通俗的说就是把n个1~n的数排成一个序列A,并使得所 ...
- post请求参数Json字符串包含数组的校验和处理
传入参数类型 {"aaa":"aaaa","bbb":"bbb","ccc":"ccc&q ...
- java十年,需要学会的Java开发体系
阿里十年,只剩下这套Java开发体系了,链接:https://www.jianshu.com/p/ca6c4a73aac9
- TimelineJS JSON 数据格式 - 译文 [原创]
TimelineJS 是用于绘制时间轴的 Javascript 开源脚本,目前是 TimelineJS3 版.参阅 https://github.com/NUKnightLab/TimelineJS3 ...
- 互联网寒冬,Python 程序员如何准备面试
虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布『人员调整,结构优化』, 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. 搜索招聘网站我们可以 ...