当前位置: 首页 > news >正文

【漫话机器学习系列】093.代价函数和损失函数(Cost and Loss Functions)

代价函数和损失函数(Cost and Loss Functions)详解

1. 引言

在机器学习和深度学习领域,代价函数(Cost Function)损失函数(Loss Function)是核心概念,它们决定了模型的优化方向。在训练过程中,我们希望找到一个最优的模型参数,使得预测误差最小,而这个优化过程正是通过最小化代价函数或损失函数来完成的。

在这篇文章中,我们将深入探讨代价函数和损失函数的概念、数学定义、常见类型、优化方法及其在实际应用中的重要性。


2. 代价函数和损失函数的概念

从概念上来说,损失函数(Loss Function)和代价函数(Cost Function)有细微的区别:

  • 损失函数(Loss Function):用于衡量单个样本的预测误差,即单个数据点的误差大小。
  • 代价函数(Cost Function):用于衡量整个数据集的平均误差,即所有样本的损失函数的平均值或总和。

从数学上看,假设有 m 个训练样本,每个样本的损失函数为 ,那么代价函数可以定义为:

其中:

  • 是代价函数,表示整个数据集的平均损失;
  • 是损失函数,计算单个样本的误差;
  • θ 是模型的参数;
  • ​ 是真实值, 是模型预测值;
  • m 是训练样本的数量。

简单来说,损失函数是针对单个样本的误差计算,而代价函数是所有样本损失的平均或总和


3. 常见的损失函数和代价函数

不同类型的任务需要不同的损失函数,常见的损失函数可以分为回归问题分类问题两大类。

3.1 回归问题中的损失函数

回归问题的目标是预测一个连续值,常见的损失函数包括:

(1)均方误差(Mean Squared Error, MSE)

  • 计算真实值和预测值的平方误差,并取均值。
  • 优点:对较大误差有较强的惩罚作用,有助于优化。
  • 缺点:对异常值(outliers)较敏感,因为平方操作会放大大误差的影响。

(2)均方根误差(Root Mean Squared Error, RMSE)

  • RMSE 是 MSE 的平方根,使得误差的单位与目标值相同,便于解释。

(3)平均绝对误差(Mean Absolute Error, MAE)

  • 计算真实值与预测值的绝对误差,并取均值。
  • 优点:对异常值不敏感。
  • 缺点:损失函数不可微分(在 0 点处),可能会影响梯度下降优化。

(4)Huber 损失

  • 结合了 MSE 和 MAE 的优点,对小误差使用 MSE,对大误差使用 MAE,减少对异常值的敏感性。

3.2 分类问题中的损失函数

分类问题的目标是预测一个类别标签,常见的损失函数包括:

(1)交叉熵损失(Cross Entropy Loss)

对于二分类问题(如 0/1 预测),交叉熵损失定义为:

  • 作用:衡量真实类别分布和预测类别分布之间的差距。
  • 优点:适用于概率预测问题,能有效地推动模型进行优化。

对于多分类问题(Softmax 作为输出层),交叉熵损失可扩展为:

其中 k 是类别数。

(2)Hinge 损失(用于 SVM)

  • 适用于 SVM(支持向量机),鼓励正确分类的样本有较大的分类边界。

4. 代价函数的优化

在训练机器学习模型时,我们的目标是最小化代价函数,从而找到最优的模型参数 θ。

4.1 梯度下降(Gradient Descent)

  • 计算代价函数对模型参数的梯度,然后更新参数:

其中 α 是学习率。

4.2 Adam 优化器

  • 结合了动量(Momentum)RMSProp的优点,能够自适应调整学习率,提高收敛速度。

4.3 牛顿法

  • 适用于二阶可微的代价函数,计算 Hessian 矩阵来进行优化,但计算代价较大。

5. 结论

  • 损失函数衡量单个样本的误差,代价函数是所有样本损失的平均值
  • 不同任务(回归 vs 分类)有不同的损失函数,选择合适的损失函数对模型的效果至关重要。
  • 最小化代价函数是训练机器学习模型的核心目标,优化方法包括梯度下降、Adam 等。

理解并正确使用损失函数和代价函数,是训练高效、稳定模型的关键。

 

http://www.lryc.cn/news/538204.html

相关文章:

  • Android 13 上通过修改 AOSP 拦截 SystemUI 音量调节事件
  • SQL与数据库程序设计
  • 大模型Deepseek的使用_基于阿里云百炼和Chatbox
  • AlmaLinux9.5安装samba实现与Windows文件共享 笔记250214
  • 二〇二四年终总结
  • 学习sql的资源:sql练习平台;在线编辑器,免费sql教程,免费sql书籍
  • 宝塔和docker的区别
  • 机器学习--实现多元线性回归
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript
  • 【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程
  • 算法——对比A*算法与IDA*算法
  • GitLab CI/CD 的配置详解:从零开始使用 .gitlab-ci.yml 文件
  • python语言进阶之函数
  • 网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理
  • JSON入门略要
  • Python爬虫抓取数据时,如何设置请求头?
  • 以若依移动端版为基础,实现uniapp的flowable流程管理
  • DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)
  • unity学习39:连续动作之间的切换,用按键控制角色的移动
  • C++ ——构造函数
  • Python实现语音识别详细教程【2025】最新教程
  • 【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】
  • Django中数据库迁移命令
  • Win11 远程 连接 Ubuntu20.04(局域网)
  • 安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)
  • PPT工具集
  • SpringBoot:使用spring-boot-test对web应用做单元测试时如何测试Filter?
  • 解锁 Java 回调函数:异步编程与事件处理的利器
  • 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
  • MySQL Workbench安装教程以及菜单汉化