「09」真损啊!——损失函数与极大似然估计

前言

上期文章:「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,则  越小,当真实值  为 0 时,输出值  越接近于0,则  越小 (参考下面图中 log(x) 函数的蓝色曲线)。该分段函数整合之后,也就是上面我们所列出的 logloss 损失函数的形式。

Alt

现在我们已经确定了模型的损失函数,那么接下来就是根据这个损失函数,不断优化模型参数从而获得拟合数据的最佳模型。

重新看一下我们在上一篇文章中用到的损失函数,其本质上是 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,即使得损失函数取到最小值。

极大似然估计的一般步骤如下:

  1. 写出似然函数;
  2. 对似然函数取对数,得到对数似然函数;
  3. 求对数似然函数的关于参数组的偏导数,并令其为0,得到似然方程组;
  4. 解似然方程组,得到参数组的值.

负对数似然函数

我们从基本的数理统计出发:设一个随机变量 X 满足伯努利分布,

则 X的概率密度函数为:

因为我们只有一组采样数据 D ,我们可以统计得到 X 和 1 - X 的值,但是 p 的概率是未知的,接下来我们就用极大似然估计的方法来估计这个 p 值。

对于采样数据 D ,其对数似然函数为:

由于对数函数具有单调递增的特点,对数函数和似然函数具有同一个最大值点。我们对等式两边同时取对数,可以方便计算极大似然估计(MLE中直接求导比较困难,通常先取对数再求导,找到极值点)。稍作推导可以得出

这个式子就是极大对数似然的基本形式,我们要做的,就是找到一个概率p,使得式子的值尽可能最大。

可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):

这个式子揭示了交叉熵函数极大似然估计的联系,最小化交叉熵函数的本质就是对数似然函数的最大化。

现在我们可以用求导得到极大值点的方法来求其极大似然估计,首先将对数似然函数对 p 进行求导,并令导数为0,得到

消去分母,得:

所以有

这就是伯努利分布下最大似然估计求出的概率p ,也就是让我们的概率最大的参数值。

参考文献

### 最大似然估计损失函数的作用 在最大似然估计(MLE, Maximum Likelihood Estimation)框架下,损失函数的核心作用是对模型预测值实际观测数据之间的差异进行量化。具体来说,在 MLE 中使用的负对数似然作为损失函数时,其目标是最小化该失以找到最可能生成观察到的数据的参数组合[^1]。 #### 负对数似然作为损失函数的意义 当采用概率分布建模时,假设样本独立同分布 (i.i.d.) 条件成立,则联合概率可以表示为各个单独事件的概率乘积形式。为了简化计算并避免数值溢出问题,通常取自然对数转换成加法运算得到对数似然(log-likelihood),再通过最大化此表达式来优化模型参数。然而,在许多现代算法实现过程中,更倾向于最小化一个正值的目标函数——即转而考虑 **负对数似然(negative log-likelihood)** 作为最终的失度量标准[^2]。 对于连续型随机变量情况下的高斯噪声环境为例: 如果我们的输出 y 是由输入 x 和一些附加误差 ε 所决定,并且我们假定这个误差服从均值为零的标准正态分布 N(0,σ²),那么我们可以写出如下条件密度 p(y|x;θ): \[p(y | x ; \theta)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\left(\frac{(y-\mu(x))^2}{2 \sigma^{2}}}\right)}\] 其中 μ(x) 表达了给定特定 θ 下对应于某个固定 x 值所预期产生的平均响应水平。此时如果我们想要利用上述定义好的概率质量函数去构建相应的极大可能性准则的话就需要引入所谓的 “失项”,也就是常说的那个平方差代价函数: ```python def squared_loss(y_true, y_pred): return ((y_true - y_pred) ** 2).mean() ``` 这实际上就是基于高斯假设推导出来的特殊情形之一。 --- ### 应用场景分析 以下是几个典型的应用领域及其特点说明: #### 图像分类任务中的交叉熵失 在图像识别或者文本处理等领域经常遇到多类别标签标注的问题,这时常用 softmax 函数配合 cross entropy loss 实现端到端训练过程。例如卷积神经网络 CNNs 就广泛应用于此类场合之中: ```python import torch.nn.functional as F loss_fn = nn.CrossEntropyLoss() output = model(data) # output has shape [batch_size, num_classes] target = target.long() loss = loss_fn(output, target) ``` 这里需要注意的是 Cross Entropy Loss 可视为一种特殊的 Negative Log-Likelihood 形式,适用于离散空间内的分类决策边界寻找工作当中。 #### 时间序列预测中的 MSE 失 针对回归性质的时间序列预测问题,比如股票价格走势预估或者是天气预报等方向上,MSE(mean square error) 或 MAE(median absolute error) 这样的简单直观指标往往被选作评估工具。它们本质上反映了不同类型的残差结构特性,同时也间接体现了背后隐含的最大似然思想: ```python criterion = nn.MSELoss() predicted = net(input_var) actual = Variable(torch.randn((bsize))) loss = criterion(predicted, actual) ``` 在这种情况下,默认采用了 Gaussian Distribution 的前提设定,因此对应的最优解路径正好吻合传统意义上的 OLS 方法论逻辑链条上的结论。 --- ### 总结 综上所述,无论是理论层面还是实践操作角度出发,都可以发现最大似然估计方法内部蕴含着深刻的数学哲理以及强大的工程适用价值。通过对合适类型损失函数选择运用,能够有效指导复杂系统的参数调整流程直至收敛至全局极优状态附近区域为止[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵的猫.

小二,给客官上酒!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值