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

【4.2 深度学习中的损失函数】

4.2 深度学习中的损失函数


深度学习中的损失函数(Loss Function)是评估模型预测值与实际值之间差异的函数,它是训练过程中优化算法的目标函数。不同的任务(如分类、回归、排序等)通常会使用不同的损失函数。下面我将介绍几种常见的损失函数,包括它们的公式、优缺点,并给出使用NumPy的简单示例代码。

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

公式
MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
其中, n n n 是样本数量, y i y_i yi 是第 i i i 个样本的真实值, y ^ i \hat{y}_i y^i 是模型预测的第 i i i 个样本的预测值。

优缺点

  • 优点:计算简单,对异常值较为敏感,有助于模型找到更好的最优解。
  • 缺点:如果异常值较多,模型可能会过分关注这些异常值,导致泛化能力下降。

NumPy 代码示例

import numpy as npdef mse_loss(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)# 示例
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
loss = mse_loss(y_true, y_pred)
print("MSE Loss:", loss)

2. 交叉熵损失(Cross-Entropy Loss)

公式(以二分类为例):
Binary Cross-Entropy = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{Binary Cross-Entropy} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] Binary Cross-Entropy=n1i=1n[yilog(y^i)+(1yi)log(1y^i)]
对于多分类问题,通常使用Categorical Cross-Entropy,其中每个类别的预测值通过softmax函数转换为概率分布。

优缺点

  • 优点:对于分类问题,特别是输出层使用softmax激活时,交叉熵损失可以很好地衡量预测概率分布与实际概率分布之间的差异。
  • 缺点:当预测概率接近0或1时,梯度会变得非常小,可能导致训练速度减慢(称为梯度消失问题)。

NumPy 代码示例(二分类):

def binary_cross_entropy_loss(y_true, y_pred):epsilon = 1e-15  # 防止log(0)y_pred = np.clip(y_pred, epsilon, 1 - epsilon)return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))# 示例
y_true = np.array([0, 1, 1, 0])
y_pred = np.array([0.1, 0.8, 0.9, 0.2])
loss = binary_cross_entropy_loss(y_true, y_pred)
print("Binary Cross-Entropy Loss:", loss)

3. Hinge Loss

公式
Hinge Loss = 1 n ∑ i = 1 n max ⁡ ( 0 , 1 − t i ⋅ y i ) \text{Hinge Loss} = \frac{1}{n} \sum_{i=1}^{n} \max(0, 1 - t_i \cdot y_i) Hinge Loss=n1i=1nmax(0,1tiyi)
其中, t i t_i ti 是第 i i i 个样本的真实标签(对于二分类问题,通常为+1或-1), y i y_i yi 是模型预测的得分。

优缺点

  • 优点:主要用于分类任务中的最大间隔方法,如SVM。它鼓励模型预测正确的类别,并且当预测正确时,预测分数越高,损失越小。
  • 缺点:对异常值敏感,且不如交叉熵损失那样直观。

NumPy 代码示例(二分类):

def hinge_loss(y_true, y_pred):margin = 1.0return np.mean(np.maximum(0, margin - y_true * y_pred))# 示例
y_true = np.array([-1, 1, 1, -1])
y_pred = np.array([-1.5, 1.2, 0.9, -0.8])
loss = hinge_loss(y_true, y_pred)
print("Hinge Loss:", loss)

请注意,以上代码示例主要用于教学目的,并未进行性能优化。在实际应用中,通常会使用深度学习框架(如TensorFlow或PyTorch)中提供的内置函数来计算损失,这些框架会自动处理各种优化和数值稳定性问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux系统【RockyLinux9.4】下K8S集群【1.31.0】安装部署指南
  • 【C语言】选择题错题集
  • 干货分享 | 激光测风雷达中准确监测温度、湿度和气压的重要性
  • HTML + js 生成一个线路走向图,可以标记总共有多少站,用户到达第几站了
  • 计算机毕业设计python校园物资招标投标竞标系统 w235g
  • Vue3.0项目实战(三)——大事件管理系统首页 layout 架子与文章分类的实现
  • 解决 Ubuntu 20.04 上 Fail2Ban 启动失败问题:指定 systemd 后端
  • Python的学习(三十二)---- ctypes库的使用整理
  • 星闪初体验
  • 传输层协议TCP
  • 第10章 中断和动态时钟显示
  • Python | 练习作业 2
  • 华企网安中秋防诈指南—月圆人团圆,守护财产安全攻略
  • c++进阶--多态
  • 学懂C++(六十):C++ 11、C++ 14、C++ 17、C++ 20新特性大总结(万字详解大全)
  • 网络传输文件的问题
  • [PHP内核探索]PHP中的哈希表
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • canvas 五子棋游戏
  • codis proxy处理流程
  • DOM的那些事
  • gcc介绍及安装
  • golang 发送GET和POST示例
  • mysql中InnoDB引擎中页的概念
  • React-Native - 收藏集 - 掘金
  • Vue官网教程学习过程中值得记录的一些事情
  • 程序员该如何有效的找工作?
  • 回顾2016
  • 简析gRPC client 连接管理
  • 码农张的Bug人生 - 见面之礼
  • 批量截取pdf文件
  • 嵌入式文件系统
  • 我的面试准备过程--容器(更新中)
  •  一套莫尔斯电报听写、翻译系统
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 正则表达式
  • 说说我为什么看好Spring Cloud Alibaba
  • ‌JavaScript 数据类型转换
  • #if等命令的学习
  • #QT 笔记一
  • (02)vite环境变量配置
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (分布式缓存)Redis哨兵
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)3D模板阴影原理
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)创业的注意事项
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 项目指定SDK版本
  • .NET Standard 支持的 .NET Framework 和 .NET Core