算法强化 —— HMM模型(一)

HMM模型

HMM–定义和假设

概率模型

所谓概率模型,顾名思义,就是将学习任务归结于计算变量的概率分布的模型
概率模型非常重要。在生活中,我们经常会根据一些已经观察到的现象来预测和估计未知的东西————这种需求,恰恰是概率模型的推断(inference)行为所做的事情。
推断(inference)的本质是:利用可观测变量,来推测未知变量的条件分布

生成模型VS判别模型

概率模型又可以分为两类:生成模型(Generative Model)和判别模型(Discriminative Model)。
概率模型是通过可观测变量推断部分未知变量,将可观测变量的集合命名为O,未知变量的集合命名为Y。
生成模型学习出来的O与Y的联合概率分布P(O,Y),而判别模型学习的是条件概率分布:P(Y|O)。
朴素贝叶斯模型是生成模型,而逻辑回归是判别模型。
对于某一给定的观察值O,运用条件概率P(Y|O)很容易求出它对于不同Y的取值。

马尔可夫链,马尔可夫随机场和条件随机场
马尔克夫链(Markov Chain):一个随机过程模型,它表述了一系列可能的事件,在这个系列当中每一个事件的概率仅依赖于前一个事件
算法强化 —— HMM模型(一)
上图就是一个非常简单的马尔克夫链,两个节点分别表示晴天和雨天,几条边表示节点之间的转移概率。
一个晴天之后,0.9的可能是又一个晴天,只有0.1的可能是一个雨天,而一个雨天之后,0.5的可能是晴天,也有0.5的可能是另外一个雨天。

假设这是某个地区的天气预报模型(这个地区只有晴天和雨天两种天气),则明天天气的概率,只和今天的天气状况有关,和前天以及更早没有关系,那么我们只要知道今天的天气,就可以推测明天是晴是雨的可能性了。

隐马尔克夫模型(Hidden Markov Model , HMM)
定义
HMM是一个关于时序的概率模型,它的变量分为两组:
状态变量{S1,S2,...,STS_1,S_2,...,S_T},其中stSs_t \in S表示t时刻的系统状态;
观测变量{O1,O2,...,OTO_1,O_2,...,O_T},其中otOo_t \in O表示t时刻的观测值;

观测变量和状态变量各自都是一个时间序列,每个状态/观测值都和一个时刻对应:
算法强化 —— HMM模型(一)
一般假定状态序列是隐藏的,不能被观测到的,因此状态变量时隐变量(Hidden Variable) ————这就是HMM中H(Hidden)的来源。
这个隐藏的、不可观测的状态序列是由一个马尔克夫链随机生成的————这是HMM中的第一个M(Markov)的含义。
一条隐藏的马尔克夫链随机生成了一个不可观测的状态序列(State Sequence),然后每个状态又对应生成了一个观测结果,这些观测值按照时序排列后就成了观测序列(Observation Sequence),这两个序列是一一对应的,每个对应的位置又对应着一个时刻。
一般而言,HMM的状态变量取值是离散的,而观测变量的取值,则可以是离散的也可以是连续的。
但是为了方便,在大多数应用中,观测变量也是离散的。

HMM基本假设

假设1:假设隐藏的马尔克夫链在任意时刻t的状态只依赖于前一个时刻(t-1时)的状态,与其他时刻的状态及观测无关,也与时刻t无关。
公式:P(stst1,ot1,...,s1,o1)=P(stst1,t=1,2,3,...,T)P(s_t|s_{t-1},o_{t-1},...,s_1,o_1) = P(s_t|s_{t-1},t = 1,2,3,...,T)
这一假设又叫做齐次马尔克夫假设

假设2:假设任意时刻的观测只依赖于该时刻的马尔克夫链状态,与其他观测及状态无关。
用公式表示为
P(otsT,oT,sT1,oT1,...,st+1,ot+1,st,ot,...,s1,o1)=P(otst)P(o_t|s_T,o_T,s_{T-1},o_{T-1},...,s_{t+1},o_{t+1},s_t,o_t,...,s_1,o_1) = P(o_t|s_t)
这个假设也叫观测独立性假设。

确定 HMM 的两个空间和三组参数

两个空间:状态空间S和观测空间O
三组参数:转移概率,观测概率和初始状态概率
状态转移概率:模型在各个状态间转换的概率,通常记作矩阵A=[aij]NNA = [a_{ij}]_{N*N}
其中,aij=P(ot=Ojst=Si),1i,jNa_{ij} = P(o_t = O_j|s_t = S_i),1\leq i,j \leq N表示在任意时刻t,若状态为SiS_i,则下一时刻状态为SjS_j的概率。
输出观测概率:模型根据当前状态获得各个观测值的概率,通常记作矩阵B=[bij]NMB = [b_{ij}]_{N*M}
其中,bij=P(ot=Ojst=Si),1iN,1jMb_{ij} = P(o_t = O_j|s_t = S_i),1\leq i\leq N,1 \leq j \leq M表示在任意时刻t,若状态SiS_i则观测值OjO_j被获取的概率。
有些时候,SiS_i已知,但可能OjO_j是未知的,这个时候,b就成了当时观测值的一个函数,因此也可以写作bi(o)=P(os=Si)b_i(o) = P(o|s=S_i)
初始状态概率:模型在初始时刻各状态出现的概率,通常记作π=(π1,π2,...,πN)\pi = (\pi_1,\pi_2,...,\pi_N),其中πi=P(s1=Si),1iN\pi_i = P(s_1 = S_i),1 \leq i \leq N表示模型的初始状态为SiS_i的概率。

通常我们用λ=[A,B,π]\lambda =[A,B,\pi]来指代这三组参数
有了状态空间S和观测空间O,以及参数λ\lambda,一个HMM就被确定了。

HMM——三个基本问题

在实际运用中,HMM 有三个基本问题。

概率计算问题

又称评价(Evaluation)问题。已知信息:模型λ=[A,B,π]\lambda = [A,B,\pi]
观测序列 : O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)
求解目标:计算在给定模型$\lambda O下,已知观测序列O出现的概率:P(O|\lambda)$。也就是说,给定观测序列,求它和评估模型之间的匹配度。

预测问题

又称解码(Decoding)问题。已知信息:模型λ=[A,B,π]\lambda = [A,B,\pi]
观测序列:O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)
求解目标:计算在给定模型$\lambda $下,使已知观测序列O的条件概率 P(OS)P(O|S)最大的状态序列S=(s1,s2,...,sT)S = (s_1,s_2,...,s_T)。即给定观测序列,求最有可能与之对应的状态序列。

学习(Learning)问题

又称训练(Training)问题。已知信息:观测序列:O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)
或许也会给定与之对应的状态序列:S=(s1,s2,...,sT)S = (s_1,s_2,...,s_T)
求解目标:估计模型λ=[A,B,π]\lambda = [A,B,\pi]参数,使得该模型下观测序列概率P(Oλ)P(O|\lambda)最大。也就是训练模型,使其最好地描述观测数据。前两个问题是模型已经存在之后如何使用模型的问题,而最后一个则是如何通过训练得到模型的问题