zoukankan      html  css  js  c++  java
  • 条件随机场

    什么样的问题需要 $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)$$

    后向向量暂时还不会推导,下次再来补充。

  • 相关阅读:
    Installing Python Modules
    《利用Python 进行数据分析》
    使用Python进行描述性统计
    各种数字证书区别
    数字证书及CA的扫盲介绍
    expect学习笔记及实例详解
    使用openssl命令制作ecc证书
    那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
    Openssl与私有CA搭建
    Openssl编程--源码分析
  • 原文地址:https://www.cnblogs.com/yanghh/p/14007480.html
Copyright © 2011-2022 走看看