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的更多相关文章
随机推荐
- P1272 重建道路
题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此,牧场运输系 ...
- DQN(Deep Reiforcement Learning) 发展历程(五)
目录 值函数的近似 DQN Nature DQN DDQN Prioritized Replay DQN Dueling DQN 参考 DQN发展历程(一) DQN发展历程(二) DQN发展历程(三) ...
- abp 修改abp.zero的实体映射类,使生成的表和字段为大写状态
在我们项目中,由于涉及到报表配置管理,可以通过一段sql快捷的配置出一个报表页面.部分sql会与abp框架的一些系统表做关联查询,而abp的映射类没有单独设置表和字段的名称,默认用类名和属性名,区分大 ...
- excel实用技巧——vlookup函数
1.VLOOKUP函数的套路 VLOOKUP(要找谁,在哪儿找,返回第几列的内容,精确找还是近似找) 最后一个参数: 如果为0或FASLE,用精确匹配方式,而且支持无序查找: 如果为TRUE或被省略, ...
- Struts2将图片输出到页面
在做CRUD的过程中,添加页面是个表单,表单里面有一项是上传头像文件.这样表单提交后,头像文件上传了. 但这个文件存的地址是本地硬盘的一个文件夹.在编辑页面要做这个头像的回显的话,就需 ...
- CSS技巧收集——巧用滤镜
最近暴雪一款叫<守望先锋>的游戏火到不行,身边很多人都深受其毒害,虽然博主自己没有买(穷),但是耳濡目染也了解了个大概. 由于之前大致学习了一下 css 滤镜的各种用法,所以心血来潮结合二 ...
- Linux/centos 7 使用动态ip(dhcp)切换成静态ip后无法联网的问题
确保:子网掩码,网关,dns一致,最后修改: /etc/sysconfig/network-scripts/ifcfg-ens33 查看网关和子网掩码: route -n 查看dns
- redis在php中常用的语法(转)
String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 $redis-> ...
- CVE-2010-2883
测试环境: Windows xp sp3 Adobe Reader 9.3.4 成因: CoolType.dll库的strcat函数在解析SING表中的uniqueName域时未作长度检查而造成栈溢出 ...
- highcharts多个Y轴
http://blog.sina.com.cn/s/blog_6a53599101019qax.html 多个Y轴的实现方法在于把yAxis设置成一个数组,里面的一个对象代表一条Y轴,利用opposi ...