从马尔可夫到RNN:深入理解序列预测的核心演进之路

160 阅读2分钟

从马尔可夫到RNN:深入理解序列预测的核心演进之路

本文整理自学习笔记,旨在深入探讨序列数据预测的核心问题,并梳理从简单的自回归模型、马尔可夫模型,到更强大的隐变量自回归模型(以RNN为代表)的演进思想。

序言:序列预测的根本挑战

在机器学习领域,我们经常面对序列数据,例如一段文字、一首乐曲的音符、或者一支股票随时间变化的价格。对于这类数据,一个核心的任务就是 预测序列的下一个元素

image.png

用数学语言来描述,假设我们有一个序列 X1,X2,...,XtX_1, X_2, ..., X_t,我们的目标是建模以下概率分布:

xtP(xtxt1,...,x1)x_t \sim P(x_t | x_{t-1},...,x_1)

当然,我们可以使用回归模型进行预测。但这个模型的挑战在于,随着时间的推移,tt 会不断增大,模型的输入序列 X1,...,XtX_1, ..., X_t 会变得越来越长。我们需要一个有效的方法来处理这种可变长度的、可能无限增长的依赖关系。

方法一:目光短浅的“马尔可夫”模型(自回归模型)

一个最直观、最简单的想法是:未来只与最近的过去有关

我们不必追溯到“宇宙大爆炸”时期的数据来预测下一秒的股价,也许只看最近几分钟或几小时的数据就足够了。这就是著名的 马尔可夫假设(Markov Assumption)

基于这个假设,我们将无限长的历史依赖简化为一个固定长度的依赖。我们假设序列的下一个元素 Xt+1X_{t+1} 只依赖于它前面的 τ\tau 个元素。

xtP(xtxt1,...,xtτ)x_t \sim P(x_t | x_{t-1},...,x_{t-\tau})
xt=f(xt1,...,xtτ)x_t = f(x_{t-1},...,x_{t-\tau})

这种模型通常被称为 自回归模型(Autoregressive Model, AR) 。当 τ=1\tau=1 时,它就是最简单的 一阶马尔可夫模型

优点 (Pros):

  • 简单高效:模型需要处理的输入维度是固定的 (τ\tau),这使得我们可以直接使用标准的前馈神经网络(如MLP)进行建模,结构简单,训练直接。

缺点 (Cons):

  • 目光短浅,记忆力有限:这种模型无法捕捉长期依赖关系。例如,在处理自然语言时,一句话的结尾可能依赖于句首的某个词。如果这个依赖超出了窗口 τ\tau 的范围,模型就会“遗忘”掉这个关键信息,从而做出错误的预测。

方法二:引入“记忆”的隐变量自回归模型

为了克服自回归模型的“健忘症”,我们需要一种机制来“记住”整个过去的历史信息。但我们又不想让模型的输入无限增长,怎么办呢?

答案是:将所有历史信息压缩成一个固定大小的“摘要”或“记忆”

这个“摘要”就是 隐变量(Latent Variable) ,我们通常用 hth_t 来表示。hth_t 包含了从序列开始到当前时刻 tt 的所有关键信息。

这种模型的运作方式如下:

  1. 记忆更新 (State Update) :在每个时间步 tt,模型接收当前输入 XtX_t 和上一时刻的记忆 ht1h_{t-1},然后将它们整合起来,生成新的记忆 hth_t
ht=g(ht1,xt1)h_t = g(h_{t-1}, x_{t-1})
xtP(xtht)x_t \sim P(x_t | h_t)
  1. 进行预测 (Prediction) :模型基于当前更新后的记忆 hth_t 来预测下一个元素 Xt+1X_{t+1}
x^t+1=f(ht+1)\hat{x}_{t+1} = f(h_{t+1})

这里的 hth_t 是一个抽象的、由模型自行学习的变量。它就像一个黑匣子,通过复杂的计算和非线性变换,将历史的精髓存储在一个稠密的向量中。

image.png

优点 (Pros):

  • 拥有记忆:理论上,隐变量 hth_t 可以捕捉从开始到现在的全部历史信息,从而解决长期依赖问题。

缺点 (Cons):

  • 模型复杂,训练困难:如何设计函数 ggff?如何确保 hth_t 能够有效地“记住”信息并传递下去?这使得模型的设计和训练变得更加复杂。

循环神经网络(RNN):隐变量模型的经典实现

循环神经网络(Recurrent Neural Network, RNN)正是隐变量自回归模型的杰出代表。

方法二可以处理所有的数据并保留记忆,这也就造成了训练困难的问题。

RNN 的核心结构与我们上面描述的隐变量模型完全一致。在 RNN 中:

  • 隐变量 hth_t 就是 RNN 单元的 隐藏状态(Hidden State)
  • 函数 gg 就是 RNN 单元内部的计算逻辑(通常是一个线性变换加上一个非线性激活函数,如 Tanh)。

RNN 通过一个循环的结构,在每个时间步处理 (当前输入 Xt, 上一时刻隐藏状态 ht-1),并输出 (当前预测, 当前隐藏状态 ht)。这个循环的结构确保了输入序列的长度是固定的。

在这里我们有一个前提假设:平稳性假设。 序列背后的规律是不变的,也就是过去的数据背后的规律是可以预测明天的。

因此,我们的终极目标:拥有一个能预测任何序列的概率模型

P(x1,,xT)=t=1TP(xtxt1,...x1)P(x_1, \dots, x_T) = \prod_{t=1}^{T} P(x_t | x_{t-1},...x_1)

马尔可夫模型:以自回归模型为例。在自回归模型中,使用跨度τ\tau来代替TT,只要结果近似正确,则满足马尔可夫条件。

τ=1\tau = 1时,为一阶马尔可夫模型:

P(x1,,xT)=t=1TP(xtxt1)当 P(x1x0)=P(x1)P(x_1, \dots, x_T) = \prod_{t=1}^{T} P(x_t | x_{t-1}) \quad \text{当 } P(x_1 | x_0) = P(x_1)

对于离散值有很好的效果,使用条件概率公式和全概率公式可以求得:

P(xt+1xt1)=xtP(xt+1,xt,xt1)P(xt1)=xtP(xt+1xt,xt1)P(xt,xt1)P(xt1)=xtP(xt+1xt)P(xtxt1)\begin{aligned} P(x_{t+1} | x_{t-1}) &= \frac{\sum_{x_t} P(x_{t+1}, x_t, x_{t-1})}{P(x_{t-1})} \\ &= \frac{\sum_{x_t} P(x_{t+1} | x_t, x_{t-1}) P(x_t, x_{t-1})}{P(x_{t-1})} \\ &= \sum_{x_t} P(x_{t+1} | x_t) P(x_t | x_{t-1}) \end{aligned}

这个结果说明:已知一步转移概率可以推导出任意多步概率。

在笔记的推导中,我们看到了一个重要的结论:一个带有状态转移的隐变量模型,理论上可以拟合任意的序列概率分布

而隐变量模型的核心在于,它假设当前时刻的预测 XtX_t 仅仅依赖于当前的隐藏状态 hth_t,而 hth_t 又仅仅依赖于上一时刻的隐藏状态 ht1h_{t-1} 和上一时刻的输入 Xt1X_{t-1}。通过引入这个隐藏状态作为中介,模型巧妙地将对整个历史的依赖,转化为了对上一时刻状态的依赖。

通过在所有可能的隐藏状态路径上进行求和(或积分),模型可以恢复出原始的、复杂的条件概率。这证明了其强大的表达能力。

PS:

一阶马尔可夫模型是一种最简单的自回归模型。

隐马尔可夫模型是一种经典且具体的隐变量自回归模型:状态之间的转移是通过明确的概率矩阵实现的。

RNN也是隐变量自回归模型:状态之间的转移是通过复杂的矩阵计算和非线性函数实现的,是一种“黑箱”。

总结与展望

让我们回顾一下这次的思维旅程:

  1. 我们从最基本的 序列预测问题 P(Xt+1Xt,...,X1)P(X_{t+1} | X_t, ..., X_1) 出发。
  2. 为了简化问题,我们提出了 自回归模型,它基于 马尔可夫假设,只看固定长度的过去。这很高效,但“记性不好”。
  3. 为了解决长期依赖问题,我们引入了 隐变量(隐藏状态) 的概念,用一个固定大小的“记忆”来压缩全部历史信息,这催生了 隐变量自回归模型
  4. 我们发现,RNN 正是这种思想的完美物理载体,它通过循环更新隐藏状态来保留和传递记忆。

当然,基础的 RNN 自身也存在问题,比如梯度消失和梯度爆炸,这使得它在实践中仍然难以捕捉非常长的依赖。这也正是后续更强大的模型,如 长短期记忆网络(LSTM)门控循环单元(GRU) ,乃至彻底改变序列建模领域的 Transformer 诞生的原因。

但理解从马尔可夫到 RNN 的演进,是踏入现代序列建模世界的关键第一步。

声明: 除特殊注明外,本文中的所有插图均引自阿斯顿·张、扎卡里·C. 利普顿、李沐、亚历山大·J. 斯莫拉所著的《动手学深度学习》一书,并参考了其官方在线版本。强烈推荐读者阅读原著。

官方链接: zh.d2l.ai