什么样的问题需要 $CRF$ 模型。这里举一个简单的例子:
假设我们有 $Bob$ 一天从早到晚的一系列照片,我们要猜这一系列的每张照片对应的活动,比如: 工作的照片,吃饭的照片,唱歌的照片等等。
一个比较直观的办法就是,我们找到 $Bob$ 之前的日常生活的一系列照片,然后问清楚这些照片代表的活动标记,这样我们就可以用监督学习的
方法来训练一个分类模型,比如逻辑回归,接着用模型去预测这一天的每张照片最可能的活动标记。
这种办法虽然是可行的,但是却忽略了一个重要的问题,就是这些照片之间的顺序其实是有很大的时间顺序关系的,而用上面的方法则会忽略这
种关系。比如我们现在看到了一张 $Bob$ 闭着嘴的照片,那么这张照片我们怎么标记 $Bob$ 的活动呢?比较难去打标记。但是如果我们有 $Bob$ 在
这一张照片前一点点时间的照片的话,那么这张照片就好标记了。如果在时间序列上前一张的照片里 $Bob$ 在吃饭,那么这张闭嘴的照片很有可能
是在吃饭咀嚼。而如果在时间序列上前一张的照片里 $Bob$ 在唱歌,那么这张闭嘴的照片很有可能是在唱歌。
为了让我们的分类器表现的更好,可以在标记数据的时候,考虑相邻数据的标记信息,这一点正是 $CRF$ 比较擅长的地方。
概率图模型
概率图模型是机器学习中的一类算法,它用图进行建模。图的顶点为随机变量,边为变量之间的概率关系。如果是有向图,则称为概率有向图模型;
如果图无向,则称为概率无向图模型。下图是一个简单的概率有向图,也称为贝叶斯网络:
在上图中有 $4$ 个顶点,对应于 $4$ 个随机变量。边表示随机变量之间的条件概率,如果 $X_{i}$ 到 $X_{j}$ 有一条边,则表示它们之间的条件概率为 $P(X_{j}丨X_{i})$。
以上图为例,所有随机变量的联合概率为
$$P(X_{1},X_{2},X_{3},X_{4}) = P(X_{1})P(X_{2}|X_{1})P(X_{3}|X_{1})P(X_{4}|X_{2})$$
如果顶点 $X_{i}$ 没有边射入,则在联合概率的乘积项中会出现 $P(X_{i})$。如果从顶点 $X_{i}$ 到 $X_{j}$ 有边,则在乘积项中有 $P(X_{j}丨X_{i})$。
在概率无向图中边是无向的,联合概率的计算方式与有向图不同。以下图为例
团:一个无向图的所有顶点之间均有边直接连接。如果一个子图是团,再加入一个顶点之后不是团,则称为最大团。
上图中最大团有:$left { X_{1},X_{2},X_{3} ight },left { X_{2},X_{4} ight }$。最大团集合记为 $C$。
令 $X = left { X_{1},X_{2},X_{3},X_{4} ight }$,无向图中的边不是变量之间的条件概率,计算联合概率的方式是因子分解,计算公式为
$$P(X_{1},X_{2},X_{3},X_{4}) = frac{1}{Z}prod_{c in C}^{} psi (X_{c}) \
= frac{1}{Z}psileft ( X_{1},X_{2},X_{3}
ight )psileft ( X_{2},X_{4}
ight )$$
$X_{c}$ 为团 $c$ 中所有顶点对应的随机变量构成的向量,$Z$ 为归一化因子,用于保证上式计算出的是合法的概率值。
$$Z = sum_{X}^{}prod_{c in C}^{} psi (X_{c})$$
即对 $X$ 向量所有可能的取值求和。
一个概率无向图模型如果满足马尔可夫性(一个结点所代表的随机变量只与其相邻结点有关,而与不相邻的结点或结点组之间是相互独立的),
则称为马尔可夫随机场。
线性链条件随机场
条件随机场是马尔可夫随机场的特例,这种模型中有 $X = left { X_{1},X_{2},cdots,X_{n} ight }$ 和 $Y = left { Y_{1},Y_{2},cdots,Y_{n} ight }$ 两组随机向量。前者是观测序列,其值
可见;后者是隐变量,也称为标签序列,其值不可见。如果给定 $X$ 的条件下 $Y$ 是马尔可夫随机场,则这样的概率图就称为条件随机场。在一般
随机场中,所有的随机变量的取值都是未知的,而条件随机场中,有些结点的取值已经确定了,因而才有条件二字。
注意:随机场会和一个联合概率分布一一对应;条件随机场会和一个条件概率分布一一对应。
线性链条件随机场中的随机变量(未知的变量,不包括已确定的那些变量)形成一个线性链,类似于数据结构中的链表结构,每个节点只与前一个
节点(如果存在),后一个节点(如果存在)有关。即在给定条件下,时间序列中每个变量只和前一时刻、后一个时刻的变量有关。图结构如下:
虽然图中只画了一个 $X$ 结点,但它实际上是一个结点组,即 $n$ 个结点,而且每个随机变量 $X_{i},i=1,2,...,n$ 的取值都已知。
在给定随机变量序列 $X$ 的情况下,随机变量 $Y$ 的条件概率分布 $P(Y|X)$ 构成条件随机场,即满足马尔科夫性:
$$P(Y_{i}|X,Y_{1},Y_{2},cdots,Y_{n}) = P(Y_{i}|X,Y_{i-1},Y_{i+1})$$
现在我们要写出 $P(Y|X)$ 的表达式,通过特征函数和其权重系数来定义。
1)定义在 $Y$ 上的节点特征函数,这类特征函数只和当前节点有关,记为:
$$s_{l}(y_{i},x,i),l = 1,2,cdots,L$$
其中 $y_{i}$ 为随机变量 $Y_{i}$ 的取值,$x$ 为随机变量序列 $X$ 的取值,$L$ 是每个节点的节点特征函数的总个数,$i$ 是是当前节点在序列的位置。
2)第二类是定义在 $Y$ 上下文的局部特征函数,这类特征函数只和当前节点和上一个节点有关,记为:
$$t_{k}(y_{i-1},y_{i},x,i),k = 1,2,cdots,K$$
其中 $K$ 是每个节点的局部特征函数的总个数。
无论是节点特征函数还是局部特征函数,它们的取值只能是 $0$ 或者 $1$。即满足特征条件或者不满足特征条件。同时,我们可以为每个特征函数赋予一个
权值,用以表达我们对这个特征函数的信任度。假设 $t_{k}$ 的权重系数是 $lambda_{k}$,$s_{l}$的权重系数是 $mu_{l}$,则得到 $linear-CRF$ 参数化形式如下:
$$P(Y|X) = frac{1}{Z}e^{sum_{i,k}^{}lambda_{k}t_{k}(Y_{i-1},Y_{i},X,i) + sum_{i,l}^{}mu_{l}s_{l}(Y_{i},X,i)}$$
可以看出,线性链条件随机场有 $n-1$ 个最大团,为了统一表述,增加了一个特殊的状态 $Y_{0}$ 作为初始状态,不然遍历的时候 $i$ 得从 $2$ 开始。
$Y$ 的每个节点都有 $L$ 个节点特征函数和 $K$ 个局部特征函数,假设输出 $Y_{i}$ 的可能取值有 $m$ 个,则 $L = m, K = m^{2}$,如下图:
令
$$f_{k}(y_{i-1},y_{i},x,i) = left{egin{matrix}
t_{k}(y_{i-1},y_{i},x,i), & k = 1,2,cdots,K \
s_{k-K}(y_{i},x,i), & k = K+1,K+2,cdots,K+L
end{matrix}
ight.$$
$$w_{k} = left{egin{matrix}
lambda_{k}, & k = 1,2,cdots,K \
mu_{k-K}, & k = K+1,K+2,cdots,K+L
end{matrix}
ight.$$
令
$$f_{k}(y,x) = sum_{i=1}^{n}f_{k}(y_{i-1},y_{i},x,i),; k = 1,2,...,K+L$$
这样,我们的 $linear-CRF$ 的参数化形式可以简化为:
$$P(Y|X) = frac{1}{Z}e^{sum_{k=1}^{K+L}w_{k}f_{k}(Y,X)}$$
上面这个思路是每一行先累加,然后再乘上各自的权重再累加。当然也可以先每一列进行累加,即
$$P(Y|X) = frac{1}{Z}e^{sum_{k=1}^{K+L}w_{k}sum_{i=1}^{n}f_{k}(y_{i-1},y_{i},x,i)} \
= frac{1}{Z}e^{sum_{i=1}^{n}sum_{k=1}^{K+L}w_{k}f_{k}(y_{i-1},y_{i},x,i)} \
= frac{1}{Z}prod_{i=1}^{n}e^{sum_{k=1}^{K+L}w_{k}f_{k}(y_{i-1},y_{i},x,i)} \
= frac{1}{Z}prod_{i=1}^{n}M_{i}(y_{i-1},y_{i}|x)$$
其中 $M_{i}(y_{i-1},y_{i}|x) = e^{sum_{k=1}^{K+L}w_{k}f_{k}(y_{i-1},y_{i},x,i)}$。$M_{i}(y_{i-1},y_{i}|x)$ 可以认为是在给定 $y_{i-1}$ 时,从 $y_{i-1}$ 转移到 $y_{i}$ 的非规范化概率。
假设随机变量 $Y_{i}$ 的可能取值有 $m$ 个,所以 $M_{i}(y_{i-1},y_{i},x,i)$ 根据 $y_{i-1},y_{i}$ 的取值可存在 $m imes m$ 个结果,可以将这个 $m^{2}$ 个值构成一个 $m imes m$ 的矩阵,
即 $M_{1}(x),M_{2}(x),M_{n}(x)$ 每一个都是一个 $m imes m$ 的矩阵。
$$M_{1}(x) = egin{bmatrix}
M_{1}(y_{i-1},y_{i}|x)
end{bmatrix}_{m imes m} \
M_{2}(x) = egin{bmatrix}
M_{2}(y_{i-1},y_{i}|x)
end{bmatrix}_{m imes m} \
vdots \
M_{n}(x) = egin{bmatrix}
M_{n}(y_{i-1},y_{i}|x)
end{bmatrix}_{m imes m}$$
其中 $Z$ 为规范化因子,记 $start$ 为 $Y_{0}$ 的取值,$stop$ 为 $Y_{n}$ 的取值,那么 $Z$ 的值为
$$Z = M_{1}(x)_{start} cdot igg [M_{2}(x)M_{3}(x) cdots M_{n-1}(x) igg ] cdot M_{n}(x)_{stop}$$
其中 $M_{1}(x)_{start}$ 是一个行向量,$M_{n}(x)_{stop}$ 是一个列向量。
评估观察序列概率
推断问题指给定模型的参数和观测序列 $X$,计算条件随机场的各种概率值,分为两个问题。
1)第一个推理问题是给定条件随机场的参数,以及观测序列 $X$,找到使条件概率最大的状态序列 $Y$,即求解如下问题
$$Y^{*} = arg ; max_{Y} P(Y|X)$$
2)第二个问题是计算标签序列子集的边缘分布,如节点的边缘概率 $P(Y_{i} | X)$ 以及边的边缘概率 $P(Y_{i}, Y_{i-1}|X)$ ,这些值将被训练算法使用。
首先需要明白 $M_{i}(y_{i-1},y_{i},x,i)$ 可以代表转移概率,只是和真实值之间差了一个常数项的归一化因子 $C_{i}$,其值为
$$C_{i} = sum_{y_{i-1}}^{}M_{i}(y_{i-1},y_{i},x,i)$$
根据全概率公式有
$$P(Y_{i} = y_{i} | x) = sum_{j=1}^{m}P(Y_{i-1} = y_{j},Y_{i} = y_{i} | x) \
= sum_{j=1}^{m}P(Y_{i-1} = y_{j}| x)P(Y_{i} = y_{i} | Y_{i-1} = y_{j},x) \
= sum_{j=1}^{m}P(Y_{i-1} = y_{j}| x) left (frac{1}{C_{i}} cdot M_{i}(y_{j},y_{i} | x)
ight ) \
= frac{1}{C_{i}}sum_{j=1}^{m}P(Y_{i-1} = y_{j}| x) M_{i}(y_{j},y_{i} | x)$$
令 $alpha_{i}(y_{i}|x) = C_{i}P(Y_{i} = y_{i} | x)$,那么上式可以表示为
$$P(Y_{i} = y_{i} | x) = frac{1}{C_{i}}sum_{j=1}^{m}frac{1}{C_{i-1}}alpha_{i-1}(y_{j}|x) M_{i}(y_{j},y_{i} | x) \
Rightarrow alpha_{i}(y_{i} | x) = sum_{j=1}^{m}frac{1}{C_{i-1}}alpha_{i-1}(y_{j}|x) M_{i}(y_{j},y_{i} | x) $$
发现这个式子中还是存在一些常数项,换一种更好的方式,令
$$alpha_{i}(y_{i}|x) = P(Y_{i} = y_{i} | x) prod_{j=1}^{i}C_{j}$$
则有
$$P(Y_{i} = y_{i} | x) = frac{1}{C_{i}}sum_{j=1}^{m}P(Y_{i-1} = y_{j}| x) M_{i}(y_{j},y_{i} | x) \
= frac{1}{C_{i}}sum_{j=1}^{m}left (frac{1}{prod_{t=1}^{i-1}C_{t}}alpha_{i-1}(y_{j}| x)
ight ) M_{i}(y_{j},y_{i} | x) \
= frac{1}{prod_{t=1}^{i}C_{t}}sum_{j=1}^{m}alpha_{i-1}(y_{j}| x) M_{i}(y_{j},y_{i} | x) \
Rightarrow ; P(Y_{i} = y_{i} | x)prod_{t=1}^{i}C_{t} = sum_{j=1}^{m}alpha_{i-1}(y_{j}| x) M_{i}(y_{j},y_{i} | x) \
Rightarrow ; alpha_{i}(y_{i}| x) = sum_{j=1}^{m}alpha_{i-1}(y_{j}| x) M_{i}(y_{j},y_{i} | x)$$
$alpha_{i}(x)$ 是一个 $m$ 维向量,即
$$alpha_{i}(x)= egin{bmatrix}
alpha_{i}(y_{1}|x) \
alpha_{i}(y_{2}|x) \
vdots \
alpha_{i}(y_{m}|x)
end{bmatrix}$$
那么最终得到前向递推公式:
$$alpha^{T}_{i}(x) = alpha^{T}_{i-1}(x)M_{i}(x)$$
后向向量暂时还不会推导,下次再来补充。