5 CRF 概率密度函数的参数形式
前面我们花了大量的功夫来将CRF 是如何演变来的,讲述了从HMM-MEMM-CRF 的演化过程,理性的讲述了CRF 图结构的合理性。所谓条件随机场,我们分成两个部分来进行解释:条件指的是,条件概率;随机场指的是,y 节点连接而成的无向图模型,称之为Markov Field。CRF 的概率图模型如下所示:
5.1 势函数化简
我们想要得出
P
(
Y
∣
X
)
P(Y | X)
P(Y∣X) 的形式,很可惜在无向图中,我们并不能根据因果关系直接写出来。我们之间讲到过无向图的分解方法,这里再重申一下团的概念,一个图中所有桑点之问都相互相连称之为团。对于 Markov Random Field 做因子分解,对于
x
∈
R
p
,
x \in \mathbb{R}^{p},
x∈Rp, 我们可以令:
P
(
X
)
=
1
Z
∏
i
=
1
k
ϕ
i
(
x
c
i
)
=
1
Z
∏
i
=
1
k
exp
{
−
E
i
(
x
c
i
)
}
P(X)=\frac{1}{Z} \prod_{i=1}^{k} \phi_{i}\left(x_{c_{i}}\right)=\frac{1}{Z} \prod_{i=1}^{k} \exp \left\{-E_{i}\left(x_{c_{i}}\right)\right\}
P(X)=Z1i=1∏kϕi(xci)=Z1i=1∏kexp{−Ei(xci)}
这里的 K 表示有
k
k
k 个最大团 ,
c
i
c_{i}
ci 指的是第
i
i
i 个最大团
,
,
, 而
ϕ
i
(
x
c
i
)
\phi_{i}\left(x_{c_{i}}\right)
ϕi(xci) 表示第
i
i
i 个最大团的势函数。
ϕ
i
(
x
c
1
)
\phi_{i}\left(x_{c_{1}}\right)
ϕi(xc1) 势函数,必须为正。这里的概念都是来自于统计物理学和热力学的过程。因为,势函数必定为正,我 们可以将势函数表达为
ϕ
i
(
x
c
i
)
=
exp
{
−
E
i
(
x
c
i
)
}
\phi_{i}\left(x_{c_{i}}\right)=\exp \left\{-E_{i}\left(x_{c_{i}}\right)\right\}
ϕi(xci)=exp{−Ei(xci)} 。其中
,
E
i
(
x
c
i
)
, E_{i}\left(x_{c_{i}}\right)
,Ei(xci) 称为 Energy function。实际上用这种 形式表达的
p
(
x
)
,
p(x),
p(x), 为 Gibbs Distribution,或者又被称之为 Boltzman Distribution。为了进一步简化, 我们令
−
E
i
(
x
c
i
)
=
F
i
(
x
c
i
)
,
-E_{i}\left(x_{c_{i}}\right)=F_{i}\left(x_{c_{i}}\right),
−Ei(xci)=Fi(xci), 所以就得到了最终的形式:
P
(
X
)
=
1
Z
∏
i
=
1
k
exp
{
F
i
(
x
c
i
)
}
(
10
)
P(X)=\frac{1}{Z} \prod_{i=1}^{k} \exp \left\{F_{i}\left(x_{c_{i}}\right)\right\} \ \ \ \ \ (10)
P(X)=Z1i=1∏kexp{Fi(xci)} (10)
5.2 CRF 概率参数结构
如果不加说明,我们认为CRF 为线性链。
我们可以看到在线性链中,每两个相邻的节点之间形成了一个团,一共4个团,而且总有团的结构都是一样的, 图 10 所例的线性链可以被我们分成 4 个团。每个团都和
y
t
,
y
t
−
1
y_{t}, y_{t-1}
yt,yt−1 和
x
1
:
T
x_{1: T}
x1:T 有关系,所以,
P
(
X
)
=
1
Z
∏
i
=
1
k
exp
{
F
i
(
x
c
i
)
}
=
1
Z
exp
∑
i
=
1
T
−
1
F
t
(
y
t
−
1
,
y
t
,
x
1
:
T
)
P(X)=\frac{1}{Z} \prod_{i=1}^{k} \exp \left\{F_{i}\left(x_{c_{i}}\right)\right\}=\frac{1}{Z} \exp \sum_{i=1}^{T-1} F_{t}\left(y_{t-1}, y_{t}, x_{1: T}\right)
P(X)=Z1i=1∏kexp{Fi(xci)}=Z1expi=1∑T−1Ft(yt−1,yt,x1:T)
这个公式的转换,首先将连乘写到指数函数里变成了连加,又因为线性链所有团的结构都是一样的。所 以相当于从第 1 个加到第 T -1 个。由于线性链中所有团的结构都是一样的,我们只考虑其中的一个 团结构。那么,下一步的目标则是考虑,
F
t
(
y
t
−
1
,
y
t
,
x
1
:
T
)
F_{t}\left(y_{t-1}, y_{t}, x_{1: T}\right)
Ft(yt−1,yt,x1:T) 怎么表示? 这个结构的得来实际上有一定的 intuitive,我们将它分成两部分,状态函数和转移函数。状态函 数包括
y
t
y_{t}
yt 时刻和
y
t
−
1
y_{t-1}
yt−1 时刻和
x
1
:
T
x_{1: T}
x1:T 之间的影响,转移函数包括
y
t
,
y
t
−
1
y_{t}, y_{t-1}
yt,yt−1 时刻共同和
x
1
:
T
x_{1: T}
x1:T 之间的影响。 公式表达如下所示:
F
t
(
y
t
−
1
,
y
t
,
x
1
:
T
)
=
Δ
y
t
−
1
,
x
1
:
T
+
Δ
y
t
,
x
1
:
T
⏟
State Function
+
Δ
y
t
−
1
,
y
t
,
x
1
:
T
⏟
Transfer Function
F_{t}\left(y_{t-1}, y_{t}, x_{1: T}\right)=\underbrace{\Delta_{y_{t-1}, x_{1: T}}+\Delta_{y_{t}, x_{1: T}}}_{\text {State Function }}+\underbrace{\Delta_{y_{t-1}, y_{t}, x_{1: T}}}_{\text {Transfer Function }}
Ft(yt−1,yt,x1:T)=State Function
Δyt−1,x1:T+Δyt,x1:T+Transfer Function
Δyt−1,yt,x1:T
这里再次提醒一下,我们代入到标注问题中,
x
1
:
T
x_{1: T}
x1:T 为“小明是中国人。”这是我们观测到的值,
y
t
−
1
y_{t-1}
yt−1 和
y
t
y_{t}
yt 代表隐变量为词语的词性,名词,动词和形容词等。状态函数中
y
t
y_{t}
yt 对
t
t
t 时刻的影响已经包含了
y
t
−
1
y_{t-1}
yt−1 时刻的影响,我们没有必要再计算两遍,所以在状态函数中我们可以忽略掉
y
t
−
1
y_{t-1}
yt−1 。所以,最终结果为;
F
t
(
y
t
−
1
,
y
t
,
x
1
:
T
)
=
Δ
y
t
,
x
1
:
T
+
Δ
y
t
−
1
,
y
t
,
x
1
:
T
F_{t}\left(y_{t-1}, y_{t}, x_{1: T}\right)=\Delta_{y_{t}, x_{1: T}}+\Delta_{y_{t-1}, y_{t}, x_{1: T}}
Ft(yt−1,yt,x1:T)=Δyt,x1:T+Δyt−1,yt,x1:T
我们用一个函数来表达
△
y
t
,
x
1
:
T
\triangle_{y_{t}, x_{1:T}}
△yt,x1:T
Δ
y
t
,
x
1
:
T
=
∑
l
=
1
L
η
l
g
l
(
y
t
,
x
1
:
T
)
\Delta_{y_{t}, x_{1: T}}=\sum_{l=1}^{L} \eta_{l} g_{l}\left(y_{t}, x_{1: T}\right)
Δyt,x1:T=l=1∑Lηlgl(yt,x1:T)
其中
f
k
f_{k}
fk 为特征函数,指示函数,满足某个状态为
1
,
1,
1, 比如:
f
k
(
y
t
−
1
=
noun,
y
t
=
verb,
x
1
:
T
)
=
1
f
k
(
y
t
−
1
=
noun,
y
t
=
auxiliary
,
x
1
:
T
)
=
0
\begin{array}{c} f_{k}\left(y_{t-1}=\text { noun, } y_{t}=\text { verb, } x_{1: T}\right)=1 \\ f_{k}\left(y_{t-1}=\text { noun, } y_{t}=\text { auxiliary }, x_{1: T}\right)=0 \end{array}
fk(yt−1= noun, yt= verb, x1:T)=1fk(yt−1= noun, yt= auxiliary ,x1:T)=0
而
λ
k
\lambda_{k}
λk 则是我们需要学习的参数,利用数据通过 Learning 来得到。同样,我们可以用类似的思路来定义
Δ
y
t
−
1
,
y
t
,
x
1
:
T
\Delta_{y_{t-1}, y_{t}, x_{1: T}}
Δyt−1,yt,x1:T
Δ
y
t
−
1
,
y
t
,
x
1
:
T
=
∑
k
=
1
K
λ
k
f
k
(
y
t
−
1
,
y
t
,
x
1
:
T
)
\Delta_{y_{t-1}, y_{t}, x_{1: T}}=\sum_{k=1}^{K} \lambda_{k} f_{k}\left(y_{t-1}, y_{t}, x_{1: T}\right)
Δyt−1,yt,x1:T=k=1∑Kλkfk(yt−1,yt,x1:T)
这里的
f
k
f_{k}
fk 和
g
l
g_{l}
gl 都是给定的特征函数,
λ
k
\lambda_{k}
λk 和
η
l
\eta_{l}
ηl 都是需要学习的参数。所以,我们最后就得到了 CRF条件概率的表达形式为:
P
(
Y
∣
X
)
=
1
Z
exp
{
∑
t
=
1
T
[
∑
k
=
1
K
λ
k
f
k
(
y
t
−
1
,
y
t
,
x
1
:
T
)
+
∑
l
=
1
L
η
l
g
l
(
y
t
,
x
1
:
T
)
]
}
P(Y | X)=\frac{1}{Z} \exp \left\{\sum_{t=1}^{T}\left[\sum_{k=1}^{K} \lambda_{k} f_{k}\left(y_{t-1}, y_{t}, x_{1: T}\right)+\sum_{l=1}^{L} \eta_{l} g_{l}\left(y_{t}, x_{1: T}\right)\right]\right\}
P(Y∣X)=Z1exp{t=1∑T[k=1∑Kλkfk(yt−1,yt,x1:T)+l=1∑Lηlgl(yt,x1:T)]}
这就是CRF 的概率密度函数,实际上这个得出的过程是比较Intuitive 的,可能大家有点不太好理解。那么,我们来做一个类比,对于学习机器的同学来说,肯定对神经网络非常的熟悉。对于图像识别问题,我们输入一张图片,通过一个网络,得到一个结果。对于这个网络,我们选择怎样的网络结构,是前馈神经网络,CNN 还是RNN,什么样的激活函数,和怎样的激活函数都是一个结构,然后根据我们的结果使用梯度下降来训练得到相应的参数。实际上这里和神经网络的结构是一个的,就像神经网络为什么设置成那个样子,实际上也不能说的很明白,就是这样的结构会make sence 而已。在这里也一样,我的设计出的概率密度函数形式,就是感觉符合CRF 的网络结构,并且会make sence,当然小伙伴有更好的想法,也可以改进这个参数结果。得到结构后,我们就可以通过训练来求得参数了。
5.3 小结
在这一小节中,我们比较intuitive 的得到了CRF 概率密度函数的参数形式,和神经网络一样,这都是我们为了实现目的根据概率图的结构而设计出的一种会make sence 的结构。结构确定之后,通过对数据的训练来求得参数,那么CRF 模型就建立完成了。
6 概率密度函数的向量形式
上一节中,我们讲到了可以将每一个最大团分成两个部分,即为状态函数和转移函数。
P
(
Y
∣
X
)
=
1
Z
exp
∑
t
=
1
T
[
Δ
transfer function
+
Δ
state function
]
=
1
Z
exp
{
∑
t
=
1
T
[
∑
k
=
1
K
λ
k
f
k
(
y
t
−
1
,
y
t
,
x
1
:
T
)
+
∑
l
=
1
L
η
l
g
l
(
y
t
,
x
1
:
T
)
]
}
\begin{aligned} P(Y | X) &=\frac{1}{Z} \exp \sum_{t=1}^{T}\left[\Delta_{\text {transfer function }}+\Delta_{\text {state function }}\right] \\ &=\frac{1}{Z} \exp \left\{\sum_{t=1}^{T}\left[\sum_{k=1}^{K} \lambda_{k} f_{k}\left(y_{t-1}, y_{t}, x_{1: T}\right)+\sum_{l=1}^{L} \eta_{l} g_{l}\left(y_{t}, x_{1: T}\right)\right]\right\} \end{aligned}
P(Y∣X)=Z1expt=1∑T[Δtransfer function +Δstate function ]=Z1exp{t=1∑T[k=1∑Kλkfk(yt−1,yt,x1:T)+l=1∑Lηlgl(yt,x1:T)]}
这里的 K 和 L 分别是多少呢?加入对于
y
t
∈
S
=
{
noun, verb, aux
,
⋯
}
y_{t} \in S=\{\text {noun, verb, aux}, \cdots\}
yt∈S={noun, verb, aux,⋯} 一共有
S
S
S 个状态。我们看看转移图像:
所以,我们看到 有
∣
S
∣
2
|S|^2
∣S∣2 种可能,所以
K
≤
∣
S
∣
2
\mathrm{K} \leq|S|^{2}
K≤∣S∣2 。对于归一化因子
Z
Z
Z 而言,肯定是和
y
y
y 没有关系的,归一化因子是对 y 进行了积分的。
6.1 概率密度函数的向量形式化简
所以,概率模型被我们写为:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
λ
,
η
)
exp
{
∑
t
=
1
T
[
∑
k
=
1
K
λ
k
f
k
(
y
t
−
1
,
y
t
,
x
1
:
T
)
+
∑
l
=
1
L
η
l
g
l
(
y
t
,
x
1
:
T
)
]
}
P(Y=y | X=x)=\frac{1}{Z(x, \lambda, \eta)} \exp \left\{\sum_{t=1}^{T}\left[\sum_{k=1}^{K} \lambda_{k} f_{k}\left(y_{t-1}, y_{t}, x_{1: T}\right)+\sum_{l=1}^{L} \eta_{l} g_{l}\left(y_{t}, x_{1: T}\right)\right]\right\}
P(Y=y∣X=x)=Z(x,λ,η)1exp{t=1∑T[k=1∑Kλkfk(yt−1,yt,x1:T)+l=1∑Lηlgl(yt,x1:T)]}
令:
y
=
[
y
1
y
2
⋮
y
k
]
,
x
=
[
x
1
x
2
⋮
x
k
]
,
λ
=
[
λ
1
λ
2
⋮
λ
k
]
,
η
=
[
η
1
η
2
⋮
η
l
]
,
f
=
[
f
1
f
2
⋮
f
k
]
=
f
(
y
t
−
1
,
y
t
,
x
1
:
T
)
,
g
=
[
g
1
g
2
⋮
g
l
]
=
g
(
y
t
,
x
1
:
T
)
y=\left[\begin{array}{c} y_{1} \\ y_{2} \\ \vdots \\ y_{k} \end{array}\right], x=\left[\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{k} \end{array}\right], \lambda=\left[\begin{array}{c} \lambda_{1} \\ \lambda_{2} \\ \vdots \\ \lambda_{k} \end{array}\right], \eta=\left[\begin{array}{c} \eta_{1} \\ \eta_{2} \\ \vdots \\ \eta_{l} \end{array}\right], f=\left[\begin{array}{c} f_{1} \\ f_{2} \\ \vdots \\ f_{k} \end{array}\right]=f\left(y_{t-1}, y_{t}, x_{1: T}\right), g=\left[\begin{array}{c} g_{1} \\ g_{2} \\ \vdots \\ g_{l} \end{array}\right]=g\left(y_{t}, x_{1: T}\right)
y=⎣⎢⎢⎢⎡y1y2⋮yk⎦⎥⎥⎥⎤,x=⎣⎢⎢⎢⎡x1x2⋮xk⎦⎥⎥⎥⎤,λ=⎣⎢⎢⎢⎡λ1λ2⋮λk⎦⎥⎥⎥⎤,η=⎣⎢⎢⎢⎡η1η2⋮ηl⎦⎥⎥⎥⎤,f=⎣⎢⎢⎢⎡f1f2⋮fk⎦⎥⎥⎥⎤=f(yt−1,yt,x1:T),g=⎣⎢⎢⎢⎡g1g2⋮gl⎦⎥⎥⎥⎤=g(yt,x1:T)
根据向量的内积方法,我们可以将
∑
k
=
1
K
λ
k
f
k
(
y
t
−
1
,
y
t
,
x
1
:
T
)
\sum_{k=1}^{K} \lambda_{k} f_{k}\left(y_{t-1}, y_{t}, x_{1: T}\right)
∑k=1Kλkfk(yt−1,yt,x1:T) 改写为
λ
T
f
(
y
t
−
1
,
y
t
,
x
1
:
T
)
,
∑
l
=
1
L
η
l
g
l
(
y
t
,
x
1
:
T
)
\lambda^{T} f\left(y_{t-1}, y_{t}, x_{1: T}\right), \sum_{l=1}^{L} \eta_{l} g_{l}\left(y_{t}, x_{1: T}\right)
λTf(yt−1,yt,x1:T),∑l=1Lηlgl(yt,x1:T)
改写为
η
T
g
(
y
t
,
x
1
:
T
)
\eta^{T} g\left(y_{t}, x_{1: T}\right)
ηTg(yt,x1:T) 。所以,原式等于:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
λ
,
η
)
exp
{
∑
t
=
1
T
[
λ
T
f
(
y
t
−
1
,
y
t
,
x
1.
T
)
+
η
T
g
(
y
t
,
x
1
:
T
)
)
]
}
=
1
Z
(
x
,
λ
,
η
)
exp
{
[
λ
T
∑
t
=
1
T
f
(
y
t
−
1
,
y
t
,
x
1
:
T
)
+
η
T
∑
t
=
1
T
g
(
y
t
,
x
1
:
T
)
)
]
}
\begin{aligned} P(Y=y | X=x) &\left.=\frac{1}{Z(x, \lambda, \eta)} \exp \left\{\sum_{t=1}^{T}\left[\lambda^{T} f\left(y_{t-1}, y_{t}, x_{1 . T}\right)+\eta^{T} g\left(y_{t}, x_{1: T}\right)\right)\right]\right\} \\ &\left.=\frac{1}{Z(x, \lambda, \eta)} \exp \left\{\left[\lambda^{T} \sum_{t=1}^{T} f\left(y_{t-1}, y_{t}, x_{1: T}\right)+\eta^{T} \sum_{t=1}^{T} g\left(y_{t}, x_{1: T}\right)\right)\right]\right\} \end{aligned}
P(Y=y∣X=x)=Z(x,λ,η)1exp{t=1∑T[λTf(yt−1,yt,x1.T)+ηTg(yt,x1:T))]}=Z(x,λ,η)1exp{[λTt=1∑Tf(yt−1,yt,x1:T)+ηTt=1∑Tg(yt,x1:T))]}
我们现在看着还是觉得太复杂还想进行下一步化简,这里的
λ
\lambda
λ 和
∑
t
=
1
T
f
(
y
t
−
1
,
y
t
,
x
1
:
T
)
\sum_{t=1}^{T} f\left(y_{t-1}, y_{t}, x_{1: T}\right)
∑t=1Tf(yt−1,yt,x1:T) 都是
k
×
1
k \times 1
k×1 的 向量,
η
\eta
η 和
∑
t
=
1
T
g
(
y
t
,
x
1
:
T
)
\sum_{t=1}^{T} g\left(y_{t}, x_{1: T}\right)
∑t=1Tg(yt,x1:T) 都是
l
×
1
l \times 1
l×1 的向量,相加是在同一个维度相加,并不会破坏矩阵的尺寸。所 以我们可以进行合并。于是令:
θ
=
[
λ
η
]
(
k
+
l
)
×
1
,
H
=
[
∑
t
=
1
T
f
(
y
t
−
1
,
y
t
,
x
1
:
T
)
∑
t
=
1
T
g
(
y
t
,
x
1
:
T
)
)
]
(
k
+
l
)
×
1
\theta=\left[\begin{array}{l} \lambda \\ \eta \end{array}\right]_{(k+l) \times 1}, \quad H=\left[\begin{array}{c} \sum_{t=1}^{T} f\left(y_{t-1}, y_{t}, x_{1: T}\right) \\ \left.\sum_{t=1}^{T} g\left(y_{t}, x_{1: T}\right)\right) \end{array}\right]_{(k+l) \times 1}
θ=[λη](k+l)×1,H=[∑t=1Tf(yt−1,yt,x1:T)∑t=1Tg(yt,x1:T))](k+l)×1
所以,我们得到的形式为:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
θ
)
exp
{
θ
T
⋅
H
(
y
t
,
y
t
−
1
,
x
1
:
T
)
}
P(Y=y | X=x)=\frac{1}{Z(x, \theta)} \exp \left\{\theta^{T} \cdot H\left(y_{t}, y_{t-1}, x_{1: T}\right)\right\}
P(Y=y∣X=x)=Z(x,θ)1exp{θT⋅H(yt,yt−1,x1:T)}
H
(
y
t
,
y
t
−
1
,
x
1
:
T
)
H\left(y_{t}, y_{t-1}, x_{1: T}\right)
H(yt,yt−1,x1:T) 表示
H
H
H 矩阵和
y
t
,
y
t
−
1
,
x
1
:
T
y_{t}, y_{t-1}, x_{1: T}
yt,yt−1,x1:T 有关。我们可以将
θ
T
⋅
H
(
y
t
,
y
t
−
1
,
x
1
:
T
)
\theta^{T} \cdot H\left(y_{t}, y_{t-1}, x_{1: T}\right)
θT⋅H(yt,yt−1,x1:T)写成向量内积的形式,最终得到最后的形式为:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
θ
)
exp
⟨
θ
,
H
⟩
P(Y=y | X=x)=\frac{1}{Z(x, \theta)} \exp \langle\theta, H\rangle
P(Y=y∣X=x)=Z(x,θ)1exp⟨θ,H⟩
6.2 小结
我们最终得到了概率密度函数的向量表达形式为:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
θ
)
exp
⟨
θ
,
H
⟩
P(Y=y | X=x)=\frac{1}{Z(x, \theta)} \exp \langle\theta, H\rangle
P(Y=y∣X=x)=Z(x,θ)1exp⟨θ,H⟩
实际上这章非常的简单,都是一些很简单的数学变形而已。我们这样做的目的是什么呢?很简单就是 去掉
∑
\sum
∑符号,在 learning 和 Inference 问题中,我们可能遇到大量的求导,把这个
∑
\sum
∑ 去掉是为了简 化运算,带上了
∑
\sum
∑不方便进行求导运算。
7 CRF 模型要解决的问题
上一节我们用向量形式来进行表达,为 Learning 和 Inference 问题做好了准备。所谓机器学习中 需要解决的问题,大致被我们分为两类,通过 learning 进行参数估计来得到模型,并利用求得的模型对未知的数据 进行 Inference。
7.1 Learning
也就是 Parameter estimation,利用数据来对模型中的参数进行求解。这么任务可以被描述为:给定一个数据集
{
(
x
(
i
)
,
y
(
i
)
)
}
i
=
1
N
,
\left\{\left(x^{(i)}, y^{(i)}\right)\right\}_{i=1}^{N},
{(x(i),y(i))}i=1N, 其中
x
,
y
∈
R
T
x, y \in \mathbb{R}^{T}
x,y∈RT 都是
T
\mathrm{T}
T 维的。
我们可以来举一个简单的例子,比如“小明爱中国”,这个数据的x 由三个部分组成,分别是“小明”,“爱”和“中国”组成的,标注y 则是“名词”,“动词”,“名词”组成的。在我们的CRF 概率图中,不是一个节点是一个样本,而是所有的y 节点合在一起(一个句子)才是一个样本,这里需要强调一下以防同学弄混。所有,我们最终的求解目标为:
θ
^
=
a
r
g
m
a
x
∏
t
=
1
T
P
(
y
i
∣
x
i
,
)
\hat{\theta}=arg max\prod_{t=1}^{T}P\left(y_{i}|x_{i},\right)
θ^=argmaxt=1∏TP(yi∣xi,)
7.2 Inference
Inference 通常可以被我们分为 三类问题,即
- Marginal Probability(边缘概率)
- Conditional Probability (条件概率)
- MAP Inference:(Decoding问题)
而CRF是判别模型,所以我们一般不谈Conditional Probability,这个一般是针对生成模型中才会用到的,因为求联合概率,我们通常是使用贝叶斯公式来进行转换的。所以,我 们这里不讨论CRF 的Conditional Probability 的问题。
7.2.1 Marginal Probability
在概率图模型中,我们的建模对象往往都是 join distribution。比如有一个建模对象为
P
(
X
)
,
X
=
P(X), X=
P(X),X=
(
x
1
,
x
2
,
⋯
,
x
p
)
T
\left(x_{1}, x_{2}, \cdots, x_{p}\right)^{T}
(x1,x2,⋯,xp)T 。我们要求
P
(
x
1
)
,
P\left(x_{1}\right),
P(x1), 往往都是先求
P
(
X
)
,
P(X),
P(X), 然后再对其他变量进行积分米求得
P
(
x
1
)
P\left(x_{1}\right)
P(x1)
举例,词性标注问题,对于 P
(
y
1
=
verb
∣
X
)
,
\left(y_{1}=\operatorname{verb} | X\right),
(y1=verb∣X), 也就是给定观察序列,求第
i
i
i 个词是动词的概率。
7.2.2 Conditional Probability
常用在生成模型,而CRF是判别模型,因此,不过多研究。
7.2.3 MAP Inference: Decoding
Decoding 问题,也就是在给定观察序列的情况下,寻找最大概率可能出现的隐概率状态序列。求 解的是:
Y
^
=
arg
Y
=
y
1
,
⋯
,
y
t
P
(
Y
∣
X
)
\hat{Y}=\arg _{Y=y_{1}, \cdots, y_{t}} P(Y | X)
Y^=argY=y1,⋯,ytP(Y∣X)
8 Marginal Probability Calculate
下面我们主要针对 CRF 的三个问题进行求解,分别是 1. Marginal Probability; 2. Parameter Estimation; 3. Decoding Problem
在描述这个问题之前,先假设参数是已知的,如果参数是未知的,那么就假设参数
θ
\theta
θ 是一个常量。 我们的求解目标是,给定
P
(
Y
=
y
∣
X
=
x
)
P(Y=y | X=x)
P(Y=y∣X=x) 的情况下,求
P
(
y
t
=
i
∣
x
)
P\left(y_{t}=i | x\right)
P(yt=i∣x) 的概率,这里再强调一下,每一个
{
x
,
y
}
\{x, y\}
{x,y} 都是一个时序的样本,比如一个句子,每个样本可以根据时问分成很多段。
8.1 直接进行求解
概率密度函数被定义为:
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
∏
t
=
1
T
ϕ
t
(
y
t
−
1
,
y
t
,
x
)
P(Y=y | X=x)=\frac{1}{Z} \prod_{t=1}^{T} \phi_{t}\left(y_{t-1}, y_{t}, x\right)
P(Y=y∣X=x)=Z1t=1∏Tϕt(yt−1,yt,x)
实际上就等于最大团的势函数之积。我们要求某个时刻在已知所有的观察变量的情况下隐变量
y
t
=
i
y_{t}=i
yt=i 的概率,实际上就是将
P
(
Y
=
y
∣
X
=
x
)
P(Y=y | X=x)
P(Y=y∣X=x) 这个联合概率分布在
y
y
y 的各个维度上积分,就可以得到
y
t
y_{t}
yt 时 刻的条件概率了,而这里都是离散变量,那么就是求和。这个思路和想法很简单,我们来看看它怎么
样?
P
(
y
t
=
i
∣
x
)
=
∑
y
1
,
⋯
,
y
t
−
1
,
y
t
+
1
,
⋯
,
y
T
P
(
y
∣
x
)
=
∑
y
1
:
t
−
1
∑
y
t
+
1
:
T
1
Z
∏
t
′
=
1
T
ϕ
t
′
(
y
t
′
−
1
,
y
t
′
,
x
)
P\left(y_{t}=i | x\right)=\sum_{y_{1}, \cdots, y_{t-1}, y_{t+1}, \cdots, y_{T}} P(y | x)=\sum_{y_{1: t-1}} \sum_{y_{t+1: T}} \frac{1}{Z} \prod_{t^{\prime}=1}^{T} \phi_{t^{\prime}}\left(y_{t^{\prime}-1}, y_{t^{\prime}}, x\right)
P(yt=i∣x)=y1,⋯,yt−1,yt+1,⋯,yT∑P(y∣x)=y1:t−1∑yt+1:T∑Z1t′=1∏Tϕt′(yt′−1,yt′,x)
由于我们求的是一个概率分布,每一个
y
t
∈
S
,
y_{t} \in \mathcal{S},
yt∈S, 我们一共要对
T
−
1
T-1
T−1 个
y
y
y 进行积分,每一个
y
y
y 有
∣
S
∣
|S|
∣S∣ 种可能,所以在这个求积分的过程中,算法的复杂度是 O(
∣
S
∣
T
)
\left.|S|^{T}\right)
∣S∣T) 的。大家都是学过高等数学的,如果 你理解不了,这就是一个 T-1 重积分,T-1重积分是 T-1 维空间中的体积,因为所有势函数的乘积, 所以每次都需要考虑概率图中所有的依赖关系,计算需要进行 |S|
T
^{T}
T 次划分。而在求势函数的积的过程 中,需要进行 T 次运算,所以这个算法最后的复杂度是
O
(
T
⋅
∣
S
∣
T
)
O(T \cdot |S| \left.^{T}\right)
O(T⋅∣S∣T) 。这个算法的复杂度实在是太高了, 我们根本就没有办法求解,这个想法确实很简单,但是很可惜是 intractable 的。 那么我们有没有什么办法来简化运算呢?
8.2 Variables Elimination 算法复杂度降低分析
这个算法我们之前在HMM 中是讲过的,在这个问题中我们怎么求解呢?上述直接进行求解的办法,因为每一次积分都是对所有的势函数乘积进行积分,所以需要考虑所有的状态,算法复杂度是 O ( ∣ S ∣ T ) , \mathcal{O}\left(|S|^{T}\right), O(∣S∣T), 这是暴力求解的思路。
我们发现,在对某一个时刻的变量 y i y_{i} yi 进行求和的时候,和很多的势函数都没有关系。比如在 t = 5 t=5 t=5 时刻,求和只和势函数 ϕ ( y 4 , y 5 , x ) \phi\left(y_{4}, y_{5}, x\right) ϕ(y4,y5,x) 有关。所以,我们可以利用动态规划的思路,将连加号分解开,移 到后面后具体相关的势函数联系起来,这样每次积分时只考虑和势函数相关的变量,不需要考虑所有 的变量。设 m 为单个条伏概率的最大变量数量,我们化简后,只有依赖最多的这个节点会被考虑 次,其他的都会少于 m 次,所以算法复杂度被就降低到了 O ( ∣ S ∣ m ) , \left(|S|^{m}\right), (∣S∣m), 而 m < < T m<<T m<<T 。这就是我们思路的 大致来源。
8.3 Variables Elimination 算法运算过程
由于在第
t
t
t 时刻,
y
t
y_{t}
yt 的状态是已知的。所以,我们将序列从
y
t
y_{t}
yt 时刻分开,分成两个部分,如下图 所示:
⋮
i
\vdots i
⋮i
P
(
y
t
=
i
∣
x
)
=
∑
y
1
:
t
−
1
∑
y
t
+
1
:
T
1
Z
∏
t
′
=
1
T
ϕ
t
′
(
y
t
′
−
1
,
y
t
′
,
x
)
=
1
Z
Δ
l
o
f
t
⋅
Δ
r
i
g
h
t
P\left(y_{t}=i | x\right)=\sum_{y_{1: t-1}} \sum_{y_{t+1: T}} \frac{1}{Z} \prod_{t^{\prime}=1}^{T} \phi_{t^{\prime}}\left(y_{t^{\prime}-1}, y_{t^{\prime}}, x\right)=\frac{1}{Z} \Delta_{\mathrm{loft}} \cdot \Delta_{\mathrm{right}}
P(yt=i∣x)=y1:t−1∑yt+1:T∑Z1t′=1∏Tϕt′(yt′−1,yt′,x)=Z1Δloft⋅Δright
其中:
Δ
l
o
t
t
=
∑
y
1
:
t
−
1
ϕ
1
(
y
0
,
y
1
,
x
)
ϕ
2
(
y
1
,
y
2
,
x
)
⋯
ϕ
t
−
1
(
y
t
−
2
,
y
t
−
1
,
x
)
ϕ
t
(
y
t
−
1
,
y
t
=
i
,
x
)
Δ
r
i
g
h
t
=
∑
y
t
+
1
:
T
ϕ
t
+
1
(
y
t
=
i
,
y
t
+
1
,
x
)
ϕ
t
+
2
(
y
t
+
1
,
y
t
+
2
,
x
)
⋯
ϕ
T
(
y
T
−
1
,
y
T
,
x
)
\begin{array}{l} \Delta_{\mathrm{lott}}=\sum_{y_{1: t-1}} \phi_{1}\left(y_{0}, y_{1}, x\right) \phi_{2}\left(y_{1}, y_{2}, x\right) \cdots \phi_{t-1}\left(y_{t-2}, y_{t-1}, x\right) \phi_{t}\left(y_{t-1}, y_{t}=i, x\right) \\ \Delta_{\mathrm{right}}=\sum_{y_{t+1: T}} \phi_{t+1}\left(y_{t}=i, y_{t+1}, x\right) \phi_{t+2}\left(y_{t+1}, y_{t+2}, x\right) \cdots \phi_{T}\left(y_{T-1}, y_{T}, x\right) \end{array}
Δlott=∑y1:t−1ϕ1(y0,y1,x)ϕ2(y1,y2,x)⋯ϕt−1(yt−2,yt−1,x)ϕt(yt−1,yt=i,x)Δright=∑yt+1:Tϕt+1(yt=i,yt+1,x)ϕt+2(yt+1,yt+2,x)⋯ϕT(yT−1,yT,x)
下一步目标就是想怎么去拆分了,首先来看看每一个势函数究竟和哪些变量有关,示意图如下所示:
变量消除的过程就是积分的过程,我们需要将累加的变量进行分解,让求和过程只和相关的势函 数进行求和,这样分解避免多个势函数混着一起积分,来减少运算过程,因为这样每次积分我们都只 要考虑单个变量的依赖变量的关系。根据上图所示的,关系依赖图,我们进行如下划分:
Δ
left
=
∑
y
1
:
t
−
1
ϕ
1
(
y
0
,
y
1
,
x
)
ϕ
2
(
y
1
,
y
2
,
x
)
⋯
ϕ
t
−
1
(
y
t
−
2
,
y
t
−
1
,
x
)
ϕ
t
(
y
t
−
1
,
y
t
=
i
,
x
)
=
∑
y
t
−
1
ϕ
t
(
y
t
−
1
,
y
t
=
i
,
x
)
(
∑
y
t
−
2
ϕ
t
−
1
(
y
t
−
2
,
y
t
−
1
,
x
)
(
⋯
(
∑
y
1
ϕ
2
(
y
1
,
y
2
,
x
)
(
∑
y
0
ϕ
1
(
y
0
,
y
1
,
x
)
)
)
)
)
\begin{aligned} \Delta_{\text {left }} &=\sum_{y_{1: t-1}} \phi_{1}\left(y_{0}, y_{1}, x\right) \phi_{2}\left(y_{1}, y_{2}, x\right) \cdots \phi_{t-1}\left(y_{t-2}, y_{t-1}, x\right) \phi_{t}\left(y_{t-1}, y_{t}=i, x\right) \\ &=\sum_{y_{t-1}} \phi_{t}\left(y_{t-1}, y_{t}=i, x\right)\left(\sum_{y_{t-2}} \phi_{t-1}\left(y_{t-2}, y_{t-1}, x\right)\left(\cdots\left(\sum_{y_{1}} \phi_{2}\left(y_{1}, y_{2}, x\right)\left(\sum_{y_{0}} \phi_{1}\left(y_{0}, y_{1}, x\right)\right)\right)\right)\right) \end{aligned}
Δleft =y1:t−1∑ϕ1(y0,y1,x)ϕ2(y1,y2,x)⋯ϕt−1(yt−2,yt−1,x)ϕt(yt−1,yt=i,x)=yt−1∑ϕt(yt−1,yt=i,x)(yt−2∑ϕt−1(yt−2,yt−1,x)(⋯(y1∑ϕ2(y1,y2,x)(y0∑ϕ1(y0,y1,x)))))
那么这样我们手动的把所有的
∑
\sum
∑ 连加符号,一个个的嵌入到该去的地方,计算复杂度过高的问题已经解决了。实际上写成上式这样的样子就可以了。我们为了进一步简化表达作如下操作。 我们令:
α
t
(
i
)
=
∑
y
t
−
1
ϕ
t
(
y
t
−
1
,
y
t
=
i
,
x
)
(
∑
y
t
−
2
ϕ
t
−
1
(
y
t
−
2
,
y
t
−
1
,
x
)
(
⋯
(
∑
y
1
ϕ
2
(
y
1
,
y
2
,
x
)
(
∑
y
0
ϕ
1
(
y
0
,
y
1
,
x
)
)
)
)
)
α
t
−
1
(
j
)
=
∑
y
t
−
2
ϕ
t
−
1
(
y
t
−
2
,
y
t
−
1
=
j
,
x
)
(
⋯
(
∑
y
1
ϕ
2
(
y
1
,
y
2
,
x
)
(
∑
y
0
ϕ
1
(
y
0
,
y
1
,
x
)
)
)
)
\begin{array}{c} \alpha_{t}(i)=\sum_{y_{t-1}} \phi_{t}\left(y_{t-1}, y_{t}=i, x\right)\left(\sum_{y_{t-2}} \phi_{t-1}\left(y_{t-2}, y_{t-1}, x\right)\left(\cdots\left(\sum_{y_{1}} \phi_{2}\left(y_{1}, y_{2}, x\right)\left(\sum_{y_{0}} \phi_{1}\left(y_{0}, y_{1}, x\right)\right)\right)\right)\right) \\ \alpha_{t-1}(j)=\sum_{y_{t-2}} \phi_{t-1}\left(y_{t-2}, y_{t-1}=j, x\right)\left(\cdots\left(\sum_{y_{1}} \phi_{2}\left(y_{1}, y_{2}, x\right)\left(\sum_{y_{0}} \phi_{1}\left(y_{0}, y_{1}, x\right)\right)\right)\right) \end{array}
αt(i)=∑yt−1ϕt(yt−1,yt=i,x)(∑yt−2ϕt−1(yt−2,yt−1,x)(⋯(∑y1ϕ2(y1,y2,x)(∑y0ϕ1(y0,y1,x)))))αt−1(j)=∑yt−2ϕt−1(yt−2,yt−1=j,x)(⋯(∑y1ϕ2(y1,y2,x)(∑y0ϕ1(y0,y1,x))))
那么,很显然我们就可以得出
α
\alpha
α 函数之间的表达式:
α
t
(
i
)
=
∑
y
t
−
1
ϕ
t
(
y
t
−
1
=
j
,
y
t
=
i
,
x
)
α
t
−
1
(
j
)
\alpha_{t}(i)=\sum_{y_{t-1}} \phi_{t}\left(y_{t-1}=j, y_{t}=i, x\right) \alpha_{t-1}(j)
αt(i)=yt−1∑ϕt(yt−1=j,yt=i,x)αt−1(j)
因为,
y
t
−
1
=
j
,
y_{t-1}=j,
yt−1=j,
j
j
j共有S个状态,所以我们可以得到等价表达方式:
α
t
(
i
)
=
∑
j
∈
S
ϕ
t
(
y
t
−
1
=
j
,
y
t
=
i
,
x
)
α
t
−
1
(
j
)
\alpha_{t}(i)=\sum_{j \in S} \phi_{t}\left(y_{t-1}=j, y_{t}=i, x\right) \alpha_{t-1}(j)
αt(i)=j∈S∑ϕt(yt−1=j,yt=i,x)αt−1(j)
实际上推导到了这里就很简单了,那么
△
left
=
α
t
(
i
)
\triangle_{\text {left }}=\alpha_{t}(i)
△left =αt(i) 。按照同样的方法进行变量提取化简,我们可以得到一样的结论:
Δ
right
=
∑
y
t
+
1
:
T
ϕ
t
+
1
(
y
t
=
i
,
y
t
+
1
,
x
)
ϕ
t
+
2
(
y
t
+
1
,
y
t
+
2
,
x
)
⋯
ϕ
T
(
y
T
−
1
,
y
T
,
x
)
=
∑
y
T
ϕ
T
(
y
T
−
1
,
y
T
,
x
)
(
∑
y
T
−
1
ϕ
T
−
1
(
y
T
−
2
,
y
T
−
1
,
x
)
(
⋯
(
∑
y
t
+
2
ϕ
2
(
y
t
+
1
,
y
t
+
2
,
x
)
(
∑
y
t
+
1
ϕ
1
(
y
t
=
i
,
y
t
+
1
,
x
)
)
)
)
)
=
β
t
(
i
)
\begin{aligned} \Delta_{\text {right }} &=\sum_{y_{t+1: T}} \phi_{t+1}\left(y_{t}=i, y_{t+1}, x\right) \phi_{t+2}\left(y_{t+1}, y_{t+2}, x\right) \cdots \phi_{T}\left(y_{T-1}, y_{T}, x\right) \\ &=\sum_{y_{T}} \phi_{T}\left(y_{T-1}, y_{T}, x\right)\left(\sum_{y_{T-1}} \phi_{T-1}\left(y_{T-2}, y_{T-1}, x\right)\left(\cdots\left(\sum_{y_{t+2}} \phi_{2}\left(y_{t+1}, y_{t+2}, x\right)\left(\sum_{y_{t+1}} \phi_{1}\left(y_{t}=i, y_{t+1}, x\right)\right)\right)\right)\right) \\ &=\beta_{t}(i) \end{aligned}
Δright =yt+1:T∑ϕt+1(yt=i,yt+1,x)ϕt+2(yt+1,yt+2,x)⋯ϕT(yT−1,yT,x)=yT∑ϕT(yT−1,yT,x)(yT−1∑ϕT−1(yT−2,yT−1,x)(⋯(yt+2∑ϕ2(yt+1,yt+2,x)(yt+1∑ϕ1(yt=i,yt+1,x)))))=βt(i)
所以,最终得到的最简形式为:
P
(
y
t
=
i
∣
x
)
=
1
Z
α
t
(
i
)
⋅
β
t
(
i
)
P\left(y_{t}=i | x\right)=\frac{1}{Z} \alpha_{t}(i) \cdot \beta_{t}(i)
P(yt=i∣x)=Z1αt(i)⋅βt(i)
8.4 小结
本小节我们探讨了给定 P ( Y = y ∣ X = x ) P(Y=y | X=x) P(Y=y∣X=x) 的情况下,求 P ( y t = i ∣ x ) P\left(y_{t}=i | x\right) P(yt=i∣x) 的概率, x x x 和 y y y 都是时序序列。直接采用积分求和的方法算法复杂度为 O(|S| T ^{T} T ) 的太高了,利用变量消元的方法,准确的分离变量和待求和的维度。成功的将算法复杂度从 O ( ∣ S ∣ T ) O(|S|^T ) O(∣S∣T) 降到 O ( ∣ S ∣ m ) O(|S|^m) O(∣S∣m),且m 为单个条件概率的最大变量数量, m < < T m << T m<<T。
9 CRF Learning Problem
在这个问题中,问题具体就是用极大似然估计来求CRF 模型的参数,
θ
^
=
arg
max
θ
∏
i
=
1
N
P
(
y
(
i
)
∣
x
(
i
)
)
\hat{\theta}=\arg \max _{\theta} \prod_{i=1}^{N} P\left(y^{(i)} | x^{(i)}\right)
θ^=argθmaxi=1∏NP(y(i)∣x(i))
N
N
N 为训练样本的数量。而
θ
\theta
θ 实际上包含两个部分,即为
λ
,
η
,
\lambda, \eta,
λ,η, 所以,目标函数为:
λ
^
,
η
^
=
arg
max
λ
,
η
∏
i
=
1
N
P
(
y
(
i
)
∣
x
(
i
)
)
\hat{\lambda}, \hat{\eta}=\arg \max _{\lambda, \eta} \prod_{i=1}^{N} P\left(y^{(i)} | x^{(i)}\right)
λ^,η^=argλ,ηmaxi=1∏NP(y(i)∣x(i))
而我们,在之前求过了,
P
(
Y
=
y
∣
X
=
x
)
=
1
Z
(
x
,
λ
,
η
)
exp
{
∑
t
=
1
T
[
λ
T
f
(
y
t
−
1
,
y
t
,
x
)
+
η
T
g
(
y
t
,
x
)
)
]
}
(
36
)
\left.P(Y=y | X=x)=\frac{1}{Z(x, \lambda, \eta)} \exp \left\{\sum_{t=1}^{T}\left[\lambda^{T} f\left(y_{t-1}, y_{t}, x\right)+\eta^{T} g\left(y_{t}, x\right)\right)\right]\right\} \ \ \ \ \ (36)
P(Y=y∣X=x)=Z(x,λ,η)1exp{t=1∑T[λTf(yt−1,yt,x)+ηTg(yt,x))]} (36)
所以:
λ
^
,
η
^
=
arg
max
λ
,
η
∏
i
=
1
N
P
(
y
(
i
)
∣
x
(
i
)
)
=
arg
max
λ
,
η
∑
i
=
1
N
log
P
(
y
(
i
)
∣
x
(
i
)
)
=
arg
max
λ
,
η
∑
i
=
1
N
{
−
log
Z
(
x
(
i
)
,
λ
,
η
)
+
∑
t
=
1
T
[
λ
T
f
(
y
t
−
1
(
i
)
,
y
t
(
i
)
,
x
)
+
η
T
g
(
y
t
(
i
)
,
x
(
i
)
)
)
]
}
=
arg
max
λ
,
η
L
(
λ
,
η
,
x
(
i
)
)
\begin{aligned} \hat{\lambda}, \hat{\eta} &=\arg \max _{\lambda, \eta} \prod_{i=1}^{N} P\left(y^{(i)} | x^{(i)}\right) \\ &=\arg \max _{\lambda, \eta} \sum_{i=1}^{N} \log P\left(y^{(i)} | x^{(i)}\right) \\ &\left.=\arg \max _{\lambda, \eta} \sum_{i=1}^{N}\left\{-\log Z\left(x^{(i)}, \lambda, \eta\right)+\sum_{t=1}^{T}\left[\lambda^{T} f\left(y_{t-1}^{(i)}, y_{t}^{(i)}, x\right)+\eta^{T} g\left(y_{t}^{(i)}, x^{(i)}\right)\right)\right]\right\} \\ &=\arg \max _{\lambda, \eta} L\left(\lambda, \eta, x^{(i)}\right) \end{aligned}
λ^,η^=argλ,ηmaxi=1∏NP(y(i)∣x(i))=argλ,ηmaxi=1∑NlogP(y(i)∣x(i))=argλ,ηmaxi=1∑N{−logZ(x(i),λ,η)+t=1∑T[λTf(yt−1(i),yt(i),x)+ηTg(yt(i),x(i)))]}=argλ,ηmaxL(λ,η,x(i))
9.1 梯度上升法求解极大似然解
∇
λ
L
=
∑
i
=
1
N
{
∑
t
=
1
T
f
(
y
t
−
1
(
i
)
,
y
t
(
i
)
,
x
(
i
)
)
−
∇
λ
log
Z
(
x
(
i
)
,
λ
,
η
)
}
\nabla_{\lambda} L=\sum_{i=1}^{N}\left\{\sum_{t=1}^{T} f\left(y_{t-1}^{(i)}, y_{t}^{(i)}, x^{(i)}\right)-\nabla_{\lambda} \log Z\left(x^{(i)}, \lambda, \eta\right)\right\}
∇λL=i=1∑N{t=1∑Tf(yt−1(i),yt(i),x(i))−∇λlogZ(x(i),λ,η)}
现在问题就是
∇
λ
log
Z
(
x
(
i
)
,
λ
,
η
)
\nabla_{\lambda} \log Z\left(x^{(i)}, \lambda, \eta\right)
∇λlogZ(x(i),λ,η) 怎么来求? 注意观察公式
(
36
)
,
P
(
Y
=
y
∣
X
=
x
)
(36), P(Y=y | X=x)
(36),P(Y=y∣X=x) 实际上是一个指数族分布。而
Z
(
x
(
i
)
,
λ
,
η
)
Z\left(x^{(i)}, \lambda, \eta\right)
Z(x(i),λ,η) 就是
log
\log
log partition function。我们在指数族分布的第三部分曾经推导出,
log
\log
log partition function 的导数为充分统计量的均值。所以,
∇
λ
log
Z
(
x
(
i
)
,
λ
,
η
)
\nabla_{\lambda} \log Z\left(x^{(i)}, \lambda, \eta\right)
∇λlogZ(x(i),λ,η) 我们可以直接写出来的。
E
[
∑
i
=
1
T
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
]
\mathbb{E}\left[\sum_{i=1}^{T} f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right]
E[i=1∑Tf(yt−1,yt,x(i))]
注意这里的
y
y
y 是自变量而不是样本,所以:
E
[
∑
i
=
1
T
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
]
=
∑
y
P
(
y
∣
x
(
i
)
)
⋅
∑
i
=
1
T
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
=
∑
i
=
1
T
(
∑
y
P
(
y
∣
x
(
i
)
)
⋅
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
)
\begin{aligned} \mathbb{E}\left[\sum_{i=1}^{T} f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right] &=\sum_{y} P\left(y | x^{(i)}\right) \cdot \sum_{i=1}^{T} f\left(y_{t-1}, y_{t}, x^{(i)}\right) \\ &=\sum_{i=1}^{T}\left(\sum_{y} P\left(y | x^{(i)}\right) \cdot f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right) \end{aligned}
E[i=1∑Tf(yt−1,yt,x(i))]=y∑P(y∣x(i))⋅i=1∑Tf(yt−1,yt,x(i))=i=1∑T(y∑P(y∣x(i))⋅f(yt−1,yt,x(i)))
因为在
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
f\left(y_{t-1}, y_{t}, x^{(i)}\right)
f(yt−1,yt,x(i)) 中,我们是知道具体的值的。所以,我们把其他维度的
y
y
y 都通过求和消掉。那
么:
∑
i
=
1
T
(
∑
y
P
(
y
∣
x
(
i
)
)
⋅
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
)
=
∑
i
=
1
T
(
∑
y
1
:
t
−
2
∑
y
i
−
1
∑
y
t
∑
y
i
+
1
:
T
P
(
y
∣
x
(
i
)
)
⋅
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
)
=
∑
i
=
1
T
∑
y
i
−
1
∑
y
i
(
∑
y
1
:
t
−
2
∑
y
i
+
1
:
T
P
(
y
∣
x
(
i
)
)
⋅
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
)
=
∑
i
=
1
T
∑
y
i
−
1
∑
y
i
(
P
(
y
i
−
1
,
y
t
∣
x
(
i
)
)
⋅
f
(
y
t
−
1
,
y
t
,
x
(
i
)
)
)
\begin{aligned} \sum_{i=1}^{T}\left(\sum_{y} P\left(y | x^{(i)}\right) \cdot f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right) &=\sum_{i=1}^{T}\left(\sum_{y_{1: t-2}} \sum_{y_{i-1}} \sum_{y_{t}} \sum_{y_{i+1: T}} P\left(y | x^{(i)}\right) \cdot f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right) \\ &=\sum_{i=1}^{T} \sum_{y_{i-1}} \sum_{y_{i}}\left(\sum_{y_{1: t-2}} \sum_{y_{i+1: T}} P\left(y | x^{(i)}\right) \cdot f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right) \\ &=\sum_{i=1}^{T} \sum_{y_{i-1}} \sum_{y_{i}}\left(P\left(y_{i-1}, y_{t} | x^{(i)}\right) \cdot f\left(y_{t-1}, y_{t}, x^{(i)}\right)\right) \end{aligned}
i=1∑T(y∑P(y∣x(i))⋅f(yt−1,yt,x(i)))=i=1∑T(y1:t−2∑yi−1∑yt∑yi+1:T∑P(y∣x(i))⋅f(yt−1,yt,x(i)))=i=1∑Tyi−1∑yi∑(y1:t−2∑yi+1:T∑P(y∣x(i))⋅f(yt−1,yt,x(i)))=i=1∑Tyi−1∑yi∑(P(yi−1,yt∣x(i))⋅f(yt−1,yt,x(i)))
那么,我们的下一步思路就是如何求解
P
(
y
t
−
1
,
y
t
∣
x
(
i
)
)
P\left(y_{t-1}, y_{t} | x^{(i)}\right)
P(yt−1,yt∣x(i)) 。这实际上就是一个求解边缘概率的问题。这其 中
y
t
−
1
,
y
t
y_{t-1}, y_{t}
yt−1,yt 都是已知的。
P
(
y
t
−
1
=
j
,
y
t
=
i
∣
x
(
i
)
)
=
∑
y
1
:
t
−
2
t
+
1.
T
∏
t
′
=
1
T
ϕ
t
′
(
y
t
′
−
1
,
y
t
′
,
x
)
=
1
Z
Δ
left
⋅
ϕ
(
y
t
,
y
t
−
1
,
x
)
⋅
Δ
right
=
1
Z
α
t
−
1
(
j
)
⋅
ϕ
(
y
t
=
i
,
y
t
−
1
=
j
,
x
)
⋅
β
t
(
i
)
=
A
(
y
t
−
1
,
y
t
)
\begin{aligned} P\left(y_{t-1}=j, y_{t}=i | x^{(i)}\right) &=\sum_{y_{1: t-2} t+1 . T} \prod_{t^{\prime}=1}^{T} \phi_{t^{\prime}}\left(y_{t^{\prime}-1}, y_{t^{\prime}}, x\right) \\ &=\frac{1}{Z} \Delta_{\text {left }} \cdot \phi\left(y_{t}, y_{t-1}, x\right) \cdot \Delta_{\text {right }} \\ &=\frac{1}{Z} \alpha_{t-1}(j) \cdot \phi\left(y_{t}=i, y_{t-1}=j, x\right) \cdot \beta_{t}(i) \\ &=A\left(y_{t-1}, y_{t}\right) \end{aligned}
P(yt−1=j,yt=i∣x(i))=y1:t−2t+1.T∑t′=1∏Tϕt′(yt′−1,yt′,x)=Z1Δleft ⋅ϕ(yt,yt−1,x)⋅Δright =Z1αt−1(j)⋅ϕ(yt=i,yt−1=j,x)⋅βt(i)=A(yt−1,yt)
所以,最后我们得到的结论为:
∇
λ
L
=
∑
i
=
1
N
∑
t
=
1
T
[
f
(
y
t
−
1
(
i
)
,
y
t
(
i
)
,
x
(
i
)
)
−
∑
y
t
−
1
∑
y
i
A
(
y
t
−
1
,
y
t
)
f
(
y
t
−
1
,
y
t
,
x
)
]
\nabla_{\lambda} L=\sum_{i=1}^{N} \sum_{t=1}^{T}\left[f\left(y_{t-1}^{(i)}, y_{t}^{(i)}, x^{(i)}\right)-\sum_{y_{t-1}} \sum_{y_{i}} A\left(y_{t-1}, y_{t}\right) f\left(y_{t-1}, y_{t}, x\right)\right]
∇λL=i=1∑Nt=1∑T[f(yt−1(i),yt(i),x(i))−yt−1∑yi∑A(yt−1,yt)f(yt−1,yt,x)]
其中,
y
t
(
i
)
y_{t}^{(i)}
yt(i) 为样本,
y
t
y_{t}
yt 为自变量。那我们用类似的方法同样可以求解出:
∇
η
L
=
∑
i
=
1
N
∑
t
=
1
T
[
f
(
y
t
−
1
(
i
)
,
y
t
(
i
)
,
x
(
i
)
)
−
∑
y
t
−
1
∑
y
t
A
(
y
t
−
1
,
y
t
)
g
(
y
t
,
x
)
]
\nabla_{\eta} L=\sum_{i=1}^{N} \sum_{t=1}^{T}\left[f\left(y_{t-1}^{(i)}, y_{t}^{(i)}, x^{(i)}\right)-\sum_{y_{t-1}} \sum_{y_{t}} A\left(y_{t-1}, y_{t}\right) g\left(y_{t}, x\right)\right]
∇ηL=i=1∑Nt=1∑T[f(yt−1(i),yt(i),x(i))−yt−1∑yt∑A(yt−1,yt)g(yt,x)]
最终,梯度上升算法将被我们总结为:
{
λ
t
+
1
=
λ
t
+
step
⋅
∇
λ
L
(
λ
(
t
)
,
η
(
t
)
)
η
t
+
1
=
η
t
+
step
⋅
∇
η
L
(
λ
(
t
)
,
η
(
t
)
)
\left\{\begin{array}{l} \lambda^{t+1}=\lambda^{t}+\operatorname{step} \cdot \nabla_{\lambda} L\left(\lambda^{(t)}, \eta^{(t)}\right) \\ \eta^{t+1}=\eta^{t}+\operatorname{step} \cdot \nabla_{\eta} L\left(\lambda^{(t)}, \eta^{(t)}\right) \end{array}\right.
{λt+1=λt+step⋅∇λL(λ(t),η(t))ηt+1=ηt+step⋅∇ηL(λ(t),η(t))
实际上,这只是一种理论上可行的求解方法。实际求解的过程中,这样做收敛速度太慢了,这里只是给出一种理论的解,还有很多类似的方法,有兴趣的同学可以深入研究。
9.2 MAP Inference
这个问题,仔细观察就知道和HMM 中的Decoding 问题是一样的。HMM 和CRF 没有任何区别。我们想要在已知观测序列的情况下,求隐变量序列的最大的可能状态。实际上就是使用动态规划算法,一步步求得最大的序列,也就是Viterbi 算法,在Hidden Markov Model 的第四节,有详细的描述,这里就不多说。
9.3 小结
这一节中,我们介绍了用极大似然估计算法来求CRF 模型的参数。实际上计算过程都还挺普通的。有一个难点是利用指数族函数log partition function 的导数为充分统计量的均值这个结论来进行求解。实际上这一步明白之后,还是比较简单的。而其中也遇到了求边缘概率的方法,我们用到了之前描述的本章第8 节求Marginal Probability 的方法。MAP Inference 和HMM 中的Decoding 问题是一样的,使用Viterbi 算法求解。
10 Conclusion
本章的思路实际是很流畅的,首先介绍了整个机器学习体系结构。然后,引出了概率图模型在其中的地位。从最简单的概率图模型,Naive Bayes 算法,一步步的改进缺点到HMM,到MEMM,最后演化成了CRF。我个人感觉这个过程是非常重要的,很多教科书一上来就摆了一推的概率和定义,我等凡人真的头疼。非常感谢B 站白板推导系列的up 主。而之后就,定义了CRF 的模型结构,定义完了之后就是如何使用数据来求解这个CRF 模型的参数,求解出来之后就是如何用这个模型来进行inference,整个过程的思维是非常流畅和附有逻辑性的。