GMM模型

概述

现有的高斯模型有单高斯模型(SGM)和高斯混合模型(GMM)两种。从几何上讲,单高斯分布模型在二维空间上近似于椭圆,在三维空间上近似于椭球。 在很多情况下,属于同一类别的样本点并不满足椭圆分布的特性,所以我们需要引入混合高斯模型来解决这种情况。

在DNN兴盛之前,高斯混合模型(GMM, Gaussian Mixture Model)广泛应用在语音识别的声学模型建模中,即使现在,在训练DNN模型之前依然需要通过GMM模型进行迭代,以及进行强制对齐。因此想要对语音识别技术有一定的了解,对于GMM模型的了解是必不可少的。

单高斯模型

如果多维变量X服从高斯分布时,它的概率密度函数(PDF)定义为:
$$
\mathrm { N } ( \mathrm { x } | \mu , \Sigma ) = \frac { 1 } { ( 2 \pi ) ^ { D / 2 } } \frac { 1 } { ( | \Sigma | ) ^ { 1 / 2 } } \exp \left[ - \frac { 1 } { 2 } ( x - \mu ) ^ { T } \Sigma ^ { - 1 } ( x - \mu ) \right]
$$

在上述定义中,x是维数为D的样本向量,$ \mu $是模型期望,$ \Sigma $是模型协方差。对于单高斯模型,可以明确训练样本是否属于该高斯模型,所以我们经常将$ \mu $用训练样本的均值代替,将$ \Sigma $用训练样本的协方差代替。

高斯混合模型

高斯混合模型,就是数据可以看作是从多个高斯分布中生成出来的。每个GMM由K个高斯分布组成,每个高斯分布称为一个组件(Component),这些组件线性加成在一起就组成了GMM的概率密度函数:
$$
\mathrm { p } ( \mathrm { x } ) = \sum _ { k = 1 } ^ { K } p ( k ) p ( x | k ) = \sum _ { k = 1 } ^ { K } \pi _ { k } N ( x | \mu _ { k } , \Sigma _ { k } )
$$
其中$ \pi _ {k} $是样本数据属于第k个子模型的概率。

根据上面的式子,如果我们要从GMM分布中随机地取一个点,需要两步:

  • 随机地在这K个组件中选一个,每个组件被选中的概率实际上就是它的系数$ \pi_k $;
  • 选中了组件之后,再单独地考虑从这个组件的分布中选取一个点。

在已知概率密度函数的情况下,要估计其中参数的过程被称作参数估计。我们可以利用最大似然估计来确定这些参数,GMM的似然函数如下:
$$
\sum _ { i = 1 } ^ { N } \log { \sum _ { k = 1 } ^ { K } \pi _ { k } N ( x _ { i } | \mu _ { k } , \Sigma _ { k } ) }
$$

EM算法进行GMM参数估计

对于高斯混合模型,参数包括$ \pi, \mu, \Sigma $。直接进行模型估计比较困难所以我们使用EM算法来求解这些参数。EM算法通常分成两步:

  • E步,根据当前的参数$ \pi, \mu, \Sigma $,计算每个样本在每个高斯分量上的后验概率。
  • M步,根据当前的后验概率分布,更新参数$ \pi, \mu, \Sigma $。

E-M算法:

  1. 初始化模型参数。

  2. E步,计算每个样本由各个组件生成的概率。对于样本$ x _ {i} $来说,它由第k个组件生成的概率为:
    $$
    \gamma ( \mathrm { i } , \mathrm { k } ) = \frac { \pi _ { k } N \left( x _ { i } | \mu _ { k } , \Sigma _ { k } \right) } { \sum _ { j = 1 } ^ { K } \pi _ { j } N \left( x _ { i } | \mu _ { j } , \Sigma _ { k j } \right) }
    $$
    在上面的概率公式中,我们假定$ \pi $,$ \mu $和$ \Sigma $均是已知的,它们的值来自于初始化值或者上一次迭代。

  3. M步,估计每个组件的参数。由于每个组件都是一个标准的高斯分布,可以很容易的求出最大似然所对应的参数值:
    $$
    { N _ { k } = \sum _ { i = 1 } ^ { N } \gamma ( \mathrm { i } , \mathrm { k } ) }
    $$
    $$
    { \pi _ { k } = \frac { N _ { k } } { N } }
    $$
    $$
    { \mu _ { k } = \frac { 1 } { N _ { k } } \sum _ { i = 1 } ^ { N } \gamma ( \mathrm { i } , \mathrm { k } ) x _ { i } }
    $$
    $$
    \Sigma _ { k } = \frac { 1 } { N _ { k } } \sum _ { i = 1 } ^ { N } \gamma ( \mathrm { i } , \mathrm { k } ) \left( x _ { i } - \mu _ { k } \right) \left( x _ { i } - \mu _ { k } \right) ^ { T }
    $$

0%