简介围绕模式识别核心知识整理的PPT课件面向人工智能、机器学习初学者及需要补充概率模型基础的读者重点解决马尔科夫模型与隐马尔科夫模型概念抽象、公式与实例难以对应的问题。课件从马尔可夫性、马尔科夫链及转移概率矩阵讲起延伸到隐马尔科夫模型的状态、观察值、转移概率与观察值概率并用彩球抽缸实验说明观察序列的生成过程同时点明缸间转移不可直接观察、球色与缸非一一对应等约束帮助读者建立双重随机过程的理解框架。资源包共1个文件为PPT格式压缩包约5.79MB便于直接打开阅读和课堂演示。目前已有1593人学习适合用作课程预习、复习提纲或模式识别入门前置材料也可为语音识别、图像识别、自然语言处理等应用方向提供概念铺垫。1. 从“看云识天气”说起模式识别到底在做什么天边压过来一片乌青的云风忽然转凉空气里飘着土腥味你抬头看一眼就冒出一句“要下雨了”。这一幕里人脑干的事就是把零散的信号拼成一个整体印象再把它归进“下雨”这一类。模式识别研究的就是让机器也走一遍这条路从一堆样例里把规律摸出来再拿规律去判断新来的东西属于哪一类。它听起来像玄学其实是方法论。要让机器判断得靠谱就得给“规律”找个数学模型马尔可夫模型就是其中很经典的一支。2. 马尔可夫性为什么“只管现在”反而是种本事很多人第一次接触序列数据直觉是“历史越长判断越准”于是把过去所有信息一股脑塞进模型。真这么做往往很快就卡住序列一长要记录的历史就爆炸式增长算不动也存不下。马尔可夫模型给的是另一个方向——大胆地把历史砍掉只留“现在”。这个看起来粗暴的假设恰恰是它能被工程用起来的原因。2.1 一句话说清马尔可夫性将来只认现在资料里给的定义很干净如果一个过程的“将来”仅依赖“现在”而不依赖“过去”这个过程就具有马尔可夫性也叫马尔可夫过程可以写成 X(t1) f(X(t))。翻译成人话就是下一步长什么样只由当前这一步决定之前怎么走过来的不重要。打个比方你在一个陌生城市里找路。站在某个路口你下一步往哪拐只看你现在站在哪个路口、面前有哪些岔路跟你半小时前从哪条巷子绕过来没有关系。这个“只认当前位置”的设定就是马尔可夫性。它把一整条历史压缩成一个当前状态模型的复杂度立刻降下来了。这个假设当然不是永远成立。比如人的情绪今天心情差可能是因为昨天受了气昨天又和前天有关这种长记忆过程硬套马尔可夫性就会失真。反过来很多真实序列的“记忆”衰减得很快只保留当前状态已经足够好用这时候马尔可夫性就不是偷懒而是合理的近似。值得强调的是马尔可夫性描述的是一个过程的性质不是某个具体模型的名字。一个过程可以有马尔可夫性也可以没有可以近似看作有也可以严格证明没有。判断标准只有一条将来是否只由现在决定。2.2 从马尔可夫过程到马尔可夫链把连续世界切成格子马尔可夫过程是个大筐时间和状态的取值是连续还是离散决定了筐里装的是哪一种。资料里说得很明确时间和状态都离散的马尔可夫过程叫马尔可夫链记作 {Xn X(n), n 0,1,2,…}它是在时间集 {0,1,2,…} 上对一个离散状态过程连续观察的结果。状态空间记作 I {a1, a2,…}每个 ai 是一个具体状态。条件概率 Pij(m, mn) P{Xmn aj | Xm ai}意思是“在时刻 m 处于状态 ai 的条件下到时刻 mn 转移到状态 aj 的概率”这个量叫转移概率。当它跟 m 无关时链就叫齐次马尔可夫链平时说的马尔可夫链通常都指齐次这一种。“齐次”两个字值得多停一秒。它的意思是转移规律不随时间漂移今天的晴天转阴天概率是 0.25明年今天还是 0.25。现实里当然会有季节变化但在一个较短的时间窗口内把它当作不变往往够用。用格子来理解最直观连续时间的马尔可夫过程像一条流动的河你随时可以取一个点马尔可夫链则像棋盘你只能在整数时刻站在某几个固定格子上一步一格地挪。语音采样、文本分词、用户每天的行为状态天然就是这种“按格子走”的形态所以链在实际问题里出现得更多。2.3 转移概率矩阵把“下一步去哪”写成一张表有了状态和转移概率接下来要把它们摆成一张能算的表这就是转移概率矩阵。资料里给了一个天气的例子三个状态是晴天、阴天、下雨今天\明天晴天阴天下雨晴天0.500.250.25阴天0.3750.250.375下雨0.250.1250.625读法是“行是今天列是明天”。第一行第一列的 0.50 表示今天晴、明天还晴的概率是 0.5第一行第三列的 0.25 表示今天晴、明天下雨的概率是 0.25。整行加起来必须等于 1因为从任何一个状态出发下一步必然落到某个状态上没有“哪儿都不去”这个选项。资料里那个求和公式表达的就是这件事。下面用几行代码把这张表验一遍顺便看看它在程序里长什么样import numpy as np # 行 今天的状态列 明天的状态顺序固定为 晴天、阴天、下雨 P np.array([ [0.500, 0.250, 0.250], # 今天晴天明天三种天气的概率 [0.375, 0.250, 0.375], # 今天阴天明天三种天气的概率 [0.250, 0.125, 0.625], # 今天下雨明天三种天气的概率 ]) # 齐次马尔可夫链要求每一行的概率之和为 1 print(P.sum(axis1)) # 期望输出 [1. 1. 1.] # 已知今天是阴天问明天最可能是哪种天气 print(P[1].argmax()) # 输出 0 或 2两个 0.375 并列最高这里有两个参数要留意。axis1表示按行求和不是按列按列求和会得到“明天是晴天的总概率”两者含义完全不同这是初学者最容易写反的地方。argmax()返回的是最大概率所在的下标配合前面约定的状态顺序0 是晴天、1 是阴天、2 是下雨结果才读得懂。如果状态顺序没有统一约定同一份矩阵在不同人手里会得出相反的结论。这张表的价值在于它把“天气怎么变化”这件模糊的事压缩成九个数字。有了矩阵一步转移可以查表两步转移可以把矩阵自乘一次多步之后还能观察分布会不会稳定下来。矩阵不大但它承载的是整个系统的动态规律这也是它被称为马尔可夫链核心参数的原因。3. 隐马尔可夫模型状态看不见了还能算吗马尔可夫链有个前提——你站在哪个格子上自己是知道的。天气例子之所以好讲就是因为“今天是晴是雨”这件事摆在明面上。可现实里大量场景不是这样你知道发生了什么却不知道背后处在什么状态。隐马尔可夫模型就是为这种局面准备的。3.1 摸彩球实验一个能装进脑袋的 HMM资料里用一个摸彩球实验把 HMM 讲得很透。设有 N 个缸每个缸里装很多彩球球的颜色由一个概率分布描述。实验这样进行先按初始概率分布随机选中 N 个缸中的一个开始再按这个缸里球颜色的概率分布随机摸一个球记下颜色 O1把球放回然后按缸之间的转移概率分布随机选下一个缸重复上述步骤最后得到一串颜色 O1, O2, …称为观察值序列 O。这个实验有三条约束每一条都很关键缸与缸之间的转移不能被直接观察摸出来的球颜色和缸不是一一对应的每次选哪个缸由一组转移概率决定。打个比方有点像朋友在帘子后面换杯子你看不见他手里拿的是第几个杯子只能看见他每次倒出来的是什么颜色的球。你手里唯一的信息就是那串颜色。这个帘子就是 HMM 里那个“隐”字。缸就是状态球的颜色就是观察值。状态在幕后观察值在台前两者通过概率联系起来而不是通过固定规则对应。理解到这一层后面那些术语就不会打架了。3.2 双重随机过程HMM 的“隐”究竟隐在哪资料对 HMM 的定义只有一句话但信息量很大HMM 是一个双重随机过程由两部分组成。一部分是马尔可夫链描述状态的转移用转移概率描述另一部分是一般随机过程描述状态与观察序列之间的关系用观察值概率描述。状态是不确定或不可见的只有通过观测序列的随机过程才能表现出来。“双重”这个词是理解 HMM 的钥匙。第一重随机发生在状态层面下一个状态是哪个由转移概率决定本身带随机性。第二重随机发生在观察层面确定了状态之后会观察到什么也不是固定的而是由该状态下的观察值概率决定。对照摸彩球实验第一重是“下一个选哪个缸”第二重是“从这个缸里摸出什么颜色的球”。两层随机叠在一起你看到的序列才会显得既有点规律又说不准。这也是 HMM 和普通马尔可夫链的分水岭。普通马尔可夫链只有一重随机状态看得见观察就是状态本身。HMM 把状态藏到幕后多加了一层从状态到观察的映射于是同一串观察值可能由好几条不同的状态路径产生。用一句话概括HMM 关心的不是“我看到了什么”而是“我看到这些东西背后最可能是怎样一条状态路径”。前者是记录后者是推断两者难度完全不同。3.3 状态与观察值颜色不是缸的身份证把 HMM 的几个核心词摆在一起对照边界会清楚很多。状态是系统内部的处境可以是离散的也可以是连续的在摸彩球实验里就是“当前用的是第几号缸”。观察值是从系统外部能记录到的量同样可离散可连续在实验里就是球的颜色。转移概率管的是状态与状态之间怎么跳。观察值概率管的是某个状态会以多大概率产生某个观察值。这四个词里最容易被忽略的是观察值概率。很多人下意识觉得“看到红球就说明是某个缸”可实验的约束明说了球的颜色和缸不是一一对应。一个缸里可能既有红球也有蓝球只是比例不同两个不同的缸也可能都能摸出红球。颜色只能提供证据不能给出身份。下面这张表把马尔可夫链和 HMM 放在一起看对比项马尔可夫链隐马尔可夫模型状态是否可见可见状态就是观察不可见只能间接推断随机过程层数一层状态转移两层状态转移加观察生成核心参数转移概率转移概率、观察值概率、初始分布输入输出关系观察即状态序列观察序列推出隐藏状态序列这张表最该记住的是第一行。状态可见与否决定了你手上是马尔可夫链还是 HMM而不是由数据长得像不像序列决定的。很多误用就出在这里拿到一串观察值就往上套 HMM却没问过自己“我关心的那个状态到底看得见吗”。4. 四个容易翻车的混淆点马尔可夫链与 HMM 的边界概念一多边界就容易糊。下面这四个混淆点是初学阶段最容易踩坑的地方每一个都值得单独拎出来说清楚。4.1 误区一把马尔可夫性和马尔可夫链当成同义词易混点在于两个词都带“马尔可夫”读起来像同一件事的两种叫法。会混是因为教材常常先讲马尔可夫性紧接着就讲马尔可夫链中间没有明显停顿读者容易把它们并成一个概念。区分方法看层级马尔可夫性是一种性质描述的是一种“将来只依赖现在”的假设它既可以用在离散过程上也可以用在连续过程上马尔可夫链是一个具体模型要求时间和状态都离散并且满足马尔可夫性。性质是条件链是满足条件的模型之一两者不是同一层级的东西。说“这个序列具有马尔可夫性”是在描述特征说“这是一个马尔可夫链”是在指认对象混着用会让后面的推导失去前提。4.2 误区二把转移概率和观察值概率搅成一团易混点在于两者都叫“概率”都在描述某种不确定性。会混是因为 HMM 的参数表里它们挨得很近计算时又常常一起出现。区分方法看它们各自回答什么问题。转移概率回答“状态之间怎么走”行和列的坐标都是状态观察值概率回答“处于某个状态时会看到什么”一个坐标是状态另一个坐标是观察值。前者描述的是幕后的移动规律后者描述的是幕后到台前的映射规律。把两者对调模型结构就整个错位了算出来的结果也就没有意义。检查时有个简单办法看这个概率的两个下标是不是同一类东西都是状态就是转移概率一状态一观察就是观察值概率。4.3 误区三以为“隐”就是彻底不可知易混点在于“隐”这个字听起来像“完全看不见所以没法算”。会混是因为直觉上总希望信息越全越好一旦关键变量缺失就觉得问题无解。区分方法看资料的表述状态不确定或不可见但它会通过观测序列的随机过程表现出来。这句话的重点在后半段。状态本身看不见可它留下的痕迹看得见这些痕迹带着概率上的偏向足够用来反推。就像医生看不到病灶内部但能根据症状组合判断大概是哪一类问题。隐不等于无解隐只意味着不能直接读只能间接推。4.4 误区四以为有观察序列就一定是 HMM易混点在于只要数据是一串一串的很多人就默认该上 HMM。会混是因为序列数据这个外观太醒目掩盖了状态可见性这个真正的判断标准。区分方法回到那张对比表的第一行先问状态到底看不看得见。如果每个时刻的状态都能直接记录比如每天的天气本身就被观测到了那这就是一条马尔可夫链直接用转移概率矩阵就够了硬套 HMM 只会平白多出一层不必要的假设。只有当状态藏在幕后、手上只有观察值时HMM 才有用武之地。这个判断顺序不能颠倒先看状态可见性再看数据形态能省掉大量返工。5. HMM 的用武之地为什么语音、图像和基因序列都爱它资料列了四类应用语音识别、图像识别、自然语言处理、生物信息学。它们看起来差得很远却有同一个结构特征手上有一串能观测到的序列背后有一串看不见的状态序列而且状态之间的切换大致只跟当前状态有关。只要一个问题是这个形状HMM 就有插手的地方。5.1 语音识别听得见的声音听不见的发音状态一段语音录下来你得到的是一串按时间排列的声学特征这是观察值序列。而你真正想知道的是说话人此刻发的是哪个音、处在哪个发音状态这些是看不见的。同一个人说同一个音每次的波形都不会完全一样不同的人说不同的音波形也可能撞车。观察值和状态之间不是一一对应恰好符合 HMM 的设定。发音状态之间的切换也不是乱跳的一个音发完通常接某几类音而不是随便接。这种“下一个状态只跟当前状态有关”的规律用转移概率就能刻画。于是语音识别就被拆成两件事——用转移概率描述发音状态怎么走用观察值概率描述某个发音状态会生成什么样的声学特征。两层随机一叠加正好对上 HMM 的双重结构。5.2 图像识别与自然语言处理把答案藏在状态序列里图像识别里也有类似的结构。一张图切成若干区域之后每个区域能提取出颜色、纹理、边缘这些可观测的特征但“这块区域到底是什么类别”往往不是直接给出的需要根据特征去推断。相邻区域之间还存在上下文关系前一块区域的判断会影响后一块。把类别当作状态、把特征当作观察值这套逻辑就接上了 HMM 的框架。自然语言处理更典型。你看到的是一个词接一个词这是观察序列而每个词背后的词性、实体类别、语义角色是隐藏状态。词和词性之间不是一一对应同一个词在不同句子里可以是不同词性同一个词性下面也挂着大量不同的词。词性之间的转移同样有规律比如限定词后面更可能跟名词而不是动词。序列标注这件事本质上就是在观察序列已知的条件下推断最可能的状态序列。这几个场景的共同点值得强调它们的难点不在“每个位置单独判断”而在“整条序列要彼此协调”。单独看一个词、一块区域、一帧音频信息往往不够把前后文放在一起答案才浮出来。HMM 的转移概率提供的正是这种前后协调的约束。5.3 生物信息学一段 DNA 里的隐藏注释生物信息学里的序列动辄成千上万个字符四种碱基的排列本身是可观测的但哪些片段是编码区、哪些是调控区并不能从单个字符上看出来。把“这段序列处在什么功能状态”当作隐藏状态把碱基当作观察值就构成了一个标准的 HMM 结构。这类问题的价值在于隐藏状态的划分往往比单个字符的取值更有意义。研究人员关心的是整段序列的功能归属而不是某个位置上的字母是什么。HMM 提供的推断方式恰好是从可见的字符序列反推不可见的功能区段这比逐位做规则匹配更贴合实际。四类应用放在一起看可以得到一条粗略的筛选标准如果一个问题能拆成“可见序列 不可见状态 状态间有转移规律”这三段HMM 就是一个值得尝试的候选只要缺一段就得重新考虑。6. 什么时候该请 HMM 上场什么时候趁早换路判断要不要用 HMM我习惯按顺序问四个问题答完基本就有结论了。第一个问题我关心的那个东西是能直接观测到的还是只能间接推断的如果它本身就被记录下来了比如每天的天气、每笔订单的金额那它就是状态本身直接用马尔可夫链或者普通分类模型就行加一层隐藏状态纯属自找麻烦。只有当它是幕后的、需要通过观察值反推的时候HMM 才有位置。第二个问题状态之间的切换是不是大致只跟当前状态有关如果明显存在长程依赖比如当前状态受十几步之前的影响很大那马尔可夫性这个前提就站不住硬套会让结果失真。这时候要么把状态设计得更细把历史信息折进状态里要么换一类能处理长依赖的方法。第三个问题状态数和观察值取值大概是什么规模状态数一多转移概率矩阵会按平方增长观察值概率矩阵会按乘积增长。规模小的时候还好规模一大参数数量和所需数据量都会迅速膨胀。如果状态数还没想清楚就先动手建模后面很容易陷入调不动的困境。第四个问题我有没有足够的观察序列来估计这些概率转移概率和观察值概率都不是凭空写出来的需要从数据里统计。序列太短、样本太少估出来的概率会非常不稳模型看起来能用实际一跑就偏。把这四个问题对应到具体场景大致是这样场景特征更适合的选择状态可直接观测只关心下一步走向马尔可夫链用转移概率矩阵状态不可观测但有较长观察序列HMM两层概率一起估状态不可观测且依赖很久以前的历史需要能处理长依赖的序列模型状态数极多、样本极少先简化状态设计别急着上模型每个位置独立判断就够不需要前后协调普通分类方法更轻便这里有一条血泪经验状态设计是这类模型里最容易翻车的一步而不是算法本身。状态划得太粗不同情况被塞进同一个状态观察值概率会被搅成一锅粥怎么调都不收敛状态划得太细每个状态下的样本少得可怜概率估出来全是噪声。我见过不止一次问题不在模型选错而在状态定义从一开始就没想清楚。还有一点容易被忽略HMM 的输出是一串概率推断不是一个确定的答案。它告诉你“这条状态路径的可能性最大”而不是“真相必然如此”。把它当成黑匣子直接采信风险不小把它当成一个带置信度的参考反而好用。从那以后我每次碰到序列问题都强制先走一遍“状态可见吗、依赖有多长、规模多大、数据够不够”这四步再决定要不要请 HMM 上场。这四步花不了几分钟却能省掉后面好几天的返工。这份资料把马尔可夫性、马尔可夫链、转移概率矩阵、HMM 的双重随机过程和摸彩球实例串成了一条完整的线配合上面这套判断顺序一起看概念和用法就能对得上号。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?