【论文阅读笔记】Recursive Unsupervised Learning of Finite Mixture Models

(一)论文地址:

《Recursive Unsupervised Learning of Finite Mixture Models》

这篇文章并不是针对cv领域的高斯混合模型算法,其提出的算法是一个通用框架,其中opencv使用的cv2.createBackgroundSubtractorMOG2这个背景分割类,就是基于本文的理论。

opencv的应用写在这篇论文中:
《Efficient adaptive density estimation per image pixel for the task of background subtraction》

(二)abstract-提要:

对于现有的混合模型算法,有两个开放性问题有待解决:

  1. 如何选取混合模型中的模型数量M;
  2. 如何进行模型参数θ0\theta^0的初始化;

这篇论文针对这两个问题提出了一种新方法,即在更新方程上对权值引入了一个先验密度分布(文中称为prior)作为偏置,先用较多数量模型做随机初始化,然后在更新模型参数的同时,选取模型数量;

(三)Parameter Estimation-参数估计:

3.1 概率密度:

对于由 MM 个模型组成的混合模型,维度为 dd 的向量 x\vec x ,其概率密度为:

P(x;θ)=m=1MπmP(x;θm)P(\vec x;\vec \theta)=\sum_{m=1}^M\pi_mP(\vec x;\vec \theta_m),且 m=1Mπm=1\sum_{m=1}^M\pi_m=1

其中:

  1. θ={π1,,πM,θ1,,θM}\vec \theta=\lbrace \pi_1,…,\pi_M,\vec \theta_1,…,\vec \theta_M \rbrace 是混合模型的参数,也写作 θ(M)\vec \theta(M)
  2. πm\pi_m 是混合模型中第m的模型的权重;
  3. θm\vec \theta_m 在高斯模型中为 {μm,σm}\lbrace \mu_m,\sigma_m \rbrace;

3.2 最大似然估计:

对于一组样本 X={x(1),,x(T)}X=\lbrace \vec x^{(1)},…,\vec x^{(T)} \rbrace,最大似然估计得到的参数估计值为:

θ=argmax(logP(X;θ))\vec \theta=argmax(log P(X;\vec \theta))

由于使用最大似然估计直接求解过于复杂,我们通常使用EM算法去迭代,使得迭代得到的 θt\vec \theta_t 趋近于这个解;

3.3 最大期望估计(EM算法):

算法详解参考我的这篇博客【机器学习基础】EM算法详解及其收敛性证明,这里直接使用推理出的结论;

3.3.1 引入隐藏变量:

对于样本中的每一个 x\vec x(observed,已知观察量),我们分别引入一个隐藏参数(unobserved,未知参数)y={y1,,yM}T\vec y=\lbrace \vec y_1,…,\vec y_M \rbrace^T,用来表示样本 x\vec x 所属混合模型中的哪个模型的分布;

这样由条件概率公式,概率密度函数就可以改写为:

P(x,y;θ)P(\vec x,\vec y;\vec \theta)

=P(y;π1,,πM)P(xy,θ1,,θM)=P(\vec y;\pi_1,…,\pi_M)P(\vec x|\vec y,\vec \theta_1,…,\vec \theta_M)

=m=1MπmymP(x;θm)ym=\prod_{m=1}^M\pi_m^{y_m}P(\vec x;\vec \theta_m)^{y_m}

其中,y\vec y 中的一个 ym\vec y_m11,其余为00,由权重参数π1,,πM\pi_1,…,\pi_M决定;

3.3.2 迭代参数估计值:

首先我们给定参数 θ\vec \theta 初始化估计值为 θ^(0)\hat{\vec \theta}_{(0)},如果我们将所有样本的隐藏变量标记为 Y={y(1),,y(t)}\vec Y=\lbrace \vec y^{(1)},…,\vec y^{(t)} \rbrace,那么第 kk 次迭代得到的参数估计值 θ^(k)\hat{\vec \theta}_{(k)} 就由上一次的估计值 θ^(k1)\hat{\vec \theta}_{(k-1)} 确定:

3.3.2.1 E-step:

构造 QQ 函数:

Q(θ,θ^(k1))Q(\vec \theta,\hat{\vec \theta}_{(k-1)})

=EY(logP(X,Y;θ)X,θ^(k1))=E_Y(log P(X,Y;\vec \theta)|X,\hat{\vec \theta}_{(k-1)})

=YP(YX,θ^(k1))logP(X,Yθ)=\sum_YP(Y|X,\hat{\vec \theta}_{(k-1)})logP(X,Y|\vec \theta)

3.3.2.2 M-step:

QQ 进行最大似然估计:

θ^(k)=argmax(Q(θ,θ^(k1)))\hat{\vec \theta}_{(k)}=argmax(Q(\vec\theta,\hat{\vec \theta}_{(k-1)}))

3.3.2.3 存在的问题:

EM算法如果没有适当的初始化,迭代过程中可能落入局部最大值,而难以收敛到期望的参数估计值;

(四)Model Selection-模型选择:

为了使用EM算法,我们需要定义一个合适的模型数量 MM;混合模型中,如果 MM 过大,容易导致过拟合(over fitting),MM 太小容易导致欠拟合(under fitting);

4.1 最大化函数 JJ

比较实用的模型数量选择原则是构造如下最大化函数:

J(M,θ(M))=logP(X;θ(M))P(M)J(M,\vec \theta(M))=logP(X;\vec \theta(M))-P(M)

其中:

  1. logP(X;θ(M))logP(X;\vec \theta(M)) 是样本的对数最大似然函数,这一部分可以用EM算法最大化;
  2. P(M)P(M) 是惩罚函数,用以将复杂的方程简化(即如果将MM归在参数θ\theta中,方程的求解会变复杂);

(五)Solution Using MAPMAP Estimation:

5.2 估计参数MM的基本过程:

选择参数 MM 的标准步骤为,对参数 MM 的不同的值MsM-s分别使用 MLML(最大似然估计),然后选择能够使得函数 J(M,θ(M))J(M,\vec \theta(M)) 最大的 MM 值;

5.1 引入先验密度分布(prior):

这里我们引入先验分布,将 JJ 函数改写为:

J(M,θ(M))=logP(X;θ(M))+logP(θ(M))J(M,\vec \theta(M))=logP(X;\vec \theta(M))+logP(\vec \theta(M))

如果我们使用Dirichlet先验分布,那么 P(θ(M))P(\vec \theta(M)) 正比于:

expm=1Mcmlogπm=m=1Mπmcmexp\sum_{m=1}^Mc_mlog\pi_m=\prod_{m=1}^M\pi_m^{c_m}

其中,系数 cm=N/2c_m=-N/2NN代表混合模型中每个模型的平均参数数目;

那么整个过程就变成了:

  1. 使用一个较多随机初始化模型( MM 较大)组成的混合模型;
  2. 使用迭代方法(如EM算法)求得 MAPMAP 的解(即参数的估计值);

在迭代过程中,迭代估计值 θ^(k)\hat{\vec \theta}_{(k)} 不断趋近于参数估计值θ^\hat{\vec \theta}(即最大似然方程的解),同时 MM 也会不断减小至模型稳定;

(六)Recursive(Online)Solution:

6.1 最大似然估计:

对于最大似然估计,我们通过:

δδπ^mlogP(X;θ^)=0\frac{\delta}{\delta \hat{\pi}_m}logP(X;\hat{\vec \theta})=0

来获取参数的估计值;

如果我们引入拉格朗日乘子 λ\lambda,那么就有:

δδπ^m(logP(X;θ^)+λ(m=1Mπ^m1))=0\frac{\delta}{\delta \hat{\pi}_m}(logP(X;\hat{\vec \theta})+\lambda(\sum_{m=1}^M\hat{\pi}_m-1))=0

t个样本应该满足:

π^m(t)=1ti=1tom(t)(x(i))\hat{\pi}_m^{(t)}=\frac{1}{t}\sum_{i=1}^to_m^{(t)}(\vec x^{(i)})

其中 o(ownerships)o(ownerships)定义为:

om(t)(x)=π^m(t)Pm(x;θ^)/P(x;θ^(t))o_m^{(t)}(\vec x)=\hat{\pi}_m^{(t)}P_m(\vec x;\hat{\vec \theta})/P(\vec x;\hat{\vec\theta}^{(t)})

6.2 MAPMAP 方法:

类似的,对于 MAPMAP 方法,有:

δδπ^m(logP(X;θ^)+logP(θ)+λ(m=1Mπ^m1))=0\frac{\delta}{\delta \hat{\pi}_m}(logP(X;\hat{\vec \theta})+logP(\vec \theta)+\lambda(\sum_{m=1}^M\hat{\pi}_m-1))=0

对于t个样本:

π^m(t)=1K(i=1tom(t)(x(i))c)\hat{\pi}_m^{(t)}=\frac{1}{K}(\sum_{i=1}^to_m^{(t)}(\vec x^{(i)})-c)

其中:

K=m=1M(i=1tom(t)(x(i))c)=tMcK=\sum_{m=1}^M(\sum_{i=1}^to_m^{(t)}(\vec x^{(i)})-c)=t-Mc,( 注意m=1Mom(t)=1\sum_{m=1}^Mo_m^{(t)}=1

cm=cc_m = -c,即 c=N/2c=N/2

这样的话,就有:

π^m(t)=^mc/t1Mc/t\hat{\pi}_m^{(t)}=\frac{\hat{\prod}_m-c/t}{1-Mc/t}

其中:

^m=1ti=1tom(t)(x(i))\hat{\prod}_m=\frac{1}{t}\sum_{i=1}^to_m^{(t)}(\vec x^{(i)})

6.3 迭代方程:

这样的话,我们就可以通过之前提到的估计方法,利用 om(t+1)(x)o_m^{(t+1)}(\vec x) 获得 om(t)(x)o_m^{(t)}(\vec x) 的迭代值;

同时,对于权重参数 π\pi,有:

π^m(t+1)=π^m(t)+(1+t)1(om(t)(x(t+1))1McTπ^m(t))(1+t)1cT1McT\hat{\pi}_m^{(t+1)}=\hat{\pi}_m^{(t)}+(1+t)^{-1}(\frac{o_m^{(t)}(\vec x^{(t+1)})}{1-Mc_T}-\hat{\pi}_m^{(t)})-(1+t)^{-1}\frac{c_T}{1-Mc_T}

其中,cT=c/Tc_T=c/T;并且我们需要保证 TT 足够大,从而使得 McT<1Mc_T<1;

6.4 初始化和迭代:

π^m(0)=1/M\hat{\pi}_m^{(0)}=1/M ,并且当 π^m(t+1)<0\hat{\pi}_m^{(t+1)}<0时,舍弃第m个模型;

6.5 高斯混合模型中的表达:

最常用的混合模型之一,就是混合高斯模型(Gaussian Mixture);

对于混合高斯模型,概率密度表示为:

Pm(x;θm)=N(x;μm,Cm)P_m(\vec x;\vec \theta_m)=N(\vec x;\vec \mu_m,C_m)μ\mu为均值,CC为协方差矩阵;

那么相应的迭代方程为:

μ^m(t+1)=μ^m(t)+(1+t)1om(t)(x(t+1))π^m(t)(x(t+1)μ^m(t))\hat{\vec \mu}_m^{(t+1)}=\hat{\vec \mu}_m^{(t)}+(1+t)^{-1}\frac{o_m^{(t)}(\vec x^{(t+1)})}{\hat{\pi}_m^{(t)}}(\vec x^{(t+1)}-\hat{\vec \mu}_m^{(t)})

C^m(t+1)=C^m(t)+(1+t)1om(t)(x(t+1))π^m(t)((x(t+1)μ^m(t))(x(t+1)μ^m(t))TC^m(t))\hat{C}_m^{(t+1)}=\hat{C}_m^{(t)}+(1+t)^{-1}\frac{o_m^{(t)}(\vec x^{(t+1)})}{\hat{\pi}_m^{(t)}}((\vec x^{(t+1)}-\hat{\vec \mu}_m^{(t)})(\vec x^{(t+1)}-\hat{\vec \mu}_m^{(t)})^{T}-\hat{C}_m^{(t)})

(七)A Simple Practical Algorithm:

7.1 config:

  1. 我们可以将 α=(1+t)1\alpha=(1+t)^{-1}(称为学习率)简化为 α=1/T\alpha=1/T;也可以采用固定的 α\alpha 值,从而防止 α\alpha 过小并加快背景更新;
  2. cT=αN/2c_T=\alpha N/2
  3. 如果采用带有协方差矩阵的混合高斯模型,那么对于 dd 维输入,有 N=d+d(d+1)/2N=d+d(d+1)/2

7.2 输入:

新的样本数据为 x(t+1)\vec x^{(t+1)} ,进入第 t+1t+1 次迭代;

7.3 当前参数:

tt 次迭代得到的参数估计值为 θ^(t)\hat{\vec \theta}^{(t)}

7.4 计算 ownership'ownership'

om(t)(x(t+1))=π^m(t)Pm(x(t+1);θ^(t))/P(x(t+1);θ^(t))o_m^{(t)}(\vec x^{(t+1)})=\hat{\pi}_m^{(t)}P_m(\vec x^{(t+1)};\hat{\vec \theta}^{(t)})/P(\vec x^{(t+1)};\hat{\vec\theta}^{(t)})

7.5 更新权重π\pi

π^m(t+1)=π^m(t)+α(om(t)(x(t+1))1McTπ^m(t))αcT1McT\hat{\pi}_m^{(t+1)}=\hat{\pi}_m^{(t)}+\alpha(\frac{o_m^{(t)}(\vec x^{(t+1)})}{1-Mc_T}-\hat{\pi}_m^{(t)})-\alpha\frac{c_T}{1-Mc_T}

7.6 取舍模型:

如果有 π^m(t+1)<0\hat{\pi}_m^{(t+1)}<0,则删掉第 mm 个模型,并令 M=M1M=M-1

7.7 更新参数:

7.7.1 更新均值 μ\mu

μ^m(t+1)=μ^m(t)+ωδ\hat{\vec \mu}_m^{(t+1)}=\hat{\vec \mu}_m^{(t)}+\omega\vec\delta

其中:

ω=αom(t)(x(t+1))π^m(t)\omega=\alpha\frac{o_m^{(t)}(\vec x^{(t+1)})}{\hat{\pi}_m^{(t)}}

δ=x(t+1)μ^m(t)\vec \delta=\vec x^{(t+1)}-\hat{\vec \mu}_m^{(t)}

7.7.2 更新协方差矩阵:

C^m(t+1)=C^m(t)+ω(δδTC^m(t))\hat{C}_m^{(t+1)}=\hat{C}_m^{(t)}+\omega(\vec \delta\vec \delta^T-\hat{C}_m^{(t)})

tipsω=min(20α,w)tips:可以让\omega=min(20\alpha,w)

7.8 获得新参数:

这样就得到了新的参数估计值 θ^(t+1)\hat{\vec \theta}^{(t+1)}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章