您的位置:首页 > 健康 > 养生 > [实践应用] 深度学习之损失函数

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

2024/10/6 10:32:46 来源:https://blog.csdn.net/2301_79288416/article/details/141935063  浏览:    关键词:[实践应用] 深度学习之损失函数

文章总览: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)

其他介绍

  • 深度学习之激活函数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com