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

[实践应用] 深度学习之损失函数

文章总览:YuanDaiMa2048博客文章总览


深度学习之损失函数

    • 1. 回归任务
      • 1.1 均方误差 (MSE)
      • 1.2 平均绝对误差 (MAE)
    • 2. 二分类任务
      • 2.1 二元交叉熵 (Binary Cross-Entropy)
    • 3. 多分类任务
      • 3.1 类别交叉熵 (Categorical Cross-Entropy)
    • 4. 序列生成任务(例如,机器翻译)
        • 4.1 序列交叉熵 (Sequence Cross-Entropy)
    • 5. 回归任务的正则化
        • 5.1 L2 正则化(权重衰减)
    • 其他介绍

在机器学习和深度学习中,不同的任务使用不同的损失函数来衡量模型的性能。

1. 回归任务

任务: 预测一个连续的数值。

1.1 均方误差 (MSE)

原理: MSE 衡量预测值与实际值之间的平方差的平均值,适用于回归任务。它对异常值敏感。

公式:
MSE = 1 n ∑ i = 1 n ( 预测值 i − 实际值 i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n}(\text{预测值}_i - \text{实际值}_i)^2 MSE=n1i=1n(预测值i实际值i)2

PyTorch 代码:

import torch
import torch.nn as nn

# 定义均方误差损失函数
mse_loss = nn.MSELoss()

1.2 平均绝对误差 (MAE)

原理: MAE 衡量预测值与实际值之间的绝对差的平均值,对异常值不太敏感。

公式:
MAE = 1 n ∑ i = 1 n ∣ 预测值 i − 实际值 i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n}|\text{预测值}_i - \text{实际值}_i| MAE=n1i=1n预测值i实际值i

PyTorch 代码:

import torch
import torch.nn as nn

# 定义平均绝对误差损失函数
mae_loss = nn.L1Loss()

2. 二分类任务

任务: 预测样本属于两个类别中的一个(例如,垃圾邮件分类)。

2.1 二元交叉熵 (Binary Cross-Entropy)

原理: 计算预测概率与实际标签之间的交叉熵,用于二分类任务。

公式:
BCE = − 1 n ∑ i = 1 n [ y i log ⁡ ( p i ) + ( 1 − y i ) log ⁡ ( 1 − p i ) ] \text{BCE} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(p_i) + (1 - y_i) \log(1 - p_i)] BCE=n1i=1n[yilog(pi)+(1yi)log(1pi)]

PyTorch 代码:

import torch
import torch.nn as nn

# 定义二元交叉熵损失函数
bce_loss = nn.BCEWithLogitsLoss()  # 结合了 Sigmoid 激活和 BCE 损失

3. 多分类任务

任务: 预测样本属于多个类别中的一个(例如,手写数字分类)。

3.1 类别交叉熵 (Categorical Cross-Entropy)

原理: 计算预测的概率分布与实际类别之间的交叉熵,用于多分类任务。

公式:
CCE = − 1 n ∑ i = 1 n ∑ k = 1 K y i , k log ⁡ ( p i , k ) \text{CCE} = -\frac{1}{n} \sum_{i=1}^{n} \sum_{k=1}^{K} y_{i,k} \log(p_{i,k}) CCE=n1i=1nk=1Kyi,klog(pi,k)

其中 K K K 是类别数, y i , k y_{i,k} yi,k 是实际类别的 one-hot 编码, p i , k p_{i,k} pi,k 是预测的概率。

PyTorch 代码:

import torch
import torch.nn as nn

# 定义类别交叉熵损失函数
cross_entropy_loss = nn.CrossEntropyLoss()  # 直接对 logits 应用 Softmax 和计算交叉熵

4. 序列生成任务(例如,机器翻译)

任务: 预测序列中每个位置的类别(例如,翻译每个单词)。

4.1 序列交叉熵 (Sequence Cross-Entropy)

原理: 与多分类交叉熵类似,但应用于序列数据,计算预测序列与实际序列之间的交叉熵。

公式:
Sequence CCE = − 1 n ∑ i = 1 n ∑ t = 1 T ∑ k = 1 K y i , t , k log ⁡ ( p i , t , k ) \text{Sequence CCE} = -\frac{1}{n} \sum_{i=1}^{n} \sum_{t=1}^{T} \sum_{k=1}^{K} y_{i,t,k} \log(p_{i,t,k}) Sequence CCE=n1i=1nt=1Tk=1Kyi,t,klog(pi,t,k)

PyTorch 代码:

import torch
import torch.nn as nn

# 对于序列生成任务,通常使用 CrossEntropyLoss 处理每个时间步的预测
sequence_cross_entropy_loss = nn.CrossEntropyLoss()

5. 回归任务的正则化

任务: 通过将正则化项添加到损失函数来防止过拟合。

5.1 L2 正则化(权重衰减)

原理: 在损失函数中添加权重的平方和,鼓励较小的权重值。

公式:
Regularized Loss = 原始损失 + λ ∑ j = 1 m W j 2 \text{Regularized Loss} = \text{原始损失} + \lambda \sum_{j=1}^{m} W_j^2 Regularized Loss=原始损失+λj=1mWj2

PyTorch 代码:

import torch.optim as optim

# 定义模型
model = nn.Linear(10, 1)

# 定义优化器,并添加 L2 正则化(weight_decay)
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.01)

其他介绍

  • 深度学习之激活函数

http://www.kler.cn/a/304813.html

相关文章:

  • 【计算机网络】【传输层】【习题】
  • 群控系统服务端开发模式-应用开发-前端个人信息功能
  • 知识图谱6:neo4j查询语句
  • 【Pikachu】目录遍历实战
  • 【日志】392.判断子序列
  • qt QVideoWidget详解
  • 远超想象的复杂
  • InternVL2- dockerfile环境变量持久化使用`ENV`而不是`RUN export`来设置环境变量,以确保环境变量在容器运行时仍然可用
  • python画图|3D参数化图形输出
  • MySQL 事务的 ACID 特性与应用
  • 分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
  • Facebook的虚拟现实计划:未来社交的全新视角
  • 使用 LangChain 和 Neo4j 构建智能图数据库查询系统
  • SQL注入(数据库)简介
  • 【CVPR2024】Scaling Up Video Summarization Pretraining with Large Language Models
  • AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • Machine Learning Specialization 学习笔记(2)
  • 响应式网站和自适应网站有什么区别?
  • LIMS实验室管理系统的特点
  • 音视频推流中使用wireshark进行抓包分析RTMP
  • 【第33章】Spring Cloud之SkyWalking服务链路追踪
  • 在AIoT设备上加速深度神经网络推理的进展:一项综述
  • Unreal Engine——AI生成高精度的虚拟人物和环境(虚拟世界构建、电影场景生成)(二)(技术分析)
  • 解决flume在抽取不断产生的日志文件时,hdfs上出现很多小文件的问题
  • UniApp 从Vue2升级为Vue3需要注意哪些方面
  • 微服务-- Sentinel的使用