最近宾大在 Coursera 上开了一个机器人系列课程,包含了视觉、运动规划、机械设计等课题。我对 SLAM 很感兴趣,于是就选了 Robotics Estimation and Learning 这门课,课程主页是https://www.coursera.org/learn/robotics-learning/。第一周的内容是高斯分布。

一元高斯分布

给定数据集 {xi},可以通过最大似然 (Maximum Likelihood Estimate) 来估计均值 μ 和标准差 σ μ^,σ^=argmaxμ,σp({xi}|μ,σ)

假设所有观测数据独立分布,则有

p({xi}|μ,σ)=i=1Np(xi|μ,σ)

解这个优化函数:

μ^,σ^=argmaxμ,σi=1Np(xi|μ,σ)=argmaxμ,σi=1Nlnp(xi|μ,σ)=argmaxμ,σi=1Nln(12πσexp((xiμ)22σ2))

设损失函数 J(μ,σ)=i=1N((xiμ)22σ2+lnσ),则有 μ^,σ^=argminμ,σJ(μ,σ)

Jμ=μi=1N((xiμ)22σ2+lnσ)=i=1N(μ(xiμ)22σ2)Jσ=σi=1N((xiμ)22σ2+lnσ)=(σ12σ2)(i=1N(xiμ)2)+Nσ)

求极值令两式都为 0,可以解得 μ^=1Ni=1Nxiσ^2=1Ni=1N(xiμ^)2

多元高斯分布

p(x)=1(2π)D2|Σ|12exp(12(xxμμ)TΣ1(xxμμ))

  • D: 维数
  • XX: 数据集
  • μμ: 均值向量
  • Σ: 协方差矩阵 (covariance matrix),对角线元素表示方差,非对角线元素表示变量相关性

用最大似然估计多元高斯分布:

μμ^,Σ^=argmaxμμ,Σp({xxi}|μμ,Σ) 类似于一元高斯分布,假设所有观测独立,则有 μμ^,Σ^=argmaxμμ,Σp(xxi|μμ,Σ)=argmaxμμ,σi=1Nlnp(xi|μμ,σ)=argmaxμμ,σi=1N(12(xxiμμ)TΣ1(xxiμμ)12ln|Σ|+C)=argminμμ,σi=1N(12(xxiμμ)TΣ1(xxi+μμ)+12ln|Σ|)

设损失函数 J(μ,Σμ,Σ)=i=1N(12(xxiμμ)TΣ1(xxi+μμ)+12ln|Σ|)),用类似估计一元高斯分布的方法,令 JμμJΣ 为 0,可以解得 μμ^=1Ni=1NxxiΣ^=1Ni=1N(xxiμμ^)(xxiμμ^)T

高斯混合模型 (Gaussian Mixture Model)

GMM 就是多个高斯模型的加权和:

p(x)=k=1Kwkgk(xx|uuk,Σk)

  • gk: 单个高斯分布函数
  • wk: 权值函数,总和为 1

解 GMM 的方法之一就是 EM (Expectation-Maximization)。

EM 法解 GMM

引入隐含变量 zki=gk(xxi)|uuk,Σkk=1Kgk(xxi)|uuk,Σk

zki 的表示第 i 个观测数据中,第 k 个高斯函数占全体的比重,直观表示如下图

z_k^i 的直观表示
zki 的直观表示

均值向量和协方差矩阵可以通过 zk 估计 μμ^k=1zki=1NzkixxiΣ^k=1zki=1Nzki(xxiμkμk^)(xxiμkμk^)Tzk=i=1Nzki

EM 法具体过程

  1. 初始化 μμ and Σ
  2. 固定 μμΣ,并更新 zki 的值 (E-step)
  3. 固定 zki,并更新 μμΣ 的值 (M-step)
  4. 重复第 2、3 步,直到稳定

全课程的笔记链接