Book Notes on Pattern Recognition and Machine Learning (PRML)
在之前的内容中,我们都假设观测数据是独立同分布的。但在实际中,这种假设很多情况下并不成立。这里我们关注一种特殊的情况,那就是时序数据。尽管时序数据并不一定与时间相关,我们还是用过去,未来等称呼来描述关系。
在时序数据中,一个直觉的观点是最近的数据可以比历史上的数据更好地预测未来的结果。最理想的情况是,我们建立一个模型,可以考虑到当前状态之前的所有数据。但此时模型的复杂度会随着时间推移而指数级增长。最基础,最简单的情况是马尔科夫模型,即我们只考虑上一次数据对当前的影响。
但基础的马尔科夫模型约束又太强了,所以我们考虑引入隐变量来泛化模型。我们假设由隐变量 z 决定观测数据 x,而隐变量是马尔科夫链。此时我们对观测数据不做要求,离散或者连续都可以。而隐变量的不同对应接下来要介绍的两种模型。
当隐变量 z 是离散变量时,我们可以得到隐式马尔科夫模型 HMM 。当隐变量和观测变量都服从高斯分布时,我们可以得到线性动态系统 linear dynamical system
最后值得一提的是,我们在这里讨论的都是 stationary 时序分布。也就是说 \(z_n \vert z_{n-1}\) 和 \(z_{i} \vert z_{i-1}\) 的分布是一致的。
在 HMM 中,我们认为隐变量是离散变量。假设隐变量有 K 个状态,我们用长度为 K 的 0-1 向量来表示每一个隐变量,且每次只有一个元素为 1, 其余为0。那么就可以用状态转移矩阵 A 来表示隐变量的变化,即
\[A_{ji} \equiv p(z_{ni}=1| z_{n-1,j}=1),\ where\ 0\leq A_{ji}\leq 1\ ,\ \sum_{i=1}^K A_{ji} = 1\]基于这个转移矩阵 A ,我们可以直接写出相邻两个隐变量之间的条件分布,
\[p(z_{n}\vert z_{n-1}) = \prod_{i=1}^K\prod_{j=1}^K A_{ji}^{z_{n-1,j}z_{ni}}\]只知道条件转移概率是不够的,我们还需要知道初始分布,即 \(p(z_1)\)
\[p(z_1) = \prod_{i=1}^K \pi_i^{z_{1i}}, \quad where\ \pi_i \equiv p(z_{1i}=1)\]现在我们就完整建模了隐变量的变化及分布,下一步是建模观测变量 x 基于隐变量的分布,我们称这个分布为发射分布 (emission distributions)。我们用符号 \(\phi\) 来统一表示控制 \(x\vert z\) 分布的参数。如果 x 是离散变量,\(\phi\) 可以认为是概率表;如果 x 是高斯连续变量,\(\phi\) 可以认为是高斯分布参数。现在我们可以表示出这个条件分布
\[p(x_n\vert z_n,\phi) = \prod_{i=1}^K p(x_n\vert \phi)^{z_{ni}}\]接下来我们就可以表示出观测变量和隐变量的联合分布,即
\[p(X,Z|\theta) = p(z_1|\pi)[\prod_{n=2}^N p(z_n\vert z_{n-1},A)]\prod_{m=1}^N p(x_m\vert z_m,\phi)\]这里 \(X=\{x_1,...,x_N\}, Z = \{z_1,...,z_N\}, \theta = \{\pi,A,\phi \}\) 。自此我们完成了 HMM 的建模。
我们可以先从生成模型的角度来理解 HMM。首先我们根据 \(\pi\) 来随机选择初始隐变量 \(z_1\) 的值,接着根据发射分布参数 \(\phi\) 来采样得到第一个生成数据 \(x_1\) 。同时我们根据转移矩阵 A 结合初始隐变量选择第二个隐变量的值 \(z_2\) ,再采样得到第二个生成数据 \(x_2\) ,以此类推得到一系列隐变量值和对应的一系列生成数据。
在实际中,我们已知一系列的观测数据,需要去确定这些具体的模型参数 \(\theta\) 。这可以通过极大似然结合 EM 算法求解。
在之前提到过,在 LDS 中,我们认为隐变量和观测变量都服从高斯分布,为此可以写出他们的分布
\[z_n\vert z_{n-1} \sim N(Az_{n-1},\Gamma),\qquad x_n\vert z_n \sim N(Cz_n,\Sigma)\]而初始的隐变量 \(z_1\) 同样服从高斯分布,即
\[z_1 \sim N(u_0,V_0)\]此时我们的模型参数 \(\theta = \{A,\Gamma,C,\Sigma,u_0,V_0 \}\)
接下来我们考虑根据已知观测数据 \(\{x_1,...,x_n\}\) 来推断隐变量 \(z_n\) 。我们记
\[\hat{\alpha}(z_n) \equiv p(z_n\vert x_1,...,x_n) \sim N(u_n,V_n), \quad c_n \equiv p(x_n\vert x_1,...,x_{n-1})\]那么我们有
\[c_n\hat{\alpha}(z_n) = p(x_n\vert z_n)\int \hat{\alpha}(z_{n-1})p(z_n\vert z_{n-1})dz_{n-1}\]首先对积分求解,可以得到
\[\int ... dz_{n-1} = N(Z_n\vert Au_{n-1},P_{n-1}), \quad where\ P_{n-1} = AV_{n-1}A^T+ \Gamma\]进一步求解,可以得到我们期望的参数表达式,即
\[u_n = Au_{n-1}+K_n(x_n-CAu_{n-1})\] \[V_n = (I-K_nC)P_{n-1}\] \[c_n = N(x_n\vert CAu_{n-1},CP_{n-1}C^T+\Sigma)\]这里的 K 我们定义为 Kalman gain matrix,即
\[K_n = P_{n-1}C^T(CP_{n-1}C^T+\Sigma)^{-1}\]我们可以从 \(z_{n-1}\) 到 \(z_n\) 的过程来理解上述表达式。我们可以将 \(Au_{n-1}\) 看成基于 \(z_{n-1}\) 的均值结合转移矩阵 A 得到的 \(z_n\) 预测均值。基于这个预测均值,我们进一步得到预测观测 \(CAu_{n-1}\) ,这和真实的观测值 \(x_n\) 显然存在差距。我们用两者之间的误差来修正对 \(z_n\) 均值的预测,Kalman gain matrix 作为系数控制着误差修正程度。