GMM的传统建模中,为了避免建模单元参数过多,默认只存储协方差矩阵的对角形式。实际上这里做了一个隐性的假设,就是数据各个维度之间是不相关的,显然,这一点并不成立,但是如果对于每一个GMM建模单元都采取协方差矩阵表示方差的话,模型的整体参数量会急剧增大,所以,对于这一问题,一般有以下两种方式解决:
- 特征方案,通过去相关算法,使得数据分布更适合用对角矩阵建模,比如DCT和LDA算法
- 模型方案,根据生成观测的不同状态,使用不同的变换算法
Semi-Tied方法属于第二种,是基于state-specific rotation提出的一种通过在状态之间共享变换矩阵,解决该问题的方式。
State-Specific Rotation
State-Specific Rotation用来对特征矩阵中的相关性建模,顺序如下
- 对于每一个状态,有一个协方差矩阵,对它进行特征值分解
- 对齐之后,关联到这个状态的特征使用特征向量去相关
- 对该状态的多个高斯分量的对角协方差矩阵进行训练
注:特征值分解【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理解为,对于识别器中的每一个分量,我们不使用不同的协方差矩阵,换句话说,它的协方差矩阵有两个量组成
- 一个分量相关的对角协方差矩阵$\Sigma_{diag}^m$
- 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步,更新的均值,方差如下: