Fisher Vector 基本原理分析

1.背景介绍

Fisher Vector是一种编码方式,它和Bag-of-Words一样,都能够实现对于不等长特征矩阵的归一化。例如,对于一段语音信号,每帧上可以提取MFCC特征(假设有13维),由于每段语音信号的长度不等,导致每段语音的总帧数不等,得到的特征向量可能是这样的:13*N,这里的N就是指总帧数。将特征送入网络进行语音识别时,一般要对特征进行归一化,即处理成统一大小的特征矩阵。今天介绍的Fisher Vector 和之前讲的Bag-of-Words词袋模型都是常规的处理手段。与词袋模型不同的是, Fisher Vector利用的是多个高斯分布对于权重、均值、方差求偏导数得来的。

2.Fisher Vector原理介绍

在讲Fisher Vector之前,先讲GMM高斯混合模型,GMM由多个高斯模型线性叠加而成。混合高斯模型可以用下面的公式表示:

                                                             p(x) = \sum_{k=1}^{K}\pi _{k}N(x|\mu _{k},\Sigma _{k})

其中,p(x)表示数据点x出现的概率,K表示高斯模型的个数,\pi _{k}表示第k个高斯模型的权重,N(x|\mu _{k},\Sigma _{k})表示第k个高斯分布(component),\mu _{k}表示第k个高斯分布的均值,\Sigma _{k}表示第k个高斯分布的方差。理论上,如果component的个数足够多的话,GMM可以逼近任意一种概率分布。这里显然,\pi _{k}满足以下条件:

                                                               \sum_{k=1}^{K}\pi _{k} = 1,0\leqslant \pi _{k}\leqslant 1 

我们在GMM中的目标是:求参数\pi _{k}\mu _{k}\Sigma _{k},使得它确定的概率分布生成这些给定数据点的概率最大。即\Pi_{i=1}^{N}p(x_{i})最大,这里假设各个数据点之间满足独立同分布。这就是似然函数。通常我们转换成对数形式的最大值:

                                                                    \sum _{i=1}^{N}log(p(x_{i}))

我们假设要对T个D维的特征向量进行处理,首先生成GMM模型(K个D维的高斯分布的混合),然后再对原始特征进行编码。假设高斯分布的参数集合为:

                                                                \lambda = \left \{ w_{k},\mu _{k},\Sigma _{k},k=1,...,K \right \}

假设共有T个特征向量,似然函数可以表示为:

                                                                L(x|\lambda ) = \sum_{t=1}^{T}log(p(x_{t}|\lambda))

而其中的高斯分布是多个基高斯分布的混合,所以可以表示为:

                                                                p(x_{t}|\lambda) = \sum_{k=1}^{K}w_{k}*p_{k}(x_{t}|\lambda )

而每个基高斯分布又可以表示为:

                                                          p_{k}(x_{t}|\lambda) = \frac{exp\left \{ {-\frac{1}{2}*(x-\mu _{k})^{'}\Sigma _{k}^{-1}(x-\mu _{k})} \right \}}{2\pi ^{\frac{D}{2}}*|\Sigma _{k}|^{1/2}}

然后,我们再求似然函数L对权重、均值、方差的偏导:

                                                               \frac{\partial L(x|\lambda )}{\partial w_{k}},\frac{\partial L(x|\lambda )}{\partial \mu _{k}^{d}},\frac{\partial L(x|\lambda )}{\partial \sigma _{k}^{d}}

最后,将三者归一化之后,就可以作为Fisher Vector向量。对于每一个D维的高斯分布,都有一个权重w_{k},并且有D个均值求了一次偏导,对D个方差求了一次偏导,所以Fisher Vector向量的维度是K*(2*D+1)。此外,由于所有的权重满足和为1,所以只要求其中K-1个高斯分布的权重的偏导即可。即维度为:(K-1)*(2*D+1) + 1*(2*D) = K*(2D+1)-1

 

参考资料:

[1] Image Classification with the Fisher Vector: Theory and Practice. Jorge Sánchez , Florent Perronnin , Thomas Mensink , Jakob Verbeek.

你可能感兴趣的:(算法设计,机器学习)