STC/MLLT

GMM的传统建模中,为了避免建模单元参数过多,默认只存储协方差矩阵的对角形式。实际上这里做了一个隐性的假设,就是数据各个维度之间是不相关的,显然,这一点并不成立,但是如果对于每一个GMM建模单元都采取协方差矩阵表示方差的话,模型的整体参数量会急剧增大,所以,对于这一问题,一般有以下两种方式解决:

  • 特征方案,通过去相关算法,使得数据分布更适合用对角矩阵建模,比如DCT和LDA算法
  • 模型方案,根据生成观测的不同状态,使用不同的变换算法

Semi-Tied方法属于第二种,是基于state-specific rotation提出的一种通过在状态之间共享变换矩阵,解决该问题的方式。

State-Specific Rotation

State-Specific Rotation用来对特征矩阵中的相关性建模,顺序如下

  1. 对于每一个状态,有一个协方差矩阵,对它进行特征值分解
  2. 对齐之后,关联到这个状态的特征使用特征向量去相关
  3. 对该状态的多个高斯分量的对角协方差矩阵进行训练

注:特征值分解【spectral decomposition】(线性代数学过)
对于一个状态$s$,它的协方差矩阵 $\Sigma_{full}^s$ 通过下式计算:

其中$\mu^s$表示对齐到该状态的数据均值,$\gammat^s$表示在$t$时刻,来自状态$s$的概率,$\Sigma{full}^s$分解如下

其中,$U^s$是特征向量组成的特征矩阵,$\Lambda^s$是对角矩阵

在训练阶段,对于每一帧观测特征$o_t$,将它关联到状态$s$,做如下变换得到状态相关的观测$o_t^s$:

在一个状态内,对于每一个分量$m$,均值$\mu^{sm}$和方差$\Sigma_{diag}^m$更新如下:

而每一个分量对应的协方差矩阵$\Sigma^m$定义为:

识别阶段,每一个状态下特定分量的似然为

有一点不明白,说这种方式不能用标准的ML算法更新,也和多分量模型无关,有一些解决的方法,暂时没有看懂……

Semi-Tied Covariance Matrices

Semi-Tied理解为,对于识别器中的每一个分量,我们不使用不同的协方差矩阵,换句话说,它的协方差矩阵有两个量组成

  1. 一个分量相关的对角协方差矩阵$\Sigma_{diag}^m$
  2. Semi-Tied的非对角矩阵$H^r$

那么,识别器中每一个GMM中每一个分量的协方差矩阵可以表示为:

由上式,令$A^r = (H^r)^{-1}$:

其中$H^r$可以被多个分量共享,从这里看,STC这种模型也就是比传统的GMM模型多了一个分量间可共享的矩阵$H^r$,使用EM算法更新,需要更新每个分量中的一下几个量:

使用EM算法对以上参数进行估计,定义$Q$函数$Q(\hat{M}, M)$($\hat{}$表示新模型):

上式中去除了一些优化无关的常量和系数,结合$\Sigma^m$的定义,上式展开为

这里做一个化简,原理在“状态绑定之决策树似然公式”中证明过:

得:

于是,$Q(M, \hat{M})$可写成:

在M步,更新的均值,方差如下: