为什么交叉熵损失函数值越小分类效果越好?

本文解析了机器学习中常用的损失函数——平方损失函数与交叉熵损失函数。重点介绍了交叉熵损失函数的由来及其与极大似然估计的关系。

在学习机器学习过程中,我们经常会用到损失函数来判断模型是否在学习,经常使用的损失函数大多是平方损失函数,与交叉熵损失函数。平方损失函数,我们很容易理解为什么值越小分类效果越好。

Loss(w)=1mim(yiyhati)2Loss(w)=1m∑im(yi−yihat)2

很显然,如果预测的越接近,则loss值越小,这个损失函数基本上没有什么疑问。但是由于这个函数不是凸函数,所以被应用的不多,大多数都是使用交叉熵损失函数。
Loss(w)=1mimyilogyhati+(1yi)log(1yhati)Loss(w)=−1m∑imyilogyihat+(1−yi)log(1−yihat)

如果我们同样借助上面的思想,如果预测的越接近,则损失函数越小,很显然这个损失函数满足。但是我相信你绝对不仅仅满足于此,这个损失函数的由来是什么?平方损失很容易想到是两个空间向量的距离,越接近越好。交叉熵损失函数呢?今天就带你进入另一个世界。
此处划重点,交叉熵损失函数来源于参数估计,极大似然估计
分类属于监督学习,是利用有限的样本,来得到整体的样本分布。以二分类为例,
P(Y=1|x)=F(x);P(Y=0|x)=1F(x)P(Y=1|x)=F(x);P(Y=0|x)=1−F(x)

利用样本,来近似估计参数值,我们可以使用极大似然估计。既然是二分类,我们采集的样本一般是独立的,则样本的分布服从二项分布Yb(1,p)Y∼b(1,p),则Y的分布律为,
P(Y=yi)=pyii(1p1yii)P(Y=yi)=piyi(1−pi1−yi)

似然函数为:
Πmipyii(1p1yii)Πimpiyi(1−pi1−yi)

对其取对数,则得到对数似然函数为:
L(w)=imyilogpi+(1yi)log(1pi)L(w)=∑imyilogpi+(1−yi)log(1−pi)

整理一下,pi=F(xi)=yhatipi=F(xi)=yihat,则可得
L(w)=1mimyilogyhati+(1yi)log(1yhati)L(w)=1m∑imyilogyihat+(1−yi)log(1−yihat)

得到似然函数,则为了估计系数w,当L(w)函数取得最大值时,可得到估计值w,取似然函数的对偶形式,minLoss(w)=maxL(w)minLoss(w)=−maxL(w),所以当Loss(w)越小时的w值,就越逼近真实的w值,那么模型拟合的就越好。
欢迎关注我的微信公共号

这里写图片描述

### 3.1 损失函数的定义与作用 损失函数是衡量模型预测输出与真实标签之间差异的重要工具,其值小,说明模型的预测能力强。在机器学习中,损失函数不仅用于评估模型性能,还直接指导参数优化过程。通过计算损失函数对模型参数的导数,可以确定如何调整参数以降低损失值,从而使模型更准确地拟合数据[^2]。 例如,在回归任务中,均方误差(MSE)是一种常用的损失函数,它计算预测值与真实值之间的平方差的平均值: $$ \text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i^{\text{pred}} - y_i^{\text{true}})^2 $$ 该损失函数的梯度提供了参数更新的方向和幅度,使优化算法能够逐步逼近最优解[^4]。 ### 3.2 损失函数的优化目标 损失函数的核心目标是最小化预测误差,从而提升模型的泛化能力。在分类任务中,交叉熵损失被广泛使用,特别是在结合Softmax函数时,它可以衡量模型输出的概率分布与真实标签分布之间的差异。交叉熵损失低,意味着模型的预测概率接近真实标签分布,模型的分类效果越好[^3]。 为了防止过拟合,可以在损失函数中引入正则化项,如L1或L2正则化,它们通过对参数大小进行惩罚来限制模型复杂度。这种方式有助于提高模型在未见过的数据上的表现,增强其鲁棒性[^2]。 ### 3.3 梯度下降法与参数更新 在实际训练过程中,梯度下降法是最常见的优化方法之一。该方法利用损失函数对参数的导数来更新模型参数: $$ \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta L(\theta_t) $$ 其中 $ \theta $ 是模型参数,$ \eta $ 是学习率,而 $ \nabla_\theta L(\theta) $ 是损失函数对参数的梯度。每次迭代中,参数沿着负梯度方向更新,使得损失函数值不断减小,最终趋向最小值点[^1]。 对于某些特定形式的损失函数,如线性回归中的均方误差,可以直接求解析解,即通过令导数为零的方式一步求得最优参数。然而,大多数深度学习模型由于结构复杂、损失函数非凸,必须依赖数值优化方法进行迭代求解[^1]。 ### 示例代码:PyTorch中的损失函数计算 以下示例展示如何使用PyTorch计算均方误差损失,并利用自动求导机制获取梯度: ```python import torch import torch.nn as nn # 定义输入和目标 y_pred = torch.tensor([2.5, 3.0, 4.5], requires_grad=True) y_true = torch.tensor([2.0, 3.0, 5.0]) # 使用均方误差损失 loss_fn = nn.MSELoss() loss = loss_fn(y_pred, y_true) # 反向传播计算梯度 loss.backward() # 输出梯度 print("Gradients of predictions:", y_pred.grad) ``` 该代码演示了如何构建损失函数并计算梯度,以便后续用于参数更新。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值