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

【漫话机器学习系列】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 等。

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

 

相关文章:

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

代价函数和损失函数(Cost and Loss Functions)详解 1. 引言 在机器学习和深度学习领域,代价函数(Cost Function)和损失函数(Loss Function)是核心概念,它们决定了模型的优化方向。…...

ThreadLocal为什么会内存溢出

每个线程(Thread 对象)内部维护一个 ThreadLocalMap,用于存储该线程的所有 ThreadLocal 变量的键值对: ThreadLocalMap虽然是ThreadLocal的静态内部类,但是Thread 对象的属性,当线程存活时ThreadLocalMap不会被回收。 Key:ThreadLocal 实例的 弱引用(WeakReference)。…...

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源,其储量丰富,预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性,天然气水合物的探测面临诸多挑战,涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…...

【记忆化搜索】最长递增子序列

文章目录 300. 最长递增子序列解题思路:递归 -> 记忆化搜索 300. 最长递增子序列 300. 最长递增子序列 ​ 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 ​ 子序列 是由数组派生而来的序列,删除(或不删除&am…...

Tomcat的升级

一、为什么Tomcat需要升级 在生产环境中,我们都会指定对应的Tomcat版本进行安排配置,但是由于Tomcat厂商对于小版本的更新迭代会将一些Bug修复,这个时候在生产中出现问题/预防出现问题,可以通过小版本的升级解决前提:…...

4-制作UI

创建模块文件夹 Unity编辑器->Tools->YIUI自动化工具,在新增模块名称那里输入模块名字并点击创建。便可看到在GameRes/YIUI文件夹下有新建的文件夹与内容了。里面包含图集、预制体、Sprites。如果进行预制体的修改,则需要双击进入再修改&#xff0…...

零基础学习人工智能

零基础学习人工智能是一个既充满挑战又极具潜力的过程。以下是一份详细的学习指南,旨在帮助零基础的学习者有效地踏入人工智能领域。 一、理解基本概念 在学习人工智能之前,首先要对其基本概念有一个清晰的认识。人工智能(AI)是…...

vue3+element-plus中的el-table表头和el-table-column内容全部一行显示完整(hook函数)

hook函数封装 export const useTableColumnWidth _this > {const { refTable } _thisconst columnWidthObj ref()const getTableColumnWidth cb > {nextTick(() > {columnWidthObj.value {}// 获取行rowsconst tableEle refTable?.refBaseTable?.$elif (!tab…...

Word写论文常用操作的参考文章

1.插入多个引用文献:word中交叉引用多篇参考文献格式[1-2]操作以及显示错误问题 更改左域名,输入 \#"[0" 更改右域名,输入 \#"0]" 2.插入题注:word 中添加图片题注、目录、内部链接 3.插入公式编号&#x…...

深度学习在蛋白质-蛋白质相互作用(PPI)领域的研究进展(2022-2025)

一、蛋白质-蛋白质相互作用(PPI)的定义与生物学意义 蛋白质-蛋白质相互作用(Protein-Protein Interaction, PPI)是指两个或多个蛋白质通过物理结合形成复合物,进而调控细胞信号传导、代谢、免疫应答等生命活动的过程。…...

C++基础知识(三)之结构体、共同体、枚举、引用、函数重载

九、结构体、共同体和枚举 1、结构体的基本概念 结构体是用户自定义的类型,可以将多种数据的表示合并到一起,描述一个完整的对象。 使用结构体有两个步骤:1)定义结构体描述(类型);2&#xff…...

【java】方法的值传递

在 Java 中,方法的值传递 是指将实参的值传递给方法的形参。Java 中只有 值传递,没有引用传递。具体来说: 对于 基本数据类型,传递的是值的副本。 对于 引用数据类型,传递的是引用的副本(即地址的副本&…...

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

使用Python爬虫实时监控行业新闻案例

目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...

Centos搭建python环境

在 CentOS 上配置 Python 环境可以通过以下步骤完成: 1. 检查系统自带 Python 版本 CentOS 7/8 可能已经自带了 Python: python3 --version 如果没有,或者版本过低,可以手动安装。 2. 安装 Python(推荐&#xff0…...

语言大模型基础概念 一(先了解听说过的名词都是什么)

SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别 STF(Supervised Fine-Tuning)和RLHF(Reinforcement Learning from Human Feedback)是两种不同的模型训练方法,分别…...

DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库

“DeepSeek-R1的输出,蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果,通过知识蒸馏技术训练出6个参数规模较小的模型,以下是具体解释: - **知识蒸馏技术原理**:知识蒸馏是一种模型压缩技术,核…...

ubuntu服务器 如何配置安全加固措施

下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。 新的服务器,通常我们会创建一…...

DeepSeek v3 技术报告阅读笔记

注 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文本文不包括基础的知识点讲解,为笔记/大纲性质而非教程,建议阅读技术报告原文交流可发送至邮箱 henryhua0721foxmail.com 架构核心 核心: MLA 高效推理DeepSeekMOE 更…...

Spring 事务及管理方式

Spring 事务管理是 Spring 框架的核心功能之一,它为开发者提供了一种方便、灵活且强大的方式来管理数据库事务。 1、事务的基本概念 事务是一组不可分割的操作序列,这些操作要么全部成功执行,要么全部失败回滚,以确保数据的一致…...

GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)

参考程序&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e510; vector<int> g[N]; // 图的邻接表 int col[N], dep[N], has[N];// 深度优先遍历&#xff0c;计算每个节点的深度 void dfs(int x, int fa) {dep[x] dep[fa] 1; // 计算…...

Pandas数据填充(fill)中的那些坑:避免机器学习中的数据泄露

1. 问题背景 在处理时间序列数据时,经常会遇到缺失值需要填充。Pandas提供了ffill(forward fill)和bfill(backward fill)两种填充方式,但使用不当可能会导致数据泄露,特别是在进行机器学习预测时。 2. 填充方式解析 2.1 基本概念 ffill(forward fill): 用前面的值填充后面的…...

ubuntu 安装vnc之后,本地黑屏,vnc正常

ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器&#xff08;如TightVNC或RealVNC&#xff09;后&#xff0c;如果遇到连接时本地屏幕变黑的情况&#xff0c;可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤&#xff0c;可以帮助你解决这个问题&…...

解锁电商数据宝藏:淘宝商品详情API实战指南

在电商蓬勃发展的今天&#xff0c;数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言&#xff0c;获取精准、实时的商品数据至关重要。而淘宝&#xff0c;作为国内最大的电商平台&#xff0c;其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…...

webshell通信流量分析

环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php&#xff0c;则环境安…...

在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址

rt_list_entry (rt_container_of)宏定义&#xff1a; /*** rt_container_of - return the start address of struct type, while ptr is the* member of struct type.*/ #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *…...

趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统

最近&#xff0c;一位开源爱好者开发了一个LinuxPDF 项目&#xff08;ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator&#xff09;&#xff0c;它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…...

DeepSeek教unity------MessagePack-03

数据契约兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解&#xff0c;可以使用 [DataMember] 注解代替 [Key]&#xff0c;并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后&#xff0c;[DataMember(Order int)] 的…...

【Linux】Socket编程—TCP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…...

新数据结构(9)——Java异常体系

异常的种类 程序本身通常无法主动捕获并处理错误&#xff08;Error&#xff09;&#xff0c;因为这些错误通常表示系统级的严重问题&#xff0c;但程序可以捕获并处理异常&#xff08;Excrption&#xff09;&#xff0c;而Error则被视为一种程序无法或不应尝试恢复的异常类型。…...