深度学习:神经网络中的损失函数的使用

深度学习:神经网络中的损失函数的使用

损失函数是监督学习中的关键组成部分,用于衡量模型预测值与真实值之间的差异。优化算法(如梯度下降)通过最小化损失函数来调整模型参数,以提高模型的预测精度。以下是几种常用的损失函数及其在PyTorch中的实现和应用的详细解释:

1. L1 损失(绝对误差损失)

L1 损失是一个基于预测值和真实值之间绝对差值的损失函数,常用于回归问题。它有助于提高模型的鲁棒性,尤其是在异常值存在的情况下。

数学表达式

L ( y , y \^ ) = ∑ i = 1 n ∣ y i − y \^ i ∣ L(y, \\hat{y}) = \\sum_{i=1}\^n \|y_i - \\hat{y}_i\| L(y,y\^)=∑i=1n∣yi−y\^i∣

其中 ( y i y_i yi) 是真实值,( y ^ i \hat{y}_i y^i) 是预测值。

PyTorch 实现
python 复制代码
import torch
import torch.nn as nn

loss_fn = nn.L1Loss()
y_true = torch.tensor([2, 3, 4, 5], dtype=torch.float)
y_pred = torch.tensor([1.5, 3.5, 3.8, 5.2], dtype=torch.float)
loss = loss_fn(y_pred, y_true)
示例

计算 L1 损失:

$L = \|2 - 1.5\| + \|3 - 3.5\| + \|4 - 3.8\| + \|5 - 5.2\| = 0.5 + 0.5 + 0.2 + 0.2 = 1.4 $

2. MSE 损失(均方误差损失)

均方误差损失是回归问题中最常用的损失函数之一,计算真实值与预测值之间差值的平方和的均值。它放大了较大误差的影响,使模型更加注重减少大的预测误差。

数学表达式

$L(y, \\hat{y}) = \\frac{1}{n} \\sum_{i=1}\^n (y_i - \\hat{y}_i)\^2 KaTeX parse error: Can't use function '\\\]' in math mode at position 1: \\̲\]̲ 其中 \\(y_iKaTeX parse error: Can't use function '\\)' in math mode at position 1: \\̲)̲ 是真实值,\\(\\hat{y}_i$) 是预测值。 ##### PyTorch 实现 ```python loss_fn = nn.MSELoss() loss = loss_fn(y_pred, y_true) ``` ##### 示例 计算 MSE: \[ L = 1 4 ( ( 2 − 1.5 ) 2 + ( 3 − 3.5 ) 2 + ( 4 − 3.8 ) 2 + ( 5 − 5.2 ) 2 ) = 1 4 ( 0.25 + 0.25 + 0.04 + 0.04 ) = 0.145 L = \\frac{1}{4}((2 - 1.5)\^2 + (3 - 3.5)\^2 + (4 - 3.8)\^2 + (5 - 5.2)\^2) = \\frac{1}{4}(0.25 + 0.25 + 0.04 + 0.04) = 0.145 L=41((2−1.5)2+(3−3.5)2+(4−3.8)2+(5−5.2)2)=41(0.25+0.25+0.04+0.04)=0.145

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

交叉熵损失是分类问题中最常用的损失函数之一,特别适用于多类分类问题。它衡量的是预测概率分布与真实分布之间的差异。

数学表达式

L = − ∑ c = 1 M y c log ⁡ ( p c ) L = -\\sum_{c=1}\^M y_c \\log(p_c) L=−∑c=1Myclog(pc)

其中 ( y c y_c yc) 是如果样本属于类别 ( c c c),则为1,否则为0;( p c p_c pc) 是预测样本属于类别 ( c c c) 的概率。

PyTorch 实现
python 复制代码
loss_fn = nn.CrossEntropyLoss()
# 注意:CrossEntropyLoss的输入不应用one-hot编码,且预测值不通过softmax
y_true = torch.tensor([1])  # 类别索引为1
y_pred = torch.tensor([[0.1, 0.6, 0.3]])  # logits
loss = loss_fn(y_pred, y_true)
示例

计算交叉熵损失:

L = − ( 0 ⋅ log ⁡ ( 0.1 ) + 1 ⋅ log ⁡ ( 0.6 ) + 0 ⋅ log ⁡ ( 0.3 ) ) = − log ⁡ ( 0.6 ) ≈ 0.51 L = -(0 \\cdot \\log(0.1) + 1 \\cdot \\log(0.6) + 0 \\cdot \\log(0.3)) = -\\log(0.6) \\approx 0.51 L=−(0⋅log(0.1)+1⋅log(0.6)+0⋅log(0.3))=−log(0.6)≈0.51

总结

损失函数是衡量模型性能的重要工具,通过最小化损失,我们可以使模型在特定任务上表现得更好。选择合适的损失函数对于模型的最终性能至关重要,应根据具体任务和数据的性质来选择。在PyTorch中,使用这些损失函数可以直接通过简单的API调用实现,方便模型的训练和优化。

相关推荐
X54先生(人文科技)1 天前
《元创力》纪实录·桥段薪火三纪
网络·人工智能·开源·ai写作·零知识证明
这张生成的图像能检测吗1 天前
(论文速读)FreDN:基于可学习频率分解的时间序列预测的频谱解纠缠
人工智能·深度学习·算法·机器学习·时序模型
AI木马人1 天前
10.人工智能实战:大模型系统如何做全链路性能优化?从请求进入到 GPU 推理的端到端瓶颈分析与落地方案
人工智能·性能优化
科技互联.1 天前
2026年小程序定制市场:个性化需求激增,技术深度成竞争关键
人工智能·小程序
小超同学你好1 天前
OpenClaw 深度解析与源代码导读 · 第11篇:子 Agent(Sub-Agent)——隔离执行与“向上汇报“的有限协作
人工智能·语言模型·transformer
code 小楊1 天前
image-2国内开源平替商汤科技SenseNova-U1模型全面解析
人工智能·科技·开源
龙侠九重天1 天前
VS Code AI 插件生态全景对比:Tabnine、Codeium、Blackbox 等主流工具深度横评
人工智能·vs code·ai 插件
keineahnung23451 天前
為什麼這個 Tensor 算 dense?PyTorch _eval_is_non_overlapping_and_dense 深入解析
人工智能·pytorch·python·深度学习
IT_陈寒1 天前
为什么我的Python multiprocessing总是卡在join()?
前端·人工智能·后端
云天AI实战派1 天前
ChatGPT/AI 智能体功能异常排查指南:账号安全、权限灰度到审批流卡点的全流程解决方案
人工智能·安全·chatgpt