我们常见的PLDA,是出自《Probabilistic Linear Discriminant Analysis for Inferences About Identity》,由Simon J.D. Prince和James H. Elder合著的,我愿称之为 standard PLDA,https://wiki.inf.ed.ac.uk/twiki/pub/CSTR/ListenSemester2201112/prince-iccv07-plda.pdf。
Kaldi所实现的PLDA则是,出自另一篇《Probabilistic Linear Discriminant Analysis》,由Sergey Ioffe所著,https://ravisoji.com/assets/papers/ioffe2006probabilistic.pdf。
除上面两篇之外,还有不少PLDA的变体,例如Kenny提出的HT-PLDA,MAK老师写的Mixture PLDA等。
这些PLDA都是遵循了把向量映射到一个可区分空间中计算相似性,在该空间拉开类间距离和缩小类内距离:

standard PLDA,是生成模型,考虑了eigenvoice、eigenchannels和残差因子,用EM算法训练参数时要依次对本征音和本征信道进行重估。这训练方式类似于联合因子分析(可叫joint-型plda),所以会存在JFA的相似问题,即洗炼后的信道因子会带走了部分说话人因子的信息。而实际上参考minDCF的评价公式,说话人因子信息更为重要,其代表类间信息,能直接降低FAR错误率,提升安全性。兼顾本征音和本征信道的standard PLDA,能有效降低FRR错误率,提升体验性,但低质量的target属实没接受意义,而且FAR不能得到足够的保证。
standard PLDA的映射关系如下:

其中,
是指PLDA训练集中的第
个说话人的第
条矢量;
是身份空间的低维矩阵,是类间空间,代表EigenVoice本征音,表示各种身份的载荷矩阵,它的每列包含类间子空间的基底;
是说话人因子,是隐变量;
是误差空间的低维矩阵,是类内空间,代表EigenChannles本征信道,表示同一身份不同信道变化的残差载荷矩阵,它的每列相当于类内子空间的基底,是协方差特征向量;
是信道因子,是隐变量;
是残留噪声项,表示尚未解释的部分,该项均值为零,方差为对角矩阵Σ,符合高斯分布;
是对角矩阵;
,代表了信号成分,描述了个体间的差异,对应着FAR;
,代表了噪声成分,描述了个体内的差异,对应着FRR。

simplified PLDA和standard PLDA挺相似的,也具有对向量作降维映射能力。虽然simplified PLDA增强对类间空间进行优化,但是simplified PLDA在跨信道上的同一说话人收敛能力下降了。
以上的PLDA,能被称之为standard PLDA系列,因子之间存在较强的相关性,需要联合看待处理。而对于Kaldi的PLDA,则是跳出了说话人因子和信道因子的范式,而是采用类间因子和类内因子,分别对应类间方差和类内方差,所以能称之为two-covariance PLDA。
Kaldi的PLDA是so-called two-covariance PLDA,具体理解可先假设全部数据中的任一样本,其是第
类的第
个样本,均值是:

其中,第类有
个样本,全部数据共有
个类别,共有
个样本;
而全部数据的均值矢量是固定的,我们先提前对每个数据移除均值矢量,则任意一个样本符合以下高斯分布:
接着,假设存在类间因子,该隐变量表征每个类别的虚拟类中心,则其满足:
那第类的某一样本
,该类有
个样本,则其是会满足:
能从上面分布得知,假设还存在类内因子,该隐变量表征着某类别内的任一样本分布,满足:
综上,样本能由类间因子和类内因子表示为:

和
的分布,是分别对应类间方差
和类内方差
,所以该PLDA被称之为two-covariance PLDA。
该PLDA相比于基于standard PLDA系列,优势在于能根据spk2utt划分出每个说话人的样本,能有效兼顾类间和类内的关系。但由于不再存在和
的子空间,所以该PLDA不能实现向量降维,要搭配PCA和LDA等back-end模型提前降维。
目前来说,说话人识别的PLDA主要是以上两种,所以在谈Kaldi的PLDA时,不要把它和standard PLDA混在一起谈,更不要尝试硬套公式和代码,这都是不合理的~
接下来,是本文的重头戏,我们要如何训练PLDA呢?
在论文《Probabilistic Linear Discriminant Analysis》中,是先讲解inference再到learning,我这里反过来,先讲怎样去训练参数。Kaldi的PLDA模型主要参数是类间方差和类内方差,借助EM算法迭代收敛后,保存用于打分阶段的。这里我参考了《Probabilistic Linear Discriminant Analysis》和《A Note on Kaldi's PLDA Implementation》,我把后者的训练推导以我理解过的,更详细地方式展开顺一遍,读者若有不解的地方可以留言备注,https://arxiv.org/pdf/1804.00403.pdf。
我们这里先从上一节样本的表示方法开始。
由于,会有
,所以能理解为PLDA在做参数重估时只有一个隐变量,我们可以先只关注
的分布,之后能同理可得到
的分布。
假设PLDA的参数为,对于给定的可观察变量
,根据极大似然估计有
表示存在最优解参数,其能使得以上的似然函数最大。由于上式有隐变量,且高斯分布存在多个凸函数簇,无法直接解得全局最优解,也就是没法获得闭式解。但由于琴生不等式的成立,我们可用EM算法去进行逼近估算。
根据EM算法,对于完全数据的似然概率,E步有期望:
根据贝叶斯公式和高斯概率密度函数,上式可转换为:

之后要做微分,所以提前把和
省掉,并把右项进一步展开:

截止到现在都很顺利,之后的推导需要一个数学技巧。上式的展开是基于,从另一个角度看,
和
都是满足高斯分布,高斯分布的联合概率依然是高斯分布,所以肯定存在:
根据高斯概率密度函数,又会有:

对比[2]和[3]式,小括号内的完全平方差是能对应起来,同时[2]的第一项对应着[3]的方差,所以能直接求解出方差为(这是个小技巧):
接着把的结果代回去[3]中,可得:

我们又对比[1]和[4]式,基于第一项和第二项,能类比得到均值为(眼要够尖):

截至为止,就可证论文《A Note on Kaldi's PLDA Implementation》中的公式(13)和(14)。
综上,满足高斯分布:
由于给定了已知,所以
的分布也是
的分布:
而隐变量,同理可得,
的分布是:
接下来,终于到EM算法了。
分别对隐变量和
的对数似然概率计算E步,有:

然后,分别对隐变量和
的对数似然概率计算M步,要使极值点最大,分别对各自的Q函数的方差求偏导。
对[6]式求偏导:
令上式等于0,可得新的,

其中,随着PLDA迭代训练的推进,的均值和方差不再是初始的0和
了,而是[5]中的迭代中间值,把[5]式的分布代入到上面即可得下一轮迭代的结果。
同理,对于隐变量的[7]式求偏导,可得新的
,

可证论文《A Note on Kaldi's PLDA Implementation》中的公式(17)和(18)。到这里为止,PLDA的EM训练就全部完成了!
文章来源知乎,本文作者:Leon晋
