在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/