语音识别算法原理文档整理(四)

GMM算法

1. GMM模型:

样本数据x,该数据是有k个高斯混合产生的,每个 GMM 由 K 个 Gaussian 分布组成,每个 Gaussian 称为一个“Component”,这些 Component 线性加成在一起就组成了 GMM 的概率密度函数:
这里写图片描述
根据上面的式子,如果我们要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K个Gaussian Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数 pi(k) ,选中了 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为了已知的问题。
那么如何用 GMM 来做 clustering 呢?其实很简单,现在我们有了数据,假定它们是由 GMM 生成出来的,那么我们只要根据数据推出 GMM 的概率分布来就可以了,然后 GMM 的 K 个 Component 实际上就对应了 K 个 cluster 了。根据数据来推算概率密度通常被称作 density estimation ,特别地,当我们在已知(或假定)了概率密度函数的形式,而要估计其中的参数的过程被称作“参数估计”。

2. 参数与似然函数:

现在假设我们有 N个数据点,并假设它们服从某个分布(记作 p(x)),现在要确定里面的一些参数的值,例如,在 GMM 中,我们就需要确定影响因子pi(k)、各类均值pMiu(k)和各类协方差pSigma(k)这些参数。我们的想法是,找到这样一组参数,它所确定的概率分布生成这些给定的数据点的概率最大,而这个概率实际上就等于这里写图片描述 ,我们把这个乘积称作似然函数 (Likelihood Function)。通常单个点的概率都很小,许多很小的数字相乘起来在计算机里很容易造成浮点数下溢,因此我们通常会对其取对数,把乘积变成加和这里写图片描述 ,得到 log-likelihood function 。接下来我们只要将这个函数最大化(通常的做法是求导并令导数等于零,然后解方程),亦即找到这样一组参数值,它让似然函数取得最大值,我们就认为这是最合适的参数,这样就完成了参数估计的过程。
下面让我们来看一看 GMM 的 log-likelihood function :
这里写图片描述
由于在对数函数里面又有加和,我们没法直接用求导解方程的办法直接求得最大值。为了解决这个问题,我们采取之前从 GMM 中随机选点的办法:分成两步,实际上也就类似于K-means的两步。

3. 算法流程:

  1. E:估计数据由每个 Component 生成的概率(并不是每个 Component 被选中的概率):对于每个数据来说,它由第 K个 Component 生成的概率为
    这里写图片描述
    其中N(xi | μk,Σk)就是后验概率 。这里写图片描述
  2. M:通过极大似然估计可以通过求到令参数=0得到参数pMiu,pSigma的值。具体请见http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
    这里写图片描述
    其中 这里写图片描述,并且 也顺理成章地可以估计为这里写图片描述

重复迭代前面两步,直到似然函数的值收敛为止。

先根据上一轮的模型参数对语音特征数据进行对齐,得到每一帧的特征所对应的HMM状态(在kaldi中是transition-id),也就是forced alignment。Forced alignment的结果是对应于特征序列的状态序列。
  举个例子:
    当前的特征序列是o1, o2, o3, o4, o5, o6, o7.(每一帧的特征是39维MFCC)
    对应的状态序列是7, 8, 8, 8, 9, 9, 10.(每个数字代表一个HMM state)
  知道了特征序列和其对应的状态序列,我们就可以通过简单的数数来更新HMM的参数——转移概率矩阵A。根据对齐结果,统计每一个HMM状态总共出现了多少次(可以从transition-id得到HMM state-id),统计该状态的每一个转移出现了多少次(一般只有两个转移,转移到自身和转移到下一状态),用每一个转移的出现次数除以该状态的出现次数就得到了转移概率。HMM参数就是这样更新的。
  首先应该明白,在单音素GMM训练中,每一个HMM状态有一个对应的GMM概率密度函数(pdf),所以有多少个HMM状态,就有多少个GMM,也就有多少组GMM参数。在知道了特征序列和对齐序列后,找出某一个HMM状态对应的所有观测(比如状态8对应的o2, o3, o4,在kaldi中则是找到某一transition-id对应的所有观测),也就得到了该状态对应的GMM所对应的所有观测。知道了该GMM对应的所有观测、该GMM的当前参数,就可以根据GMM参数更新公式更新GMM参数了,比如知道了状态8对应的观测o2, o3, o4。Kaldi中所用的GMM参数更新公式如下图所示。
  这里写图片描述

猜你喜欢

转载自blog.csdn.net/bvngh3247/article/details/80778348
今日推荐