GMM:高斯混合模型的数学推导笔记(上)

———————————————————————————————————————————————————————————————————————————

注:在OpenCV中有背景提取的函数,在OpenCV中BackgroundSubtractor类型下面的几个函数中BackgroundSubstractorMOG2就是对高斯混合模型的C++实现。如果想看源代码可以直接去OpenCV文件夹下自行查找。另外,还有一个函数BackgroundSubstractorKNN,我测试的效果比前一个更好,后面会介绍KNN对应的模型。

———————————————————————————————————————————————————————————————————————————

本文介绍高斯混合模型(Gaussian mixture model,简称GMM)及其推导。从数学角度来看待该模型。该模型是对单一高斯概率密度函数的扩展延伸。可以对任意形状的密度分布进行平滑的近似。其在图像处理领域,可以实现提取背景图像。

∮第一部分 单一高斯概率密度函数的参数估测法

假设一组d维度的点,i=1,2,3....n,如果这些点的分布近似椭圆球形,那么我们可以使用高斯密度函数进行刻画:




其中: μ为中心点,∑ 代表此密度函数的共变异矩阵,这些参数决定了函数形状的中心,宽幅,走向等等。

注释:共变异矩阵也就是协方差矩阵,分别为mn标量元素的列向量随机变量XY,二者对应的期望值分别为μ与ν,这两个变量之间的协方差定义为m×n矩阵
                                         (来自维基百科)


最佳的用来描述这些点的参数值的计算方法,则可以采用概率论中的极大似然估计(MLE,Maximum Likelihood Estimation)来计算。在上述概率密度分布函数下,假设Xi为相互独立的事件,那么发生X={x1,x2,x3...xn}的概率密度为


由于X已经发生,因此我们只需要找出μ和∑即可使得p(X;μ,∑)有最大值。使用极大似然估计MLE,转化到计算J(μ,∑)的最大值上去。

GMM:高斯混合模型的数学推导笔记(上)_第1张图片

想求得μ的最佳结果,有最值问题可知,J对μ,∑分别计算偏导数即可:


GMM:高斯混合模型的数学推导笔记(上)_第2张图片

令等式为零,解得


对于∑的计算可以参考高等分析的资料,结果为


∮第二部分.高斯混合密度函数的参数估计法

第一部分中的结果是基于椭球状的分布假设之上的,如果不满足该假设,那么就需要用到数个高斯函数的加权平均来表示。以三个高斯函数为例



其概率密度函数的参数(α1,α2,α3,μ1,μ2,μ3,∑1,∑2,∑3),并且α1,α2,α3,要满足以下条件:

α1+α2+α3=1

以此种方式表示的概率密度函数称之为“高斯混合密度函数”或“高斯混合模型(Gaussian Mixture Model)”,简称GMM。


在该模型中,为了简化讨论,假设各个高斯密度函数的协方差矩阵可表示为:


GMM:高斯混合模型的数学推导笔记(上)_第3张图片

此时单一的高斯密度函数可以表示为:


讲义中省略下表j,从而简化方程。对方程中的各个参数进行微分计算,从而得到:

GMM:高斯混合模型的数学推导笔记(上)_第4张图片

当协方差矩阵为一个常数和一个单位阵的乘积时,上面的P(x)可以简化为


此时p(x)的参数θ=(α1,α2,α3,μ1,μ2,μ3,∑1,∑2,∑3),参数个数为1+1+1+d+d+d+1+1+1=6+3d


同理根据极大似然估计MLE,可以求得θ的最佳解。由:

GMM:高斯混合模型的数学推导笔记(上)_第5张图片

为方便计算,引入数学符号:

贝叶斯公式:

GMM:高斯混合模型的数学推导笔记(上)_第6张图片

因此βj(x)可以看成是下列事件的概率:观测到的随机数x,则对应的是有第j个高斯密度函数所产生的。欲求J(θ)的最大值,使用微分:

GMM:高斯混合模型的数学推导笔记(上)_第7张图片


两式分别为零得:

GMM:高斯混合模型的数学推导笔记(上)_第8张图片

此外,计算微分时,α(WOW,在csdn上输入数学字符时太痛苦了),依旧需要满足之和为1的条件,因此,使用拉格朗日乘数法(Lagrange Multiplier),并且新的目标函数设为Jnew

GMM:高斯混合模型的数学推导笔记(上)_第9张图片



三个式子相加,从而

GMM:高斯混合模型的数学推导笔记(上)_第10张图片

进而得到(1)(2)(3)三个含有6+3d个未知变量的方程。使用迭代法进行计算,得到最后的结果。

算法流程:

1.设定一个起始参数数值θ=(α1,α2,α3,μ1,μ2,μ3,σ1^2,σ2^2,σ3^2),讲义中是选用α1=α2=α3=1/3,并使用K-means的方式计算中心点作为,μ1,μ2,μ3;


2.使用θ计算βi(1,2,3...n);


3.计算新的μj:



4.计算新的σj


5.计算新的αj



6.令(里面输错了),如果θ减去新的θ,后的内积小于某个设定数值,结束,否则返回第二步;


该方案能够逐步收敛到局部最大值,但并不一定是全局最大,因此在下一篇文章中给出另一种方法,并给出其证明过程。



你可能感兴趣的:(机器学习,数学模型,模式识别,高斯混合模型,GMM)