隐马尔可夫模型

隐马尔可夫模型（Hidden Markov Model；缩写：HMM），或称作-{zh-cn:隐性马尔可夫模型;zh-tw:隐性马可夫模型}-，是统计模型，用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析，例如模式识别。
在正常的马尔可夫模型中，状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在隐马尔可夫模型中，状态并不是直接可见的，但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一概率分布。因此输出符号的序列能够透露出状态序列的一些信息。
隐马尔可夫模型在热力学、统计力学、物理学、化学、经济学、金融学、信号处理、信息论、模式识别（如语音识别、手写识别、手势识别、词性标记、乐谱跟随）、局部放电及生物信息学等领域都有应用。
定义.
令formula_1、formula_2为离散时间随机过程， formula_3。则formula_4是隐马尔可夫模型的条件是：
令formula_9、formula_10为连续时间随机过程。则formula_11是隐马尔可夫模型的条件是：
术语.
过程状态formula_1（或formula_9）称作隐状态，formula_19（或formula_20）称作条件概率或输出概率。
马尔可夫模型的演化.
下边的图示强调了HMM的状态变迁。有时，明确的表示出模型的演化也是有用的，我们用 "x"("t"1) 与 "x"("t"2) 来表达不同时刻 "t"1 和 "t"2 的状态。
图中箭头方向则表示不同资讯间的关联性，因此可以得知formula_21和formula_22有关，而formula_22又和formula_24有关。
而每个formula_25只和formula_21有关，其中formula_21我们称为隐藏变数（hidden variable），是观察者无法得知的变数。
隐性马可夫模型常被用来解决有未知条件的数学问题。
假设隐藏状态的值对应到的空间有formula_28个元素，也就是说在时间formula_29时，隐藏状态会有formula_28种可能。
同样的，formula_31也会有formula_28种可能的值，所以从formula_29到formula_31间的关系会有formula_35种可能。
除了formula_21间的关系外，每组formula_37间也有对应的关系。
若观察到的formula_25有formula_39种可能的值，则从formula_21到formula_25的输出模型复杂度为formula_42。如果formula_25是一个formula_39维的向量，则从formula_21到formula_25的输出模型复杂度为formula_47。
在这个图中,每一个时间块（"x"("t"), "y"("t")）都可以向前或向后延伸。通常，时间的起点被设置为"t"=0 或 "t"=1.
马尔可夫模型的机率.
假设观察到的结果为formula_48
formula_49
隐藏条件为formula_50
formula_51
长度为formula_52，则马可夫模型的机率可以表达为：
formula_53
由这个机率模型来看，可以得知马可夫模型将该时间点前后的资讯都纳入考量。
使用隐马尔可夫模型.
HMM有三个典型(canonical)问题:
具体实例.
假设你有一个住得很远的朋友，他每天跟你打电话告诉你他那天做了什么。你的朋友仅仅对三种活动感兴趣：公园散步，购物以及清理房间。他选择做什么事情只凭天气。你对于他所住的地方的天气情况并不了解，但是你知道总的趋势。在他告诉你每天所做的事情基础上，你想要猜测他所在地的天气情况。
你认为天气的运行就像一个马尔可夫链。其有两个状态「雨」和「晴」，但是你无法直接观察它们，也就是说，它们对于你是隐藏的。每天，你的朋友有一定的概率进行下列活动：「散步」、「购物」、「清理」。因为你朋友告诉你他的活动，所以这些活动就是你的观察数据。这整个系统就是一个隐马尔可夫模型（HMM）。
你知道这个地区的总的天气趋势，并且平时知道你朋友会做的事情。也就是说这个隐马尔可夫模型的参数是已知的。你可以用程序语言（Python）写下来：
<syntaxhighlight lang="python">
</syntaxhighlight>
在这些代码中,codice_1代表了你对于你朋友第一次给你打电话时的天气情况的不确定性（你知道的只是那个地方平均起来下雨多些）。在这里，这个特定的概率分布并非平衡的，平衡概率应该接近（在给定变迁概率的情况下）codice_2。
codice_3 表示基于马尔可夫链模型的天气变迁，在这个例子中，如果今天下雨，那么明天天晴的概率只有30%。代码codice_4 表示了你朋友每天做某件事的概率。如果下雨，有50% 的概率他在清理房间；如果天晴，则有60%的概率他在外头散步。
这个例子在维特比算法页上有更多的解释。
结构架构.
下图展示了实例化HMM的一般结构。椭圆形代表随机变量，可采用多个数值中的任意一种。随机变量formula_21是"t"时刻的隐状态（图示模型中formula_58）；随机变量"y"("t")是"t"时刻的观测值（formula_59）；箭头表示条件依赖关系。
图中可清楚看出，给定隐变量formula_21在时间"t"的条件概率分布只取决于隐变量formula_22的值，之前的则没有影响，这就是所谓马尔可夫性质。观测变量formula_25同理，只取决于隐变量formula_21的值。
在本文所述标准HMM中，隐变量的状态空间是离散的，而观测值本身则可以离散（一般来自分类分布）也可以连续（一般来自正态分布）。HMM参数有两类：转移概率与输出概率，前者控制formula_64时刻的隐状态下，如何选择"t"时刻的隐状态。
隐状态空间一般假设包含"N"个可能值，以分类分布为模型。这意味着，对隐变量在"t"时刻可能所处的"N"种状态中的每种，都有到formula_31时刻可能的"N"种状态的转移概率，共有formula_35个转移概率。注意从任意给定状态转移的转移概率之和须为1。于是，转移概率构成了"N"阶方阵，称作马尔可夫矩阵。由于任何转移概率都可在已知其他概率的情形下确定，因此共有formula_67个转移参数。
此外，对"N"种可能状态中的每种，都有一组输出概率，在给定隐状态下控制着观测变量的分布。这组概率的大小取决于观测变量的性质，例如，若观测变量是离散的，有"M"种值、遵循分类分布，则有formula_68个独立参数，所有隐状态下共有formula_69个输出概率参数。若观测向量是"M"维向量，遵循任意多元正态分布，则将有"M"个参数控制均值，formula_70个参数控制协方差矩阵，共有formula_71个输出参数。（这时，除非"M"很小，否则限制观测向量各元素间协方差的性质可能更有用，例如假设各元素相互独立，或假设除固定多相邻元素外，其他元素相互独立。）
学习.
HMM的参数学习任务是指在给定输出序列或一组序列的情形下，找到一组最佳的状态转换和转移概率。任务通常是根据一组输出序列，得到HMM参数的最大似然估计值。目前还没有精确解这问题的可行算法，可用鲍姆-韦尔奇算法或Baldi–Chauvin算法高效地推导出局部最大似然。鲍姆-韦尔奇算法是最大期望算法的特例。
若将HMM用于时间序列预测，则更复杂的贝叶斯推理方法（如马尔可夫链蒙特卡洛采样法，MCMC采样法）已被证明在准确性和稳定性上都优于寻找单一的最大似然模型。由于MCMC带来了巨大的计算负担，在计算可扩展性也很重要时，也可采用贝叶斯推理的变分近似方法，如。事实上，近似变分推理的计算效率可与期望最大化相比，而精确度仅略逊于精确的MCMC型贝叶斯推理。
隐马尔可夫模型的应用.
隐马尔可夫模型在语音处理上的应用.
因为马可夫模型有下列特色：
历史.
隐马尔可夫模型最初是在20世纪60年代后半期Leonard E. Baum和其它一些作者在一系列的统计学论文中描述的。HMM最初的应用之一是开始于20世纪70年代中期的语音识别。
在1980年代后半期，HMM开始应用到生物序列尤其是DNA的分析中。此后，在生物信息学领域HMM逐渐成为一项不可或缺的技术。