这一节看的时间跨度比较大,先写着,后面再整理
HMM的概率图模型:
其中,白圈代表的是隐变量,带阴影的是观测变量,然后t就是时间次数,我在这里就理解为更新次数了。
1. 基本信息
HMM模型最重要的三个东西:
一个模型(包含:一个,表示初始的概率分布;一个A,状态转移矩阵;一个B,发射矩阵。)
两个假设(1.齐次马尔可夫假设;2.观察独立假设)
三个问题(1.evaluation问题;2.Learning问题;3.Decoding问题)
观测变量我们用字母o表示,每一个时间都会有一个观测变量,所以是个观测变量,其中这些o们的取值,我们用V来表示,V代表取值的集合
隐变量我们用字母i来表示,每一个时间像观测变量一样,都会有一个对应的隐变量,我们说有个隐变量,其中这些i们的取值,我们用Q来表示,Q代表所有隐变量的取值的集合
其中状态转移矩阵,我们这样定义:,aij就是观测变量从状态i变化到状态j的概率,属于不同时间下(t到t+1)的变化
其中发射矩阵,我们这样定义:,bjk就是从隐变量k变化到观测变量j的概率,属于同一时间下(t)的变化
齐次马尔可夫假设:(最后是将这个假设简化成状态转移矩阵的其中一个定义形式,这样可以方便表示),第i+1的隐变量变量的出现概率是只单独依赖于第i个隐变量变量
观察独立假设:,第t个观测变量的出现概率只依赖于第t个隐变量
Evaluation问题:,在给定的lambda的情况下,某一个观察变量(某一个句子)出现的概率有多大
Learning问题:,左边的lambda是新的lambda(待求的),右边的lambda是上一个时间的已经求出来的lambda,我们要使得某个句子出现的概率最大, 就需要调整lambda里面的三个东西,初始概率分布+状态转移矩阵+发射矩阵
Decoding问题:,这里分两步
第一步叫预测::通过当前状态预测下一个隐状态概率
第二步叫滤波::已知当前观测状态,求当前时刻的隐状态的概率
2. Evaluation问题
给定模型和观测序列,计算在模型下观测序列O出现的概率为
由上面的这个式子我们可以推断出下面这个式子是成立的:
然后采用齐次马尔可夫假设,简化上式变成
再套用转移矩阵的表现形似,就像上面给出的齐次马尔可夫定义式一样:
不断套用上面的公式,化简P这一项,最终(这里面的是一个初始联合概率)
然后再看,他是等于,因为在这里是肯定发生的,也就是上一代训练出来的(pi+A+B),所以他就是已知的,我们就把O传进去,构成观测独立假设的条件,接着直接套用观测独立假设来简化这个式子,同理上面,运用同样的手法,将一部分的式子用发射矩阵的定义式来表示出来:
所以:这个时间复杂度太高了,对于高维的数据是挺难实现的,于是我们换另外一种方法去计算!!!!
3. 前向算法
现在我们记迭代所有观测概率(截止t时刻)以及第i个状态的概率为
这个是小t时刻(橙色框框)
这个是去到大T时刻(红色箭头)
所以
现在是截止t时刻,我们可以表示出来,那么截止t+1时刻,我们应该用凑出来t+1时刻的表达方式
这一步是硬塞一个进来的,然后用积分(求和,因为状态是离散的)的形式给消掉
接着用观测独立假设给消掉前面那一项,并且后面那一项,下面这个转换一下:
后面那一项就变成下面这个公式,目的就是为了提一个i_{t+1}出来,再用齐次马尔可夫假设化简一下下面式子的前面一项,后面那一项就是
这样,我们就可以将t+1的式子和t联系起来了
最终等于:
最终:
例子:
后向算法有点长,就没写下来了。
总的来说,Evaluation问题就是给定一个(给定一个模型),然后就某一个观测序列出现的概率。下面就是learning问题了,在给定训练集的时候,我们让某一个序列出现的概率最大,那怎么最大呢,就是去迭代修改这个了
evaluation问题其实就是已知HMM模型参数λ和观测序列,求当前观测序列出现的概率
4. Learning问题
而learning问题则是已知观测序列和隐层状态序列,求HMM的参数,一般使用极大似然估计算法(EM)
我们套用EM的框架,EM的X是观测变量,Z是隐变量,是参数,而且Z是一个连续变量
那么在HMM中,O就是观测变量,I就是隐变量,是参数。其中I是一个离散的变量
EM:
那么HMM: ,然后看后面那一项,感觉有点别扭啊,O和都发生的情况下去看隐变量I的概率,我们将其改写一下
其中,分母是一个常数,所以分子和结果其实是一个约等于的一个关系,改写成:
然后我们引入evalution问题直接计算的结论得出:
log可以把连乘改成连加:
这看成是的函数
以上就是EM算法的E步了
然后下面就是EM算法的M步了,对 de ,矩阵a和矩阵b进行拉格朗日乘数法的求解了
5. Decoding问题
decoding 问题,就是给定了模型和观测序列O,求对给定观测序列条件概率最大的状态序列,就是给定观测序列,然后求最有可能的状态序列
书上写的是维特比算法:
其实上一句话就提到了公式的表达了,给定了观测变量,求某一个t时刻的状态的最大概率
最后一个式子怎么来的呢,就是t时刻的隐状态已经确定了,然后转移到t+1时刻的 的隐状态(所以需要乘),然后从隐状态激发到观测变量(所以需要乘)
至此,我们就找到了t+1时刻和t时刻的联系了
然后我们需要一个变量去记录这个 我从1时刻走到T时刻到底选了什么路径,引入
这里怎么存下来呢,譬如t时刻,我们已经选了qi状态作为隐变量,然后在t+1时刻,我们也计算从上面计算的式子里面计算得出是j时刻的概率最大,于是我们的aij就记录下来了,也变成了 ,到最后,我们会得出
这个序列就是我们的最优路径了,主要思想就是DP,每次找我都是要求最大概率的路径,这样组合起来整条路径才是最优的。