概率无向图模型,aka Markov 随机场(Markov Random Field)
无向图的因子分解#
有向图中我们分析了独立性,无向图这里也需要。有三种等价表示
- 局部 Markov 性:若某个顶点的所有邻居都已知(也即被观测),那么它与其他顶点条件独立
- 成对 Markov 性:若两个顶点之间没有直接相连,那么当其他所有顶点都已知时,这两个顶点条件独立
- 全局 Markov 性:若两个点集之间的通路都必须经过某个第三点集,那么当第三点集已知时,这两个点集之间条件独立
如果两个顶点被观测顶点分割的情况下条件独立,则这个无向图就称为 Markov 随机场
分析概率无向图时同样要做因子分解,但“无向”写不出有向图那样的依赖关系,因此需要使用最大团来做因子分解。备忘:团 (clique) 又称完全子图,即其中的任意两个顶点都有边连接。“最大团”即包含顶点数最多的团。
势函数#
这个分布也叫做 Gibbs 分布。
特别地,如果定义势函数 φC(XC)=exp(−EC(XC)),则称为 Boltzmann 分布,其中 E 表示能量。
势函数求 Gibbs 分布例题#
例题。总统大选中,共有懂王、拜登两位候选人。有 ABCD 四个人,他们四个人的关系网如下,连线表示两个人的投票倾向之间存在相互影响:

图中总共有四个团:AB、BC、CD、DA,都含有两个顶点,因此都是最大团。在这四个最大团上,定义相互影响的势函数为:
| φ1(A,B) | φ2(B,C) | φ3(C,D) | φ4(D,A) |
|---|
| a0b030 | b0c0100 | c0d01 | d0a0100 |
| a0b15 | b0c11 | c0d1100 | d0a11 |
| a1b01 | b1c01 | c1d0100 | d1a01 |
| a1b110 | b1c1100 | c1d11 | d1a1100 |
其中,事件“A 投懂王”为 A=a0,“A 投拜登”为 A=a1,其他类推。
势函数表反映了两人之间具体的影响关系。例如可以看出,BC、DA 很可能投同一个人,而 CD 很可能投不同的人。
于是 Gibbs 分布可以由下表计算得到。Gibbs 分布即归一化的势函数积,归一化系数就是中间那一列全部加起来
| a b c d | 势函数积 | Gibbs 分布 |
|---|
| 0 0 0 0 | 30×100×1×100=300000 | 0.0417 |
| 0 0 0 1 | 30×100×100×1=300000 | 0.0417 |
| 0 0 1 0 | 30×1×100×100=300000 | 0.0417 |
| 0 0 1 1 | 30×1×1×1=30 | 0.0000 |
| 0 1 0 0 | 5×1×1×100=500 | 0.0001 |
| 0 1 0 1 | 5×1×100×1=500 | 0.0001 |
| 0 1 1 0 | 5×100×100×100=5000000 | 0.6943 |
| 0 1 1 1 | 5×100×1×1=500 | 0.0001 |
| 1 0 0 0 | 1×100×1×1=100 | 0.0000 |
| 1 0 0 1 | 1×100×100×100=1000000 | 0.1389 |
| 1 0 1 0 | 1×1×100×1=100 | 0.0000 |
| 1 0 1 1 | 1×1×1×100=100 | 0.0000 |
| 1 1 0 0 | 10×1×1×1=10 | 0.0000 |
| 1 1 0 1 | 10×1×100×100=100000 | 0.0139 |
| 1 1 1 0 | 10×100×100×1=100000 | 0.0139 |
| 1 1 1 1 | 10×100×1×100=100000 | 0.0139 |
这就求出了联合分布。
从联合分布中可以得出边缘分布。例如我们求 AB 的边缘分布:
| a b | ϕ1 | 归一化 ϕ1 | 联合分布中的 P(a,b) |
|---|
| 0 0 | 30 | 0.6522 | 0.1250 |
| 0 1 | 5 | 0.1087 | 0.6944 |
| 1 0 | 1 | 0.0217 | 0.1389 |
| 1 1 | 10 | 0.2174 | 0.0417 |
可以看出,全局联系改变了 AB 之间单独的关系。细究起来,这种变化主要来源于 CD 之间的强烈不一致性。
下面讲 3 个常用的概率无向图模型
logistic 回归模型#
说是回归,但其实是基于回归的分类模型。本章我们先用一般流程在二分类上做说明,再阐述多分类问题,以及它与概率无向图的关系
二分类与sigmoid#
基本推导#
传统的线性回归做分类,就是把正类样本设标签 y=1,负类样本设标签 y=0,然后得出线性拟合函数 z=wTx(偏置项通过 b=[w(0)]Tx(0) 塞进 wTx 中);对于测试样本,若拟合值大于某个值(比如 0.5),就分为正类,否则分为负类,这样就分出来了。这本质上是一个分段判别函数:
y={1,0,z>0.5z≤0.5
它不连续,不可导。而 logistic 回归做分类,就是在传统的线性回归当中,加入了一个性质足够好判别函数。sigmoid 函数(aka logistic 函数)就是一个不错的选择:
y=σ(z)=1+e−z1
它单增、任意阶可导,关于点 (0, 0.5) 对称;另外,sigmoid 相当于一个 R→[0,1] 的映射,或者说把实数轴映射成概率。于是 sigmoid 的结果便可以解释为:回归出来的数越大,分类为正类的概率就越大。
将样本 xi 分类为正类的概率记为 pi,即
pi=σ(wTxi)=1+exp(−wTxi)1
于是该样本分类正确的概率即为 piyi(1−pi)1−yi;若进一步假设分类结果只与特征有关,那么全部分类正确的概率即为 ∏ipiyi(1−pi)1−yi
于是我们的目标就是最大化对数似然函数:
L(w)=log[i∏piyi(1−pi)1−yi]=i∑(yilogpi+(1−yi)log(1−pi))=i∑(yilog1−pipi+log(1−pi))
这样变形的目的,是为了凑出对数几率函数 logit(p)=log1−pp,因为它是 sigmoid 的反函数,而这里 p=σ(wTx),故 log1−pp 就等于 wTx(因此 logistic 回归也称为对数几率回归)。于是代入后继续化简得
L(w)=i∑[yi(wTxi)+log1+exp(−wTxi)exp(−wTxi)]=i∑[wTxiyi−wTxi−log(1+exp(−wTxi))]
梯度下降之即可。其中对 w 的偏导可以进一步化简:
∂w∂L=i∑[xiyi−xi−1+exp(−wTxi)−xiexp(−wTxi)]=i∑xi[yi−1+1+exp(−wTxi)exp(−wTxi)]=i∑xi[yi−1+exp(−wTxi)1]=i∑xi[yi−σ(wTxi)]
把偏置项拆出来,即
∂w∂L∂b∂L=i∑xi[yi−σ(wTxi+b)]=i∑[yi−σ(wTxi+b)]
至于最后如何判别,就是看分类为正类的概率是否比负类大,本质上还是和 0.5 比大小,但这种比大小可以从概率角度解释,和传统的回归分类还是有区别的;由 sigmoid 单调性,也可以等价为 wTx 和 0 比大小。
交叉熵损失#
实践中采用 mini-batch 梯度下降,即在小批量样本上(而不是在整个训练集上)做梯度下降。为了防止样本量对 loss 的数值尺度的影响,需要把损失函数除以样本量,也即定义损失函数
J(w)=−m1L(w)=−m1i=1∑m[yilogpi+(1−yi)log(1−pi)]
这称为交叉熵损失。其中 yi 是第 i 个样本的真实标签,取值 0 或 1,pi 是模型预测该样本为正类的概率。
为什么跟“熵”有关系:从公式的形式来看,它是概率的负对数的平均值,这相当于求“在所有样本的真实标签都已知时,获得的信息量的期望”。这个信息量越小,说明“真实标签”这个信息越没用,也即表明模型预测的概率分布越准确,离真实标签的差异越小。
另外实践中,为了防止对 0 取对数,需要在 log 里面加上一个小正数 ε
多分类与 softmax#
多分类的思路和 logistic 是一样的,只不过它使用权重矩阵 W=[wi] 代替刚才的权重向量 w(同样的,偏置项 bk 塞进 wk 的第 0 项),得到“分为每个类的打分”:
zk=wkTx
然后再用 softmax 函数将 z 压成分类结果的概率分布向量 p:
pk=P(y=k∣z)=softmaxk(z)=∑j=1Kexp(zj)exp(zk)
对于多分类问题,loss 函数仍然是用“全部分类正确的概率”然后取对数平均(也即交叉熵):
L(W)=−m1i=1∑myiTlogpi
其中第 i 样本的真实标签 yi 是 onehot 编码,例如对于三分类问题,标签“1”、“2”、“3”分别表示为 [1,0,0]T、[0,1,0]T 和 [0,0,1]T。
loss 梯度计算#
仍然需要使用梯度下降进行优化。回顾 logistic 回归中,求 loss 的梯度时是通过配凑 logit 来化简的。softmax 回归中也需要做类似的化简,以便于计算 loss 的梯度。
softmax 把向量映射成向量,相当于向量值函数,其关于自变量 z 的偏导应该是一个 Jacobi 矩阵。记 softmax 结果为 p,也即
pk(z)=∑k=1Kexp(zk)exp(zk)
于是在求“分为第 k 类的概率”关于“第 j 类的打分”∂zj∂pk 时,显然可以分类讨论:
- 当 j=k 时,自变量只在分母出现。求导时,分母平方;分子“上导下不导”中,上导为 0、“下导上不导”等于 exp(zj)exp(zk),于是求导结果即为
∂zj∂pk=(∑k=1Kexp(zk))2−exp(zj)exp(zk)=−pjpk
- 当 j=k 时,“上导下不导”等于 exp(zj)(Σ)、“下导上不导”等于 exp2(zj),于是求导结果即为
∂zj∂pk=(Σ)2exp(zj)(Σ)−exp2(zj)=Σexp(zj)−(Σexp(zj))2=pj−pj2=pj(1−pj)
有了这些之后就可以计算 loss 的梯度。为了表述清晰,我们先关注单个样本的 loss 关于打分的偏导,然后再推广到整个数据集在模型参数上的偏导。由于求导过程涉及对自变量向量的非线性运算,需要把第 i 样本的 loss 中的向量点乘写开来:
Li=−yiTlogpi=−k=1∑Kyiklogpik
其中 yik 是第 i 个样本的真实标签的第 k 分量,pik 是模型预测第 i 个样本分为第 k 类的概率。于是由链式法则,第 i 样本的损失 Li 对第 j 类的打分 zij 的偏导为
∂zij∂Li=∂pik∂Li∂zij∂pik=−k=1∑Kpikyik∂zij∂pik=k=j(−pijyij∂zij∂pij)+k=j∑k=j(−pikyik∂zij∂pik)=(−pijyij)⋅(pij(1−pij))+k=j∑(−pikyik)⋅(−pijpik)=−yij(1−pij)+k=j∑yikpij=−yij+yijpij+pijk=j∑yik=−yij+pijk=1∑Kyik
而对于 onehot 编码向量 yi 而言,k=1∑Kyik≡1,于是
∂zij∂Li=pij−yij
代入 zij=wjTxi+bj 得
∂wj∂Li=∂zij∂Li∂wj∂zij=(pij−yij)xi
最后只需要将所有样本的梯度进行平均,于是总 loss 对参数的梯度
∂wj∂L=m1i=1∑m(pij−yij)xi
拆出偏置项的形式:
∂wj∂L∂bj∂L=m1i=1∑m(pij−yij)xi=m1i=1∑m(pij−yij)
对比:logistic 回归中,采用交叉熵损失时的 loss 梯度 ∂w∂L=m1i∑xi[σ(wTxi)−yi],其中 σ 那一项就是概率,因此在形式上是完全一样的
无向图模型视角#
现在我们回头用概率无向图模型的观点来审视 logistic 回归。事实上,logistic 回归可以被看作一个非常简单的 Markov 随机场。
考虑一个分类问题,我们有输入特征 X={X1,…,Xd} 和输出类别 Y。构建一个无向图,其中 Y 和所有的 Xi 都相连,所有 Xi 之间也相互连接。这个图本身就是一个巨大的团,也是该图的唯一最大团。于是分类问题即求条件概率 P(Y=k∣X=x)
根据 Hammersley-Clifford 定理,该图的联合概率分布可以表示为:
P(Y,X)=Z1φ(Y,X)
于是条件概率
P(Y∣X)=P(X)P(Y,X)=∑Y′P(Y′,X)P(Y,X)=∑Y′Z1φ(Y′,X)Z1φ(Y,X)=∑Y′φ(Y′,X)φ(Y,X)
如果定义势函数
φ(Y,X)=exp(k=1∑KI(Y=k)⋅(wkTX+bk))
其中 I(Y=k) 是示性函数(当 Y=k 时为 1,否则为 0),wk 和 bk 分别是第 k 类的权重和偏置。当我们只关心 Y=k 这个特定类别时,上式可以简化为 φ(k,X)=exp(wkTX+bk)。
将这个势函数代入条件概率公式中:
P(Y=k∣X)=∑j=1Kφ(j,X)φ(k,X)=∑j=1Kexp(wjTX+bj)exp(wkTX+bk)
这就是 softmax 回归的公式
因此,从概率图模型的角度来看,logistic/softmax 回归相当于一个 势函数为特征的线性组合的指数形式的 Markov 随机场。这种直接对条件概率 P(Y∣X) 进行建模的模型,也称作判别式模型。