每日AI知识-举例说明HMM隐马尔可夫模型

307 阅读12分钟

马尔科夫模型

隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型特别适用于建模时序数据,即那些随时间变化的数据点序列。

假设存在三种不同类型的骰子:一种是立方体骰子,有6个面,每个面上标有1至6的数字,我们将其简称为“六面骰”;第二种是正四面体骰子,有4个面,每个面上标有1至4的数字,简称“四面骰”;最后一种是正八面体骰子,有8个面,每个面上标有1至8的数字,简称“八面骰”。对于这三种骰子,每个面上数字出现的概率分别为1/6、1/4和1/8。

接下来,想象一个场景:我们闭着眼睛从这三种骰子中随机选取一个进行投掷,投掷后会得到一个介于1到8之间的数字。通过这种方式重复进行骰子的选择和投掷,最终会形成一系列数字。这些数字是显而易见的,并可以直接记录下来,因此这一系列数字被称为“可见状态链”。

与此同时,在每次投掷之前随机选出的骰子类型(即六面骰、四面骰或八面骰)也会形成一个序列。但由于我们是在闭眼状态下选择骰子的,所以无法直接观察到选择了哪种骰子,这个骰子类型的序列因此被称为“隐含状态链”。

在这个实验中,我们产生了两条数据链:“可见状态链”和“隐含状态链”。这两条数据链结合起来构成了隐马尔可夫模型(Hidden Markov Model,简称HMM)。HMM是一种处理时间序列数据的概率模型,它包含了一个随机生成但无法直接观察到的状态序列(用S表示),以及由这些状态产生的可观察结果序列(用O表示)。

在HMM中,每个状态和其产生的观测结果都与特定的时间点相对应。例如,如果有T个时间点,则会产生从S1到ST的状态序列和从O1到OT的观测序列,其中T表示进行投掷的次数。重要的是,状态序列是隐藏的,不能直接观察到,这意味着状态变量是一个隐变量,这也正是HMM名称中“隐”的含义所在。

隐马尔可夫模型中有四个核心要素:

  • 隐含状态:无法直接观察到的状态。
  • 可见状态:由隐含状态产生的可观察结果。
  • 隐含状态间的转换概率:描述从一个状态转移到另一个状态的可能性。
  • 可见状态的输出概率:给定一个隐含状态,产生特定可见状态的概率。

以掷骰子的例子来说,隐含状态的转换概率可以理解为从一个骰子转换到另一个骰子的概率,比如从六面骰转换到四面骰的概率。而可见状态的输出概率则是指在已知骰子类型的情况下,掷出特定数字的概率。

为了更准确地描述HMM,我们可以使用数学符号来定义:

  • 隐含状态集合Q={Q1, Q2, ..., QN},表示N种可能的隐含状态。
  • 观测结果集合V={V1, V2, ..., VM},表示M种可能的观测结果。
  • 状态转移概率矩阵A,是一个N×N的矩阵,其中Aij表示从状态Qi转移到状态Qj的概率。
  • 观测概率矩阵B,是一个N×M的矩阵,其中Bi(Vk)表示在状态Qi下生成观测结果Vk的概率。
  • 初始状态概率向量π,是一个N×1的列向量,πi表示系统开始时处于状态Qi的概率。

综上所述,隐马尔可夫模型由状态转移概率矩阵A、观测概率矩阵B和初始状态概率向量π共同决定,通常用三元组Λ=(A, B, π)来表示。这便是对隐马尔可夫模型的一个基本介绍。

以上参考自 B站Up小黑黑讲AI,www.bilibili.com/video/BV1tu…

HMM 在多个领域都有广泛应用,包括但不限于:

  1. 语音识别:HMM 能够有效地模拟语音信号中的时间序列特性,因此在自动语音识别系统中广泛使用。通过训练 HMM 模型来识别不同的单词或短语,可以实现从语音到文本的转换。

  2. 自然语言处理:在文本处理任务中,如分词、命名实体识别、词性标注等,HMM 可以帮助理解句子结构和上下文信息,提高处理精度。

  3. 生物信息学:HMM 在生物序列分析中非常有用,比如 DNA 序列比对、蛋白质序列分析等。这些应用通常涉及到寻找序列中的模式或者预测某些特定的功能区域。

  4. 手势识别:在人机交互领域,HMM 可以用来识别用户的手势输入,从而实现对设备的控制。

  5. 金融时间序列分析:HMM 还可以应用于金融市场分析,例如股票价格走势预测、市场状态识别等。

  6. 故障检测与诊断:在工业生产过程中,HMM 可以用于监测设备状态,及时发现潜在的故障,进行预防性维护。

  7. 音乐信息检索:在音乐分析领域,HMM 可以帮助识别音乐类型、情感分析等。

HMM 的核心优势在于它可以处理带有不确定性的数据,并且能够很好地捕捉时间序列数据中的依赖关系。通过定义不同的状态及其之间的转移概率,以及每个状态下产生的观测值的概率,HMM 提供了一种强大的框架来解决各种复杂的问题。

下面是一个简单而生动的例子来说明隐马尔可夫模型(HMM)的应用:

天气预报问题

假设我们有一个朋友 Alice,她每天都会根据天气决定穿什么衣服。我们知道她有三种类型的衣物:雨衣、太阳帽和毛衣。同时,我们也知道她生活的城市只有三种天气:晴天、下雨和阴天。但是,Alice 没有直接告诉我们天气情况,我们只能通过她每天穿的衣服来推测当天的天气。

模型定义

  • 隐藏状态:天气情况(晴天、下雨、阴天)
  • 观测值:Alice 穿的衣物(雨衣、太阳帽、毛衣)

参数设置

  1. 初始概率分布:表示第一天是某种天气的概率。
    • 晴天:0.6
    • 下雨:0.2
    • 阴天:0.2
  2. 状态转移概率:表示从一种天气转到另一种天气的概率。
    • 晴天 -> 晴天:0.7
    • 晴天 -> 下雨:0.2
    • 晴天 -> 阴天:0.1
    • 下雨 -> 晴天:0.3
    • 下雨 -> 下雨:0.4
    • 下雨 -> 阴天:0.3
    • 阴天 -> 晴天:0.5
    • 阴天 -> 下雨:0.2
    • 阴天 -> 阴天:0.3
  3. 观测概率:表示在某种天气下,Alice 穿某种衣物的概率。
    • 晴天 -> 太阳帽:0.8
    • 晴天 -> 毛衣:0.1
    • 晴天 -> 雨衣:0.1
    • 下雨 -> 太阳帽:0.1
    • 下雨 -> 毛衣:0.1
    • 下雨 -> 雨衣:0.8
    • 阴天 -> 太阳帽:0.2
    • 阴天 -> 毛衣:0.7
    • 阴天 -> 雨衣:0.1

示例推理

假设我们观察到 Alice 连续三天穿的衣服分别是:

  • 第一天:太阳帽
  • 第二天:雨衣
  • 第三天:毛衣

我们的任务是根据这些观测值,推断这三天的实际天气情况。

  1. 第一天
    • 观测到太阳帽,最可能的天气是晴天(因为晴天穿太阳帽的概率最高)。
  2. 第二天
    • 昨天可能是晴天,今天观测到雨衣,最可能的天气是下雨(因为晴天后下雨的概率较高,且下雨时穿雨衣的概率很高)。
  3. 第三天
    • 昨天可能是下雨,今天观测到毛衣,最可能的天气是阴天(因为下雨后转阴天的概率较高,且阴天穿毛衣的概率很高)。

通过这样的推理过程,我们可以利用 HMM 模型从观测值(Alice 穿的衣物)推断出隐藏的状态(天气情况)。

这个例子展示了 HMM 如何通过已知的观测值来推断隐藏的状态,这是 HMM 在许多实际问题中应用的核心思想。

再举几个不同领域的例子来进一步说明隐马尔可夫模型(HMM)的应用:

1. 语音识别

场景描述

假设我们要构建一个简单的语音识别系统,该系统能够识别三个命令词:“打开”、“关闭”和“停止”。我们有一个麦克风记录用户的语音,并将其转换为一系列音素(音节的基本单元)。

模型定义

  • 隐藏状态:命令词(“打开”、“关闭”、“停止”)
  • 观测值:音素

参数设置

  1. 初始概率分布:表示用户第一次发出某个命令的概率。
    • 打开:0.4
    • 关闭:0.3
    • 停止:0.3
  2. 状态转移概率:表示从一个命令词转到另一个命令词的概率。
    • 打开 -> 打开:0.5
    • 打开 -> 关闭:0.2
    • 打开 -> 停止:0.3
    • 关闭 -> 打开:0.3
    • 关闭 -> 关闭:0.4
    • 关闭 -> 停止:0.3
    • 停止 -> 打开:0.2
    • 停止 -> 关闭:0.3
    • 停止 -> 停止:0.5
  3. 观测概率:表示在某个命令词下,用户发出某个音素的概率。
    • 打开 -> “d”:0.2
    • 打开 -> “k”:0.3
    • 打开 -> “a”:0.5
    • 关闭 -> “g”:0.4
    • 关闭 -> “b”:0.3
    • 关闭 -> “i”:0.3
    • 停止 -> “t”:0.4
    • 停止 -> “i”:0.3
    • 停止 -> “z”:0.3

示例推理

假设我们记录到用户连续发出了以下音素序列:

  • 第一个音素:d
  • 第二个音素:a
  • 第三个音素:k

我们的任务是根据这些观测值,推断用户发出的命令词。

  1. 第一个音素
    • 观测到“d”,最可能的命令词是“打开”(因为“打开”时发出“d”的概率较高)。
  2. 第二个音素
    • 昨天可能是“打开”,今天观测到“a”,最可能的命令词仍然是“打开”(因为“打开”时发出“a”的概率较高)。
  3. 第三个音素
    • 昨天可能是“打开”,今天观测到“k”,最可能的命令词仍然是“打开”(因为“打开”时发出“k”的概率较高)。

通过这样的推理过程,我们可以利用 HMM 模型从观测值(音素)推断出隐藏的状态(命令词)。

2. 生物信息学

场景描述

假设我们要分析一段 DNA 序列,确定其中的编码区(外显子)和非编码区(内含子)。我们只知道 DNA 序列中的碱基(A、C、G、T),但不知道哪些部分是编码区,哪些部分是非编码区。

模型定义

  • 隐藏状态:编码区(外显子)、非编码区(内含子)
  • 观测值:DNA 碱基(A、C、G、T)

参数设置

  1. 初始概率分布:表示序列开始时处于某个状态的概率。
    • 编码区:0.5
    • 非编码区:0.5
  2. 状态转移概率:表示从一个状态转到另一个状态的概率。
    • 编码区 -> 编码区:0.9
    • 编码区 -> 非编码区:0.1
    • 非编码区 -> 编码区:0.1
    • 非编码区 -> 非编码区:0.9
  3. 观测概率:表示在某个状态下,出现某个碱基的概率。
    • 编码区 -> A:0.25
    • 编码区 -> C:0.25
    • 编码区 -> G:0.25
    • 编码区 -> T:0.25
    • 非编码区 -> A:0.3
    • 非编码区 -> C:0.2
    • 非编码区 -> G:0.2
    • 非编码区 -> T:0.3

示例推理

假设我们有一段 DNA 序列:

  • 第一个碱基:A
  • 第二个碱基:C
  • 第三个碱基:G
  • 第四个碱基:T

我们的任务是根据这些观测值,推断这段序列中的编码区和非编码区。

  1. 第一个碱基
    • 观测到“A”,编码区和非编码区的可能性相当(因为初始概率相同)。
  2. 第二个碱基
    • 昨天可能是编码区或非编码区,今天观测到“C”,非编码区的可能性略高(因为非编码区发出“C”的概率较高)。
  3. 第三个碱基
    • 昨天可能是非编码区,今天观测到“G”,非编码区的可能性仍然较高。
  4. 第四个碱基
    • 昨天可能是非编码区,今天观测到“T”,非编码区的可能性仍然较高。

通过这样的推理过程,我们可以利用 HMM 模型从观测值(DNA 碱基)推断出隐藏的状态(编码区或非编码区)。

3. 金融时间序列分析

场景描述

假设我们要分析一只股票的价格走势,判断股票是否处于牛市或熊市。我们只知道每天的收盘价,但不知道市场的整体趋势。

模型定义

  • 隐藏状态:牛市、熊市
  • 观测值:股票收盘价的变化(涨、跌)

参数设置

  1. 初始概率分布:表示市场开始时处于某个状态的概率。
    • 牛市:0.5
    • 熊市:0.5
  2. 状态转移概率:表示从一个状态转到另一个状态的概率。
    • 牛市 -> 牛市:0.9
    • 牛市 -> 熊市:0.1
    • 熊市 -> 牛市:0.1
    • 熊市 -> 熊市:0.9
  3. 观测概率:表示在某个状态下,股票收盘价变化的概率。
    • 牛市 -> 涨:0.8
    • 牛市 -> 跌:0.2
    • 熊市 -> 涨:0.2
    • 熊市 -> 跌:0.8

示例推理

假设我们记录到股票连续几天的收盘价变化:

  • 第一天:涨
  • 第二天:涨
  • 第三天:跌
  • 第四天:涨

我们的任务是根据这些观测值,推断市场处于牛市还是熊市。

  1. 第一天
    • 观测到“涨”,最可能的市场状态是牛市(因为牛市时股票上涨的概率较高)。
  2. 第二天
    • 昨天可能是牛市,今天观测到“涨”,最可能的市场状态仍然是牛市。
  3. 第三天
    • 昨天可能是牛市,今天观测到“跌”,虽然牛市时股票下跌的概率较低,但考虑到前一天是牛市,市场仍然可能是牛市。
  4. 第四天
    • 昨天可能是牛市,今天观测到“涨”,最可能的市场状态仍然是牛市。

通过这样的推理过程,我们可以利用 HMM 模型从观测值(股票收盘价变化)推断出隐藏的状态(市场趋势)。

这些例子展示了 HMM 在不同领域的应用,通过定义合适的模型参数,可以从观测数据中推断出隐藏的状态,从而解决实际问题。

注意,虽然我上面举了这么多例子,但是,我依然没有说明隐马尔科夫链模型(HMM)到底是如何计算的。

这个挖个坑,以后填。