前言
上期文章:「07」回归的诱惑:深入浅出逻辑回归 中 , 我们介绍了逻辑回归的原理,组成和优缺点,并探讨了分类的本质含义。在这一期,我们会继续07的部分,从逻辑回归开始,引出机器学习中最重要的概念——参数学习。
还记得我们的线性回归是如何学习直线方程参数的吗?
- 最小二乘法(多元情况下叫做正规方程)
- 梯度下降法
关于梯度下降,在之后的优化方法综述中会详细讲述,这里我们聚焦参数学习的本质——损失函数最小化。之前我们只是用到了梯度下降法来进行损失函数的最小化(求最小的值),但是却没有解释为什么求最小值就可以得到问题的解。这里我们详细的展开讲一讲损失函数,以及逻辑回归中的极大似然估计。
什么是损失函数
损失函数(Loss Function),是用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常意味着模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。更深入的定义和解释,大家可以参考李航老师的《统计学习方法》,这里我们先讲讲它的作用。
从学习任务的类型出发,可以从广义上将损失函数分为两大类——回归损失和分类损失。在分类任务中,我们要从类别值有限的数据集中预测输出,比如给定一个手写数字图像的大数据集,将其分为 0~9 中的一个。而回归问题处理的则是连续值的预测问题,例如给定房屋面积、房间数量以及房间大小,预测房屋价格。
在有监督学习中,损失函数刻画了模型和训练样本的匹配程度。假设训练样本的形式为(xi, yi),其中 xi∈X表示第i个样本点的特征,yi∈Y表示该样本点的标签。参数为θ的模型可以表示为函数,模型关于第i 个样本点的输出为。为了刻画模型输出与样本标签的匹配程度,定义的损失函数越小,表明模型在该样本点匹配得越好。
还记得我们上一篇文章讲到的逻辑回归吗?它就是一种叫做似然损失的函数在分类任务上的应用。对二分类问题,Y={1,−1},我们希望sign f(xi,θ)=yi,最自然的损失函数是0-1损失,即
0-1损失函数(zero-one loss)
0-1损失是指预测值和目标值不相等为1, 否则为0:
特点:
(1)0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用于我们日常的任务
(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足 时认为相等,
0-1损失函数能够直观地刻画分类的错误率,但是由于其非凸、非光滑的特点,使得算法很难直接对该函数进行优化。0-1损失的一个代理损失函数是Hinge损失函数:
Hinge损失函数是0-1损失函数相对紧的凸上界,且当fy≥1时,该函数不对其做任何惩罚。Hinge损失在fy=1处不可导,因此不能用梯度下降法进行优化,而是用次梯度下降法(Subgradient Descent Method)。0-1损失的另一个代理损失函数是Logistic损失函数:
也可以写作
Logistic损失函数也是0-1损失函数的凸上界,且该函数处处光滑,因此可以用梯度下降法进行优化。但是,该损失函数对所有的样本点都有所惩罚,因此对异常值相对更敏感一些。当预测值时,另一个常用的代理损失函数是交叉熵(Cross Entropy)损失函数:
交叉熵损失函数也是0-1损失函数的光滑凸上界。这四种损失函数的曲线如图所示(其他几个损失我们在后续文章会讲到)
我们必须知道,世上没有一个适合所有机器学习算法的损失函数。针对特定问题选择损失函数涉及到许多因素,比如所选机器学习算法的类型、是否易于计算导数以及数据集中异常值所占比例。
为什么要最小化损失函数
我们知道,在逻辑回归中最小化目标函数,可以得到让分类结果最准确的参数值。那么到底为什么使目标(损失)函数最小化就可以得到最优的结果呢?这里给出更深入的解释。
首先,对于任何机器学习问题,都需要先明确损失函数,逻辑回归模型也不例外,在遇到回归问题时,通常我们会直接想到如下的损失函数形式 (平均误差,也叫做平方损失 MSE):
但在逻辑回归模型要解决的二分类问题中,损失函数式什么样的呢?先给出这个损失函数的形式,可以看一看思考一下,然后再做解释。
这个损失函数通常称作为 对数损失 (logloss),也叫做Logistic损失(发现了吗,这就是我们上面提到的0-1损失的上界之一)。这里的对数底为自然对数 e ,其中真实值 是有 0/1 两种情况,而推测值
由于借助对数几率函数,其输出是介于0~1之间连续概率值。
简单代入几个值,我们不难发现,当真实值 时,第一项为0,当真实值
时,第二项为0,所以,这个损失函数其实在每次计算时永远都只有一项在发挥作用。这个时候,我们就可以把它转换为一个加强版的为0-1损失函数来理解:
不难发现,当真实值 y 为1时,输出值 越接近1,则 L 越小,当真实值
为 0 时,输出值
越接近于0,则 L 越小 (参考下面图中 log(x) 函数的蓝色曲线)。该分段函数整合之后,也就是上面我们所列出的 logloss 损失函数的形式。
现在我们已经确定了模型的损失函数,那么接下来就是根据这个损失函数,不断优化模型参数从而获得拟合数据的最佳模型。
重新看一下我们在上一篇文章中用到的损失函数,其本质上是 L 关于模型中线性方程部分的两个参数 w 和 b 的函数:
其中,
现在的学习任务转化为数学优化的形式即为:
这个可微的形式,就是传说中的极大似然估计。有同学可能要问了:不是极大吗?这里怎么是求min呢?主要原因是,加一个负号,可以更方便地在数学上进行求解)
接下来,我们从极大似然估计说起,解开损失函数的本质——最优化。
极大似然估计
什么是似然函数?
给定一个概率分布的参数的值,似然函数就对应了这个概率分布的参数取这个值的时候,在这个概率分布中抽样所得的数据恰好是我手里这堆数据的概率(或者叫可能性,也就是likelihood)。
引用一个知乎上的解释:
直观理解:如果我们观察到一个现象(数据),那么这个现象出现的概率就应该比那些没有出现的现象(数据)出现的概率要高。也就是说,假设“如果我们观察到一个现象,那么其出现的概率应该是最大的” 是合理的,而似然函数最大化是为了逼近这个假设。
形式理解:在一定条件下,最大化对数似然目标函数等价于最大化 P(θ|X),而 P(θ|X) 就是我们的学习目标:给定训练数据 X 的条件下,找到最可能出现的参数 θ 。
在机器学习中,似然函数是一种关于模型中参数的函数。“似然性(likelihood)”和"概率(probability)"词意相似,但在统计学中它们有着完全不同的含义:概率用于在已知参数的情况下,预测接下来的观测结果;似然性用于根据一些观测结果,估计给定模型的参数可能值(就是上一章我们讲到的参数学习)。
Probability is used to describe the plausibility of some data, given a value for the parameter. Likelihood is used to describe the plausibility of a value for the parameter, given some data.
—from wikipedia
其数学形式表示为:
假设X是已有的数据,它的概率分布fx依赖于参数θ,则似然函数表示为
为什么要求极大值?
统计上,因为我们希望得到的概率越大越好,因此概率越接近于1,则函数整体值越接近于0,即使得损失函数取到最小值。
极大似然估计的一般步骤如下:
- 写出似然函数;
- 对似然函数取对数,得到对数似然函数;
- 求对数似然函数的关于参数组的偏导数,并令其为0,得到似然方程组;
- 解似然方程组,得到参数组的值.
负对数似然函数
我们从基本的数理统计出发:设一个随机变量 X 满足伯努利分布,
则 X的概率密度函数为:
因为我们只有一组采样数据 D ,我们可以统计得到 X 和 1 - X 的值,但是 p 的概率是未知的,接下来我们就用极大似然估计的方法来估计这个 p 值。
对于采样数据 D ,其对数似然函数为:
由于对数函数具有单调递增的特点,对数函数和似然函数具有同一个最大值点。我们对等式两边同时取对数,可以方便计算极大似然估计(MLE中直接求导比较困难,通常先取对数再求导,找到极值点)。稍作推导可以得出
这个式子就是极大对数似然的基本形式,我们要做的,就是找到一个概率p,使得式子的值尽可能最大。
可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):
这个式子揭示了交叉熵函数与极大似然估计的联系,最小化交叉熵函数的本质就是对数似然函数的最大化。
现在我们可以用求导得到极大值点的方法来求其极大似然估计,首先将对数似然函数对 p 进行求导,并令导数为0,得到
消去分母,得:
所以有
这就是伯努利分布下最大似然估计求出的概率p ,也就是让我们的概率最大的参数值。
参考文献
- 《机器学习》周志华
- 《动手学深度学习》MXNet Community
- An Introduction toStatistical Learning with Applications in R
- CSDN:负对数似然(negative log-likelihood)
- 知乎:常见的损失函数(loss function)总结
- 百面机器学习,葫芦娃