第一节 结构学习概述
1. 为什么引入结构学习:(1)某些领域专家不够牛,给不出好的结构 (2) 对于一些特定问题来说,结构的发现本身就是任务
2. 精确结构的重要性:
(1)少了边,可能引入一些不存在的独立性,无法学习到目标分布,可能欠拟合
(2)多了边,可能引入多余的依赖关系,增加多余参数。可以学习到目标分布,可能过拟合
3. 基于打分的结构学习:定义一个评分函数,根据结构拟合数据的情况给予评分。我们的目标是找到一个结构最大化分值。
第二节 似然评分
1. 一个图的似然评分为它(参数最优情况下)的最大似然值,因此问题就变成了寻找“最大似然值”最大的图结构。
对于一个简单的例子:$X Y$ vs $X o Y$
$score_L(G_0:D)=sum_m(loghat heta_{x[m]}+loghat heta_{y[m]})$
$score_L(G_1:D)=sum_m(loghat heta_{x[m]}+loghat heta_{y[m]|x[m]})$
$score_L(G_1:D)-score_L(G_0:D)$
$=sum_m(loghat heta_{x[m]}+loghat heta_{y[m]|x[m]})-sum_m(loghat heta_{x[m]}+loghat heta_{y[m]})$
$=sum_m(loghat heta_{y[m]|x[m]}-loghat heta_{y[m]})$
$=sum_{x,y}M[x,y]loghat heta_{y|x}-sum_yM[y]loghat heta_y$ //根据x,y聚类
$=Msum_{x,y}hat P(x,y)loghat P(y|x)-Msum_yhat P(y)loghat P(y)$ //$M[x,y]=Mhat P(x,y), hat heta_{y|x}=hat P(x,y)$
$=M(sum_{x,y}hat P(x,y)loghat P(y|x)-sum_{x,y}hat P(x,y)loghat P(y))$
$=Msum_{x,y}hat P(x,y)logfrac{hat P(y|x)}{hat P(x)hat P(y)}=Msum_iI_{hat P}(X_i;Pa_{X_i})$
2. 对数据集D,似然评分写成
$score_L(G:D)=Msum_iI_{hat P}(X_i;Pa_{X_i})-Msum_iH_{hat P}(Xi)$
其中$I_{hat P}(X;Y)=sum_{x,y}P(x,y)logfrac{P(x,y)}{P(x)P(y)}$,表示边(X,Y)的信息量,又叫互信息量
$H_{hat P}(X)=-sum_xP(x)log P(x)$,表示顶点$X$的信息量
对于一个没有边的图,评分就是所有结点的信息量乘以M。因此$score_L$可以看成增加边为图带来的额外的信息量。
3. 互信息量$I_{hat P}(X;Y)$总是大于0的,等于零当且仅当$Xperp Y$。
因此增加边总会增加分值。而且对于有限的数据样例来说,就算有独立关系,也会因为数据随机性而造成偏差而不能100%反应这种独立关系。所以单用这个评分几乎总会生成最复杂的结构(全连通图),也就是过拟合。
4. 防止过拟合的方法:
(1) 限制生成图的空间。例如限制每个顶点的parent数量。
(2) 用复杂性惩罚函数。例如制定一个惩罚量(BIC评分)。或者通过贝叶斯评分,这种方法会根据参数的先验分布来对各参数似然值进行加权,而不是仅仅采用最大似然值来作为评分。
第三节 BIC评分,渐进一致性
$score_{BIC}(G:D)=l(hat{ heta}_G:D)-frac{log M}{2}Dim{G}$
$Dim{G}$代表G中独立参数的个数,独立参数即其值不依赖于其它参数的参数。例如两个Binary变量$A o B$的独立参数有:$ heta_A, heta_{B|A=0}和 heta_{B|A=1}$
代入后有:$score_{BIC}(G:D)=Msum_iI_{hat P}(X_i;Pa_{X_i})-Msum_iH_P(Xi)-frac{log M}{2}Dim{G}$
可以发现随着M的增大,惩罚项相对越来越小。当M趋于无穷大的时候,${hat P}$将趋向于真实分布(受噪音影响极小),这时候增加冗余的边几乎不会增加信息量,远小于惩罚项$O(log M)$,但是正确的边将带来的信息增益将正比于M,大于惩罚项$O(log M)$。
第四节 贝叶斯评分
1. 我们定义在某个数据集给定的情况下,模型是一个分布。$P(G|D)=P(D|G)P(G)/P(D)$,其中分母和model选择无关。因此可以忽略。定义
$score_B(G:D)=log P(D|G)+log(G)$
其中$P(D|G)=int P(D|G, heta_G)P( heta_G|G)d heta_G$
可以看到这里的似然不是最大似然,而是平均似然(边界似然)。因此对模型的评价不再是某个最好的参数,因此更加客观。例如某些模型的最大似然很高,但是也就对参数的某个取值是这样,其他参数下的表现非常糟糕,我们倾向于认为模型本身并没有那么好,并不是我们想要的模型。
2. 先考察左项$P(D|G)$:对于多项分布而言(参数符合Dirichlet分布)
$P(D|G)=prod_iprod_{u_iin Value(Pa_{X_i}^G)}frac{Gamma (alpha_{X_i|u_i})}{Gamma (alpha_{X_i|u_i}+M[u_i])}prod_{x_i^jin Value(X_i)}frac{Gamma (alpha_{x_i^j|u_i}+M[x_i^j,u_i])}{Gamma (alpha_{x_i^j|u_i})}$
(1) 这是一个三重嵌套乘式:第一层枚举不同的变量,第二层枚举变量父亲的取值,第三层枚举变量本身的取值。
(2) $alpha_{X_i|u_i}=sum_jalpha_{x_i^j|u_i}$
$log P(D|G)=sum_iFamilyScore_B(X_i|Pa_{X_i}^G:D)$,其中$FamilyScore_B(X_i|Pa_{X_i}^G:D)=$
$sum_{u_iin Value(Pa_{X_i}^G)}{lnGamma (alpha_{X_i|u_i})-lnGamma (alpha_{X_i|u_i}+M[u_i])+sum_{x_i^jin Value(X_i)}(lnGamma (alpha_{x_i^j|u_i}+M[x_i^j,u_i])-lnGamma (alpha_{x_i^j|u_i}))}$
3. 再考察右项$P(G)$:有三种先验分布:
(1)均匀分布。这个效果实际上很好,因为$P(D|G)$的平均似然已经很好地避免了过度拟合
(2)边数惩罚:$P(G)sim c^{|G|}(cin(0,1))$
(3)参数数量惩罚
4. 对于2,我们还有一个问题没有解决:就是$alpha$怎么生成。基本思路和上周的贝叶斯网参数估计的初始值设定一样,但是我们需要额外定义一个初始图结构。这个模型叫BDe模型:
(1) $alpha$: 和上周的贝叶斯参数估计一样,定义一个统一的$alpha$
(2) $B_0$:假想的初始结构,注意:用统一的$B_0$来给所有的生成图$G$作先验分布。这样可以保证I等价的图有相同的贝叶斯评分。有两个考虑:
(a) I等价的两个图的表达能力完全一致。若它们的$B_0$不同,则拥有不同的评分,这不合理。
(b) 对评分不同的两个图,应该优先考虑图更优,再考虑参数更优。而对不同的图采用不同的$B_0$将破坏这种原则。
(3) 令$alpha(x_i,Pa_i^G)=alphacdot P(x_i,pa_i^G|B_0)$ 其中$pa_i^G$是$X_i$在判定图中的parent,不是初始图$B_0$的parent。
5. 可以证明当M趋近于无穷大的时候,$score_B(D|G)=l(hat{ heta}_G:D)-frac{log M}{2}Dim{G}+O(1)$,和$score_{BIC}$渐进一致。因此它也符合BIC评分的所有优良特性。
第五节 树结构学习
1. 为什么用树?树有一些特殊的优良结构,能减少运算量,减少过拟合,从而对数据较少的情况更加友好。
2. 树和森林的区别:森林允许多个顶点没有父亲,树必须全连通。
3. 因为每个顶点最多有一个父亲,因此FamilyScore的描述也变得简单(参见前一节的表达式)
4. $score(G:D)=sum_jscore(X_i|Pa_{X_i}^G:D)$
$=sum_{i:p(i)>0}(score(X_i|X_{p(i)}:D)-score(X_i:D))+sum_iscore(X_i:D)$
第一项可以认为是边带来的额外效益。后一项可以认为是空树(纯顶点)的评分,和树结构无关。
5. 定义边权重$w_{i o j}=score(X_j|X_i:D)-score(X_j:D)$
(1) 对似然评分来说,$w_{i o j}=MI_{hat P}(X_i;X_j)$,所有的边权重是非负数,因此最优结构肯定是树。
(2) 对BIC/BDe评分来说,权重可能是负数(因为有复杂度惩罚),因此最优结构可能是森林。
6. 如果一个评分机制满足I等价的图的评分一样(似然评分,BIC评分和BDe评分都满足),那么$w(i o j)=w(j o i)$。也就是无向图就可以了。
7. 算法:
(1)先将负边清零
(2)利用最大生成树算法生成树$T=O(n)$
(3)删除0边变成森林
8 在实际应用中,可能生成一些原图不存在的边,同时,因为选择的方向无关的评分机制,也会丢失边的方向信息
第六节 图结构学习
1. 和树结构学习的不同:允许多个parent,因此不再适用最大生成树算法。实际上,允许2个parent的最大生成图已经是NP-hard问题
2. 基本操作:增加边,删除边,反向边。这里边的方向不一定影响评分值(对MLE,DBe,BIC不影响),但有可能生成圈。
3. 爬山算法介绍:
(1)起点:(a)空网(b)最大生成树(c)随机网(d)先验知识网
(2)每一步:寻找所有可能的基本操作,选择对评分贡献最大的步骤
(3)当无法再改进时,停止
4. 爬山算法缺点:(1)卡在 局部最优解上。(2)碰到平原,怎么走都没用。通常因为I等价图的评分都一样。
反向边操作的原因:虽然反向=删除+增加反向边,但对于近视的爬山算法来说,删除一条边常常意味着分值减少(负边除外),这一步根本不会做。
5. 爬山算法的改进:
(1)卡在局部最优时,退回N步重新开始
(2)退回之前记录之前的那几步,重新开始后就不要走着几步了。
6. 例1:使用目标图采样的数据尝试进行图搜索,随着数据增加,拟合的效果慢慢接近目标图。但是真实世界的数据可能并没有这么美好。
7. 例2:微软利用不同位置的事故和天气等信息对不同路段的拥堵预测进行建模,发现某些位置的事故经常会导致很远甚至河对岸的某条道路拥堵。
8. 例3:蛋白质影响关系建模:通过贝叶斯图学习,发现了很多生物学家们多年才发现的关系,也发现了生物学家没有发现的一些关系。当然结果也不那么完美,丢失了一些边也有一些边的方向反了。
第七节 搜索与可分解性
1. 简单计算量分析
(1)设顶点数为$n$。每次搜索,都要穷举$n(n-1)$条边来进行增删改
(2)每穷举一次后需要评分,每个顶点要计算一次充分统计量$M[x,Pa_x]$ $T=O(Mn)$
(3)无环检测$T=O(m)$
所以总体时间是$T=O(n^2(Mn+m))$
2. 优化:
(1) 我们知道,我们介绍过的评分机制中,总评分都可以拆成FamilyScore,不同FamilyScore之间并不影响。而实际上,每次改动,很多顶点的家庭状况并没有变化,充分统计量并不需要重新计算。 最多需要计算两个顶点的充分统计量,当然每个顶点的Parent可能是有O(n)个,因此时间只能从常数量上减少。
(2) 因为每次都是寻找最大评分变化顶点,我们很自然地想到用优先队列来存储最大评分变化。因此我们每一步并不需要重新枚举所有的边。
(3) 缓存已经计算过的充分统计量M[A,B]
(4) 避免我们预先知道的不可能的父子关系。