【机器学习】EM算法详解

B站视频讲解

EM算法

EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望(expectation);M步,求极大(maximization)。所以这一算法称为期望极大算法(expectation maximization),简称EM算法。概率模型有时既含有观测变量(observable variable),又含有隐变量或者潜在变量(latent variable)。EM算法就是含有隐变量的概率模型参数的极大似然估计法,或极大后验概率估计法。

算法引入

最大似然估计

一个例子:假如你去赌场,但是不知道能不能赚钱,你就在赌场门口等,出来一个人,就问这个人是赚了还是赔了,如果问了10个人都说赚了,那么你就会认为,赚钱的概率肯定是非常大的。那么我们就可以理解这样的问题:

  • 已知:1.样本服从分布的模型,2.观测到的样本

  • 求解:模型的参数

总的来说:极大似然估计就是用样本来估计模型参数的统计学方法。

上面介绍一个粗浅的例子,现在我们引入一个最大似然函数的数学问题:100名学生的身高问题

这个时候,我们可以认为这100个人的身高是满足高斯分布的(正太分布),那么就涉及到两个参数:均值( μ \mu μ)和标准差( δ \delta δ),或者方差( δ 2 \delta ^2 δ2),为了便于表示,这里我们统一使用 θ \theta θ表示,根据极大(最大)似然估计,我们就要找到两个参数的值,使得恰好抽到这100个学生的概率最大。那么数学化则有:

  • 样本集 X = { x 1 , x 2 , ⋯   , x N } , N = 100 X=\{x_1,x_2,\cdots,x_N\},N=100 X={x1,x2,,xN},N=100

  • 概率密度: p ( x i ∣ θ ) p(x_i|\theta) p(xiθ)抽到某个人i(的身高)的概率

  • θ \theta θ是服从分布的参数

  • 独立同分布:同时抽到这100个人的概率就是抽到他们各自概率的乘积。(也就是说,你抽到 x 1 x_1 x1,不会影响抽到 x 2 x_2 x2

那么,我们就有了目标似然函数:
L ( θ ) = ∏ i = 1 m p ( x i ; θ ) L(\theta)=\prod_{i=1}^mp(x_i;\theta) L(θ)=i=1mp(xi;θ)
为了便于计算,我们将等式两边同时取对数有(学过数理统计的友友都应该知道的吧):
l ( θ ) = ∑ i = 1 m log ⁡ p ( x i ; θ ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta) l(θ)=i=1mlogp(xi;θ)
下一步,就是什么样的参数 θ \theta θ能够使得出现当前这批样本(抽到这个100个人)的概率最大,那么就要对 θ \theta θ进行估计了。如何做呢?这就是极大似然估计求解的最基本做法了(取对数,求偏导,令等式为0,求解),已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次实验,观察其结果,利用结果推出参数的大概值。

EM算法引入

问题升级:当然问题不是那么简单,

  • 现在这100个人中,包含的有男生和女生(也就是两个类别,2套参数/2个高斯分布)

  • 男生和女生的身高都服从高斯分布,但是参数不同(均值和方差)

  • 用数学的语言描述:抽取得到的每个样本都不知道是从哪个(男生/女生)分布抽取的

  • 求解目标:男生和女生对应的身高的高斯分布的参数是多少?

那么也就是说,我们加入一个隐变量(是男生,还是女生)。这个时候,传统的极大似然估计就不好解决了,于是就使用EM算法来计算,换句话说,EM算法就是能够计算含有隐变量的极大似然估计算法。让我们继续来看:

我们用Z表示这个隐变量,Z=1或Z=2标记样本来自哪个分布。那么使用之前的最大似然估计函数则有:
l ( θ ) = ∑ i = 1 m log ⁡ p ( x i ; θ ) = ∑ i = 1 m log ⁡ ∑ Z p ( x i , z ; θ ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta) l(θ)=i=1mlogp(xi;θ)=i=1mlogZp(xi,z;θ)
上式中,第二个求和符号就是要考虑的隐变量的情况。这个时候使用极大似然估计(求偏导)就不方便计算了。现在先不从数学公式的角度来说EM算法,我们看一个计算案例:

【机器学习】EM算法详解_第1张图片
假设有赌场中的两个硬币A,B。我们现在想计算出这两个硬币正面朝上的概率分别是多少?现在有n组(上图中有五组)数据(HT的序列,表示硬币的正反面,并且我们不知道是哪个硬币掷出来的)

我们现在先假设两个硬币的分布(二项分布),初始化时数据最好是比较接近实际情况的,否则可能迭代次数比较多(也和你选择的停迭代止阈值有关),有:A:0.6几率正面,记为 θ A \theta_A θA,B:0.5几率正面,记为 θ B \theta_B θB

现在我们来看第一组数据(HTTTHHTHTH),其中:H有5个,T有5个。那么隐变量Z=A和Z=B.那么就有:

p A = C 10 5 0. 6 5 0. 4 10 − 5 p_A=C_{10}^50.6^50.4^{10-5} pA=C1050.650.4105 p B = C 10 5 0. 5 5 0. 5 10 − 5 p_B=C_{10}^50.5^50.5^{10-5} pB=C1050.550.5105

接着我们选择硬币A,B的概率分别是: p a = p A p A + p B = 0.45 p_a=\frac{p_A}{p_A+p_B}=0.45 pa=pA+pBpA=0.45, p b = 1 − p a = 0.55 p_b=1-p_a=0.55 pb=1pa=0.55

现在我们进行E步(求期望):

对硬币A有: 0.45 × 5 T = 2.2 T , 0.45 × 5 H = 2.2 H 0.45\times 5T=2.2T,0.45\times 5H=2.2H 0.45×5T=2.2T,0.45×5H=2.2H

对硬币B有: 0.55 × 5 T = 0.275 T , 0.55 × 5 H = 2.275 H 0.55\times5T=0.275T,0.55\times5H=2.275H 0.55×5T=0.275T,0.55×5H=2.275H

现在我们对这五组数据分别进行这样的计算,有如上图所示的结果。现在我们使用M步对初始的分布参数进行更新,其中的更新方式一看公式就明白了,就是将硬币A中计算出的所有H,T分别加在一起,然后计算各自得占比,如下:

θ ^ A ( 1 ) = 21.3 21.3 + 8.6 ≈ 0.71 , θ ^ B ( 1 ) = 11.7 11.7 + 8.4 ≈ 0.58 \hat{\theta}_A^{(1)}=\frac{21.3}{21.3+8.6}\approx0.71,\hat{\theta}_B^{(1)}=\frac{11.7}{11.7+8.4}\approx0.58 θ^A(1)=21.3+8.621.30.71,θ^B(1)=11.7+8.411.70.58

这就是对这五组数据进行了一次迭代计算,之后就是多次迭代计算,最后输出结果。这样一看EM算法其实就很简单了,但是我们凭什么这么做呢?下面我们就带着问题看看EM算法的推导。

EM算法推导

问题:样本 { x ( 1 ) , ⋯   , x ( m ) } \{x(1),\cdots,x(m)\} {x(1),,x(m)},包含m个独立的样本,其中每个样本i对应的类别z(i)是未知的,所以很难用最大似然估计。
l ( θ ) = ∑ i = 1 m log ⁡ p ( x i ; θ ) = ∑ i = 1 m log ⁡ ∑ Z p ( x i , z ; θ ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta) l(θ)=i=1mlogp(xi;θ)=i=1mlogZp(xi,z;θ)
刚才已经说过,使用最大似然估计比较难求解,本来正常求偏导就可以了,但是现在log后面还有求和,那么就麻烦了。于是我们就是使用EM算法进行求解,下面就是对其进行推导。

EM算法推导

我们现在上式中一部分 l o g ∑ Z p ( x i , z ; θ ) log \sum_Z p(x_i,z;\theta) logZp(xi,z;θ),对其分子分母同时乘 Q ( z ) Q(z) Q(z)有:
log ⁡ ∑ Z p ( x i , z ; θ ) = l o g ∑ Z Q ( z ) p ( x i , z ; θ ) Q ( z ) \log\sum_Zp(x_i,z;\theta)=log\sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)} logZp(xi,z;θ)=logZQ(z)Q(z)p(xi,z;θ)
为什么这么做呢?其实就是为了配凑Jensen不等式(Q(z)是z的分布函数)。这个估计大家都不是很了解,让我们来看看,jensen不等式吧:(需要申明的是,国内与国外定义凹凸函数是不同的,这个大家可以百度一下,不要纠结下面的问题。)
【机器学习】EM算法详解_第2张图片

设f是定义为实数的函数,如果对于定义域内的所有实数x,有f(x)的二次导数大于等于0,那么f就是凸函数(你会说,这明明就是凹函数嘛,不要纠结);如果f是凸函数,X是随机变量,那么: E ( f ( X ) ) > = f ( E ( X ) ) E(f(X))>=f(E(X)) E(f(X))>=f(E(X)),我们来解释一下这个属性,上图的实线f是凸函数,X有0.5的概率选择a,也有0.5的概率选择b(这里是假设选值),那么随机变量X的期望值(均值)就为a和b的中值(0.5a+0.5b)即,E[X]=0.5(a+b)。而E[f(X)]=0.5E[f(a)]+0.5E[f(b)](a和b各有50%的概率取到)。那么从图中可以看出,E[f(X)]>=f(E(X))。,那么对于凹函数,那么就会有: E [ f ( X ) ] < = f ( E [ X ] ) E[f(X)]<=f(E[X]) E[f(X)]<=f(E[X])。现在Jensen的介绍就告一段落。我们再回到EM算法中涉及的算式:

∑ Z Q ( z ) p ( x i , z ; θ ) Q ( z ) \sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)} ZQ(z)Q(z)p(xi,z;θ)可以看成 p ( x i , z ; θ ) Q ( z ) \frac{p(x_i,z;\theta)}{Q(z)} Q(z)p(xi,z;θ)的期望,这又该如何理解呢?我们知道在连续变量的概率密度中计算期望的公式 ∫ x f ( x ) \int xf(x) xf(x),看到这个就不难理解上面的那句话了。下面我们可以设 Y = p ( x i , z ; θ ) Q ( z ) Y=\frac{p(x_i,z;\theta)}{Q(z)} Y=Q(z)p(xi,z;θ),进而化简有:
log ⁡ ∑ Z Q ( z ) p ( x i , z ; θ ) Q ( z ) = log ⁡ ∑ Y P ( Y ) Y = log ⁡ E ( Y ) \log\sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)} =\log\sum_YP(Y)Y=\log E(Y) logZQ(z)Q(z)p(xi,z;θ)=logYP(Y)Y=logE(Y)
这个时候我们就可以利用Jensen不等式了,log函数是凹函数,则有:
log ⁡ E ( Y ) ≥ E ( log ⁡ Y ) = ∑ Y P ( Y ) log ⁡ Y = ∑ Z Q ( z ) log ⁡ ( p ( x i , z ; θ ) Q ( z ) ) \log E(Y)\geq E(\log Y)=\sum_YP(Y)\log Y=\sum_ZQ(z)\log(\frac{p(x_i,z;\theta)}{Q(z)}) logE(Y)E(logY)=YP(Y)logY=ZQ(z)log(Q(z)p(xi,z;θ))
那么对于原极大似然估计则有:
l ( θ ) = ∑ i = 1 m log ⁡ ∑ Z p ( x i , z ; θ ) ≥ ∑ i = 1 m ∑ Z Q ( z ) log ⁡ p ( x i , z ; θ ) Q ( z ) l(\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta)\geq\sum_{i=1}^m\sum_ZQ(z)\log\frac{p(x_i,z;\theta)}{Q(z)} l(θ)=i=1mlogZp(xi,z;θ)i=1mZQ(z)logQ(z)p(xi,z;θ)
这个时候,我们需要计算的就是下界值,我们通过优化这个下界来使得似然函数最大。那么在训练的过程中,我们使得下界一直取最大,那么最后得到的结果就是我们 需要的。那么问题又来了,如何使得不等式取等号呢,在Jensen不等式中等号的成立条件是随机变量是常数的时候(结合上面中的Jensen不等式的图形,思考一下就应该明白了),那么也就是 Y = p ( x i , z ; θ ) Q ( z ) = C Y=\frac{p(x_i,z;\theta)}{Q(z)}=C Y=Q(z)p(xi,z;θ)=C Q ( z ) Q(z) Q(z)是z的分布函数,那么我们根据Y对所有的z进行求和有必然为1(概率和为1):
∑ Z Q ( z ) = ∑ Z p ( x i , z ; θ ) C = 1 \sum_ZQ(z)=\sum_Z\frac{p(x_i,z;\theta)}{C}=1 ZQ(z)=ZCp(xi,z;θ)=1
那么为了使得结果为1,所有的分子的和就等于常数C(与分母相同),那么也就是说,C就是所有的 p ( x i , z ) p(x_i,z) p(xi,z)对z求和。我们可以单独拿出Q(z)来看有:
Q ( z ) = p ( x i , z ; θ ) C = p ( x i , z ; θ ) ∑ Z p ( x i , z ; θ ) = p ( x i , z ; θ ) p ( x i ) = p ( z ∣ x i ; θ ) Q(z)=\frac{p(x_i,z;\theta)}{C}=\frac{p(x_i,z;\theta)}{\sum_Zp(x_i,z;\theta)}=\frac{p(x_i,z;\theta)}{p(x_i)}=p(z|x_i;\theta) Q(z)=Cp(xi,z;θ)=Zp(xi,z;θ)p(xi,z;θ)=p(xi)p(xi,z;θ)=p(zxi;θ)
那么也就是说,Q(z)代表第i个数据是来自 z i z_i zi的概率,这其实就是Estep要做的事情。那么我们来总结一下EM算法:

  1. 初始化分布参数 θ \theta θ
  2. E-step:根据参数 θ \theta θ计算每个样本属于 z i z_i zi的概率(也就是我们的Q)
  3. M-step:根据Q,求出含有 θ \theta θ的似然函数的下界,并最大优化它,得到新的参数 θ \theta θ
  4. 不断的迭代更新下去

EM算法的应用

如高斯混合模型,HMM等。简要介绍一下高斯混合模型(GMM),数据可以看作是从数个Gaussian Distribution中生成出来的,GMM由K个Gaussian分布组成,每个Gaussian成为一个”Component“;类似于k-means方法,求解方式根EM一样,不断迭代更新下去。
个人订阅号
更多编程,人工智能知识等着你
image

你可能感兴趣的:(Machine,Learning,(ML))