接触机器学习有一段时间了,对于“似然”与“交叉熵”这两个概念,有多位老师都讲到过,但我对这两个概念的理解一直不怎么清晰,看网上的各种资料也是一头雾水,这两天复习的时候终于有所开悟了,于是记录下自己对这两个概念的一点理解
考虑如下一类问题:给定数据集\([\bm{x_1},\bm{x_2},...,\bm{x_n}]\)(\(\bm{x_i}\)是\(m\)维向量)和对应的标签\([y_1,y_2,...,y_n]\)(\(y_i∈\{0,1\}\)),找出一个\(m\)维向量\(\bm{w}\),可以通过\(\bm{w}\)与\(\bm{x_i}\)去估计\(y_i\)的值,使得对数据集的分类效果最好
如何刻画这个“分类效果”呢?首先我们考虑如何通过向量\(\bm{w}\)与\(\bm{x}\)去估计\(y\)的值,为此需要引入一个函数\(f(\bm{x},\bm{w})\),其值域为\((0,1)\),表示特征向量\(\bm{x}\)在\(\bm{w}\)的作用下被分为第1类的概率,由于\(y\)的值非0即1,因此知道了\(\bm{x}\)被分为1的概率,也就知道了\(\bm{x}\)被分为0的概率。我们接下来要做的就是找到\(f(\bm{x},\bm{w})\)的一个具体的表达式
一个广泛应用的表达式是\(f(\bm{x},\bm{w})=\sigma (\bm{w}^T\bm{x})\),其中\(\sigma(z)=\frac{1}{1+e^{-z}}\)是经典的sigmoid函数。这个表达式是怎么来的呢?首先看\(\bm{w}^T\bm{x}\),即\(\bm{w}\)与\(\bm{x}\)的点积,它反映了向量\(\bm{x}\)各个维度上的加权和,因为现实中一个模式可能与多个特征相关,其中有的特征与模式的相关性大,而有的相关性小,因而\(\bm{w}^T\bm{x}\)生动地刻画了各个特征与模式相关性间的差异,而且简单粗暴,具有计算量小的优点。而\(\sigma(z)\)的定义域为\((-∞,+∞)\),值域为\((0,1)\),\(\sigma (\bm{w}^T\bm{x})\)正好可以将值域为\((-∞,+∞)\)的\(\bm{w}^T\bm{x}\)映射到\((0,1)\)中,且单调性保持一致,这样就可以代表\(\bm{x}\)被标注为1的概率了
\(f(\bm{x},\bm{w})\)确定下来了,但是这还不够。假设现在给定了一个\(\bm{w}\),我们不仅要估计\(\bm{x}\)被标注为1的概率,还要估计\(\bm{x}\)被标注为\(y\)的概率\(P(y|\bm{x},\bm{w})\),从而估计整个数据集被标注为\(y_1,y_2,...,y_n\)的概率\(P(y_1,y_2,...,y_n|\bm{w})\)。\(P(y|\bm{x},\bm{w})\)很好求,显然,当y=1时,\(P(y|\bm{x},\bm{w})=f(\bm{x},\bm{w})\);当y=0时,\(P(y|\bm{x},\bm{w})=1-f(\bm{x},\bm{w})\)。但是这样分情况讨论看着很难受,有没有一个统一的函数能表示呢?答案是肯定的,这个函数就是\(f(\bm{x},\bm{w})^y(1-f(\bm{x},\bm{w}))^{1-y}\),其实就是伯努利分布的公式,因此得到\(P(y|\bm{x},\bm{w})=f(\bm{x},\bm{w})^y(1-f(\bm{x},\bm{w}))^{1-y}\)。然后就可以估计\(P(y_1,y_2,...,y_n|\bm{w})\)的值了,由于各个样本都是独立的,因此就是各个\(P(y_i|\bm{x_i},\bm{w})\)的乘积,即\(P(y_1,y_2,...,y_n|\bm{w})=\prod_1^n f(\bm{x_i},\bm{w})^{y_i}(1-f(\bm{x_i},\bm{w}))^{1-y_i}\)
\(P(y_1,y_2,...,y_n|\bm{w})\)确定下来了,接下来就要确定\(\bm{w}\)的值了。如何评价\(\bm{w}\)选取的好坏呢?为此我们再引入一个函数\(p(\bm{w}|y_1,y_2,...,y_n)\)表示估计值为\([y_1,y_2,...,y_n]\)时(\([\bm{x_1},\bm{x_2},...,\bm{x_n}]\)的值固定)权向量为\(\bm{w}\)的概率密度(因为\(\bm{w}\)的取值是连续的),\(p(\bm{w}|y_1,y_2,...,y_n)\)最大的那个\(\bm{w}\)就是我们要找的\(\bm{w}\)。但我们此时只知道由\(\bm{w}\)的值得到估计值\([y_1,y_2,...,y_n]\)的概率,而现在要反过来通过估计值\([y_1,y_2,...,y_n]\)求\(\bm{w}\)的概率密度,怎么办呢?根据贝叶斯公式的积分形式,可以得到:\(p(\bm{w}|y_1,y_2,...,y_n)=\frac{p(\bm{w})P(y_1,y_2,...,y_n|\bm{w})}{\int p(\bm{w})P(y_1,y_2,...,y_n|\bm{w})}\),其中\(p(\bm{w})\)表示\(\bm{w}\)的先验概率密度,然后发现问题了:\(p(\bm{w})\)是多少?回头一想发现,\(p(\bm{w})\)根本没法求!因为\(\bm{w}\)本身就是我们人为引入的一个东西,不是真实存在的,而且就连\(f(\bm{x},\bm{w})\)这个“概率”本身也不是真实的概率,而是我们引入的一个度量方式,只是把它当做“概率”处理而已!既然\(p(\bm{w})\)没法求,那么干脆众生平等算了,让所有\(\bm{w}\)的先验概率密度都相等,这样\(p(\bm{w}|y_1,y_2,...,y_n)\)就只与\(P(y_1,y_2,...,y_n|\bm{w})\)的大小有关了,我们用\(P(y_1,y_2,...,y_n|\bm{w})\)的大小去估计\(p(\bm{w}|y_1,y_2,...,y_n)\)的大小,这个\(P(y_1,y_2,...,y_n|\bm{w})\)就是关于\(\bm{w}\)的似然函数,记为\(L(\bm{w})\),即\(L(\bm{w})=P(y_1,y_2,...,y_n|\bm{w})=\prod_1^n f(\bm{x_i},\bm{w})^{y_i}(1-f(\bm{x_i},\bm{w}))^{1-y_i}\),于是我们的问题转化成了求使得\(L(\bm{w})\)最大的\(\bm{w}\),因此称为最大似然估计(Maximum Likelihood Estimation,MLE),这个问题就可以交给机器学习处理了
由于\(L(\bm{w})\)是一连串在(0,1)之间的数的乘积,如果样本足够大的话,\(L(\bm{w})\)会很小很小,超出了计算机精度的忍受范围,因此我们需要做的不是计算\(L(\bm{w})\)本身,而是计算它的对数\(l(\bm{w})=\sum_1^n(y_i \log f(\bm{x_i},\bm{w})+(1-y_i)\log (1-f(\bm{x_i},\bm{w})))\)(注意\(l(\bm{w})\)一定是负的,因为\(f(\bm{x_i},\bm{w})\)和\(1-f(\bm{x_i},\bm{w})\)都在\((0,1)\)内,因此\(\log f(\bm{x_i},\bm{w})\)和\(\log (1-f(\bm{x_i},\bm{w}))\)都在\((-∞,0)\)内),我们的目标是使得\(l(\bm{w})\)最大,即\(-l(\bm{w})=\sum_1^n-(y_i \log f(\bm{x_i},\bm{w})+(1-y_i)\log (1-f(\bm{x_i},\bm{w})))\)最小,这个\(-l(\bm{w})\)就是经典的交叉熵损失函数(Cross Entropy Loss,CELoss)