在Fisher Vector(1)中介绍了线性核,为了满足不同的需求,实际应用中会使用多种多样的核函数,Fisher Kernel就是其中的一种。
Fisher Kernel
此时仍旧对于一个
(1,−1)
(1,−1)的二分类问题,我们要学习
P(x,y)=P(x|y)P(y)
P(x,y)=P(x|y)P(y)
因为 
故
P(x,y)=P(x|y)P(y)=P(X|θy)P(y)
P(x,y)=P(x|y)P(y)=P(X|θy)P(y)。
则 
若
P(y)=P(y¯)
P(y)=P(y¯),那么上式可写为
P(y|x)=σ(lnP(x|θy¯)−lnP(x|θy))
P(y|x)=σ(lnP(x|θy¯)−lnP(x|θy))
对
lnP(x|θy)
lnP(x|θy)做一阶泰勒展开,有
lnP(x|θy)≈lnP(x|θ)+(θy−θ)ln′P(x|θ)
lnP(x|θy)≈lnP(x|θ)+(θy−θ)ln′P(x|θ)
相应的有
lnP(x|θy¯)≈lnP(x|θ)+(θy¯−θ)ln′P(x|θ)
lnP(x|θy¯)≈lnP(x|θ)+(θy¯−θ)ln′P(x|θ)
将这两个展开式带入上式:
P(y|x)=σ((θy−θy¯)ln′P(x|θ))
P(y|x)=σ((θy−θy¯)ln′P(x|θ))
令
Ux=ln′P(x|θ)=∂∂θlnP(x|θ)
Ux=ln′P(x|θ)=∂∂θlnP(x|θ),这就是Fisher Score. 故
P(y|x)=σ((θy−θy¯)Ux)=σ((θ1−θ−1)Ux)
P(y|x)=σ((θy−θy¯)Ux)=σ((θ1−θ−1)Ux)
这里引入一个Kullback–Leibler divergence的概念,也叫做相对熵,这个值通常用来计算两个分布之间的距离,比如
θ1和θ−1
θ1和θ−1之间的距离为:
DKL(θ1||θ−1)=∫∞−∞P(x|θ1)lnP(x|θ1)P(x|θ−1)dx
DKL(θ1||θ−1)=∫−∞∞P(x|θ1)lnP(x|θ1)P(x|θ−1)dx
而
∫∞−∞P(x|θ)∂∂θlnP(x|θ)dx=∫∞−∞P(x|θ)∂∂θP(x|θ)P(x|θ)dx=∂∂θ∫∞−∞P(x|θ)dx=0
∫−∞∞P(x|θ)∂∂θlnP(x|θ)dx=∫−∞∞P(x|θ)∂∂θP(x|θ)P(x|θ)dx=∂∂θ∫−∞∞P(x|θ)dx=0
根据上面的一阶展开式可知如果做一阶展开相对熵为
0
0,故对
lnP(x|θ1)在θ−1
lnP(x|θ1)在θ−1处进行二阶展开
lnP(x|θ1)≈lnP(x|θ−1)+(θ1−θ−1)ln′P(x|θ−1)+(θ1−θ−1)2∂2lnp(x|θ−1)2∂θ−1
lnP(x|θ1)≈lnP(x|θ−1)+(θ1−θ−1)ln′P(x|θ−1)+(θ1−θ−1)2∂2lnp(x|θ−1)2∂θ−1
故
DKL(θ1||θ−1)=∫∞−∞P(x|θ1)lnP(x|θ1)P(x|θ−1)dx=∫∞−∞P(x|θ1)lnP(x|θ1)−P(x|θ1)lnP(x|θ−1)dx=∫∞−∞P(x|θ1)((θ1−θ−1)ln′P(x|θ−1)+∂2lnp(x|θ−1)2∂θ−1(θ1−θ−1)2dx
DKL(θ1||θ−1)=∫−∞∞P(x|θ1)lnP(x|θ1)P(x|θ−1)dx=∫−∞∞P(x|θ1)lnP(x|θ1)−P(x|θ1)lnP(x|θ−1)dx=∫−∞∞P(x|θ1)((θ1−θ−1)ln′P(x|θ−1)+∂2lnp(x|θ−1)2∂θ−1(θ1−θ−1)2dx
假设
,故
所以
DKL(θ1||θ−1)=(θ1−θ−1)2∫∞−∞P(x|θ1)∂2lnp(x|θ−1)2∂θ−1dx
DKL(θ1||θ−1)=(θ1−θ−1)2∫−∞∞P(x|θ1)∂2lnp(x|θ−1)2∂θ−1dx
这里再引入Fisher信息矩阵
I(θ)=∫P(x|θ)∂2∂θlnP(x|θ)2dx
I(θ)=∫P(x|θ)∂2∂θlnP(x|θ)2dx, 故
DKL(θ1||θ−1)=(θ1−θ−1)2I(θ1)
DKL(θ1||θ−1)=(θ1−θ−1)2I(θ1)
(这一段我也不是很明白π__π,可以看看维基百科)根据相对熵可以对
θ
θ指定一个先验分布,可以看出,当
θ1和θ1
θ1和θ1相当接近的时候,相对熵较小,因而概率较大(这点是原博说的,没看明白)。 可以定义
P(θ)=e(θ1−θ−1)2I(θ)
P(θ)=e(θ1−θ−1)2I(θ)
这时就可以根据最大后验概率来计算
θ
θ,类似的,最终可以得到
P(y∣x)=σ(∑i=1Nλi(UTXiI−1UX)))
P(y∣x)=σ(∑i=1Nλi(UXiTI−1UX)))
与线性核函数类似,这里令
K(Xi,X)=UTXiI−1UX
K(Xi,X)=UXiTI−1UX,称为Fisher Kernel。
说了这么多,终于到重点了,可以看出Fisher Kernel将原特征
x
x通
Ux=∂∂θlnP(x|θ)
Ux=∂∂θlnP(x|θ)映射到另一个空间,映射后得到的Fisher score也就是Fisher Vector。很多文献介绍Fisher Vector的时候都直接给了计算公式,然后说似然函数的参数的变化非常有判别性所以用作特征。我个人认为与其这么理解,还不如把Fisher Vector看作一种映射或者变换比较简单。
别忘了,前文提到Fisher Vector通常和高斯混合模型搭配使用,一般流程是:

所以当给定训练集特征
x1,x2,..,xm∈Rd
x1,x2,..,xm∈Rd,先训练高斯混合模型,得到参数
θ=(μk,σk,πk)k=1,...,K
θ=(μk,σk,πk)k=1,...,K
p(x|θ)=∑k=1Kπkp(x|μk,σk)
p(x|θ)=∑k=1Kπkp(x|μk,σk)
下一步利用
Ux=∂∂θlnP(x|θ)
Ux=∂∂θlnP(x|θ),分别计算对三个参数求导,并将结果串联,得到
(∂∂μklnP(x|θ),∂∂σklnP(x|θ),∂∂πklnP(x|θ))k=1,...K
(∂∂μklnP(x|θ),∂∂σklnP(x|θ),∂∂πklnP(x|θ))k=1,...K
这个
2K(d+1)
2K(d+1)维的向量就是最终的特征,有的时候不计算
∂∂πklnP(x|θ)
∂∂πklnP(x|θ),最终的特征就是
2Kd
2Kd维。
from: http://bucktoothsir.github.io/blog/2014/11/27/10-theblog/