最大似然估计是机器学习中最常用的参数估计方法之一。整个建模过程需要一个似然函数来描述在不同模型参数下真实数据发生的概率,似然函数是关于模型参数的函数。最大似然估计就是寻找最优参数,使得观测数据发生的概率最大、统计模型与真实数据最相似。
本专栏之前的文章介绍了线性回归以及最小二乘法的数学推导过程。对于一组训练数据,使用线性回归建模,可以有不同的模型参数来描述数据,这时候可以用最小二乘法来选择最优参数来拟合训练数据,即使用误差的平方作为损失函数。机器学习求解参数的过程被称为参数估计,机器学习问题也变成求使损失函数最小的最优化问题。最小二乘法比较直观,很容易解释,但不具有普遍意义,对于更多其他机器学习问题,比如二分类和多分类问题,最小二乘法就难以派上用场了。本文将给大家介绍一个具有普遍意义的参数估计方法:最大似然估计。
我们以一个赌博的例子来模拟机器学习的概率推理过程。假如你参与了一场赌博,你会被告知一个硬币抛掷10次的正反情况,接下来由你下注,而你只有一次机会,猜对硬币下一次正反情况则赢得100元,猜错则损失100元。这时,你会如何决策?
概率和似然
一般地,硬币有正反两面,如果硬币正反两面是均匀的,即每次抛掷后硬币为正的概率是0.5。使用这个硬币,很可能抛10次,有5次是正面。但是假如有人对硬币做了手脚,比如提前对硬币做了修改,硬币每次都会正面朝上,现在抛10次,10次都是正面,那么下次你绝对不会猜它是反面,因为前面的10次结果摆在那里,直觉上你不会相信这是一个普通的硬币。现在有一人抛了10次硬币,得到6正4反的结果,如何估算下次硬币为正的概率呢?
因为硬币并不是我们制作的,我们不了解硬币是否是完全均匀的,只能根据现在的观察结果来反推硬币的情况。假设硬币上有个参数θ
,它决定了硬币的正反均匀程度,θ = 0.5
表示正反均匀,每次抛硬币为正的概率为0.5,θ = 1
表示硬币只有正面,每次抛硬币为正的概率为1。那么,从观察到的正反结果,反推硬币的构造参数θ
的过程,就是一个参数估计的过程。
概率
抛掷10次硬币可能出现不同的情况,可以是“5正5反”、“4正6反”,“10正0反”等。假如我们知道硬币是如何构造的,即已知硬币的参数θ
,那么出现“6正4反”的概率为:
公式 1
公式1是概率函数,表示已知参数θ
,事实“6正4反”发生的概率。参数θ
取不同的值时,事情发生的概率不同。概率(Probability)函数一般用P
或Pr
表示。
上述过程中,抛10次硬币,要选出6次正面,使用了排列组合。因为“6正4反”可能会出现正正正正正正反反反反
、正正正正正反正反反反
、正正正正反正正反反反
等共210种组合,要在10次中选出6次为正面。假如每次正面的概率是0.6,那么反面的概率就是(1-0.6)。每次抛掷硬币的动作是相互独立,互不影响的,“6正4反”发生的概率就是各次抛掷硬币的概率乘积,再乘以210种组合。
概率反映的是:已知背后原因,推测某个结果发生的概率。
似然
与概率不同,似然反映的是:已知结果,反推原因。具体而言,似然(Likelihood)函数表示的是基于观察的数据,取不同的参数θ
时,统计模型以多大的可能性接近真实观察数据。这就很像开篇提到的赌局,已经给你了一系列硬币正反情况,但你并不知道硬币的构造,下次下注时你要根据已有事实,反推硬币的构造。例如,当观察到硬币“10正0反”的事实,猜测硬币极有可能每次都是正面;当观察到硬币“6正4反”的事实,猜测硬币有可能不是正反均匀的,每次出现正面的可能性是0.6。
似然函数与前面的概率函数的计算方式极其相似,与概率函数不同的是,似然函数是θ
的函数,即θ
是未知的。似然函数衡量的是在不同参数θ
下,真实观察数据发生的可能性。似然函数通常是多个观测数据发生的概率的联合概率,即多个观测数据都发生的概率。单个观测数据发生的可能性为P(θ)
,如果各个观测之间是相互独立的,那么多个观测数据都发生的概率可表示为各个样本发生的概率的乘积。这里稍微解释一下事件独立性与联合概率之间的关系。如果事件A和事件B相互独立,那么事件A和B同时发生的概率是A发生的概率 * B发生的概率
。例如,事件“下雨”与事件“地面湿”就不是相互独立的,“下雨”与"地面湿"是同时发生、高度相关的,这两个事件都发生的概率就不能用单个事件的乘积来表示。两次抛掷硬币相互之间不影响,因此硬币正面朝上的概率可以用各次概率的乘积来表示。
似然函数通常用L
表示。观察到抛硬币“6正4反”的事实,硬币参数θ
取不同值时,似然函数表示为:
公式 2
公式2的图形如下图所示。从图中可以看出:参数θ
为0.6时,似然函数最大,参数为其他值时,“6正4反”发生的概率都相对更小。在这个赌局中,我会猜测下次硬币为正,因为根据已有观察,硬币很可能以0.6的概率为正。
似然函数的一般形式可以用公式2第2行来表示,也就是之前提到的,各个样本发生的概率的乘积。
最大似然估计
理解了似然函数的含义,就很容易理解最大似然估计的机制。似然函数是关于统计模型参数的函数,是描述观察到的真实数据在不同参数下发生的概率。最大似然估计要寻找最优参数,让似然函数最大化。或者说,使用最优参数时观测数据发生的概率最大。
线性回归的最大似然估计
之前的文章提到,线性回归的误差项ε
是预测值与真实值之间的差异(公式3第1行),它可能是一些随机噪音,也可能是线性回归模型没考虑到的一些其他影响因素。线性回归的一大假设(之前的文章也有提到)是:误差服从均值为0的正态分布,且多个观测数据之间互不影响,相互独立。正态分布的概率密度公式如公式3第2行所示。第2行中的Pr(x; μ, σ)
的;
分号强调μ和σ是这个概率密度函数的参数,它和条件概率函数中使用的|
竖线符号表示的意义不同。
公式 3
将ε
代入,并取均值μ
为0,可得到公式3第3行。再把公式3第1行中x
和y
之间的关系代入第3行,可得到第4行,第4行即第i
个单样本发生的概率。
前文提到,似然函数是所观察到的各个样本发生的概率的乘积。一组样本有N个观测数据,其中单个观测数据发生的概率为公式3第4行所示,N个观测数据的乘积如公式4第1行所示。最终,似然函数可以表示成公式4第2行的结构。其中,x
和y
都是观测到的真实数据,是已知的,ω
是需要去求解的模型参数。
公式 4
给定观测数据X
和y
,如何选择参数ω
来使模型达到最优的效果?最大似然估计法告诉我们应该选择一个ω
使得似然函数L
最大。L
中的乘积符号和exp
运算看起来就非常复杂,直接用L
来计算十分不太方便,于是统计学家在原来的似然函数基础上,取了log
对数。log
的一些性质能大大化简计算复杂程度,且对原来的似然函数增加log
对数并不影响参数ω
在何处取得最优值。通常使用花体的l
来表示log似然函数。
公式 5
由于log
对数可以把乘法转换为加法(公式5第2行所示),似然函数中的乘积项变成了求和项,如公式5第3行所示。又因为log
对数可以消去幂,最终可以得到公式5第4行中的函数。
由于我们只关心参数ω
取何值时,似然函数最大,标准差σ
并不会影响ω
取何值时似然函数最大,所以可以忽略掉带有标准差σ
的项。再加个负号,负负得正,原来最大化问题就变成了最小化问题,最终结果为下面的公式6。
公式 6
公式6与之前文章中最小二乘法所优化的损失函数几乎一样,都是真实值 - 预测值
的平方和,可以说是殊途同归。
接下来对公式6参数求解,可以采用之前文章中的求导方法,让导数为0,得到一个矩阵方程,矩阵方程的解即为模型的最优解;也可以使用梯度下降法,求模型的最优解。梯度下降法将在本专栏之后的文章中介绍。
最小二乘与最大似然
前面的推导中发现,最小二乘与最大似然的公式几乎一样。直观上来说,最小二乘法是在寻找观测数据与回归超平面之间的误差距离最小的参数。最大似然估计是最大化观测数据发生的概率。当我们假设误差是正态分布的,所有误差项越接近均值0,概率越大。正态分布是在均值两侧对称的,误差项接近均值的过程等同于距离最小化的过程。
总结
最大似然估计是机器学习中最常用的参数估计方法之一,逻辑回归、深度神经网络等模型都会使用最大似然估计。建模过程需要一个似然函数来描述在不同模型参数下真实数据发生的概率,似然函数是关于模型参数的函数。最大似然估计就是寻找最优参数,使得观测数据发生的概率最大、统计模型与真实数据最相似。