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

神经网络之损失函数

引言:损失函数 (Loss Function)是机器学习和深度学习中非常重要的一个概念。用于衡量模型的预测值与真实值之间的差异,从而指导模型优化其参数以最小化这种差异。

一、损失函数作用

在这里插入图片描述

  • 量化误差:损失函数是将预测值和真实值之间的差异转化为一个标量值。
  • 优化目标:通过最小化损失函数,模型可以逐步调整参数以提高预测的准确性,用来优化模型参数。
  • 评估模型性能:反映模型预测结果与目标值的匹配程度。

二、常见损失函数

1. 回归问题

损失函数公式特点适用场景
均方误差(MSE) L = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 L=n1i=1n(yiy^i)2放大误差,对离群点敏感标准线性回归
平均绝对误差(MAE) L = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ L = \frac{1}{n} \sum_{i=1}^{n} \vert y_i - \hat{y}_i\vert L=n1i=1nyiy^i抗噪强,优化不稳定离群点多的回归
Huber Loss L = { 1 2 ( y i − y ^ i ) 2 if  ∣ y i − y ^ i ∣ ≤ δ δ ∣ y i − y ^ i ∣ − 1 2 δ 2 其他 L = \begin{cases} \frac{1}{2}(y_i - \hat{y}_i)^2 & \text{if } \vert y_i - \hat{y}_i\vert \leq \delta \\ \delta \vert y_i - \hat{y}_i\vert - \frac{1}{2}\delta^2 & \text{其他} \end{cases} L={21(yiy^i)2δyiy^i21δ2if yiy^iδ其他平衡 MAE 和 MSE鲁棒回归任务
Log-Cosh Loss L = ∑ log ⁡ ( cosh ⁡ ( y ^ − y ) ) L = \sum \log(\cosh(\hat{y} - y)) L=log(cosh(y^y))平滑的 MAE对离群点略鲁棒

2. 分类问题

损失函数公式特点适用场景
交叉熵损失(Binary Cross Entropy) L = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L = -\frac{1}{n} \sum_{i=1}^{n} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] L=n1i=1n[yilog(y^i)+(1yi)log(1y^i)]二分类逻辑回归、二分类神经网络
交叉熵损失(Categorical Cross Entropy) L = − 1 n ∑ i = 1 n ∑ j = 1 k y i j log ⁡ ( y ^ i j ) L = -\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{k} y_{ij} \log(\hat{y}_{ij}) L=n1i=1nj=1kyijlog(y^ij)多分类Softmax 输出
稀疏分类交叉熵(Sparse Categorical Cross Entropy)使用类索引而不是 one-hot节省内存类别数较多
Focal Loss添加调节因子处理样本不平衡小样本分类检测、医学图像分类

3. 其他问题

损失函数应用说明
相对熵(KL Divergence)分布拟合常见于 NLP / VAE
Contrastive Loss度量学习Siamese 网络
Triplet Loss排序学习图像识别、人脸匹配
CTC Loss序列对齐语音识别、OCR 等
Dice Loss / IoU Loss图像分割非常常用于医学图像

三、如何选择损失函数

任务类型输出形式推荐损失函数PyTorch API
回归(无离群)连续数值MSEnn.MSELoss()
回归(有离群)连续数值MAE / Hubernn.L1Loss() / nn.HuberLoss()
二分类概率(Sigmoid)Binary Cross Entropynn.BCELoss() / nn.BCEWithLogitsLoss()
多分类概率(Softmax)Cross Entropynn.CrossEntropyLoss()
多标签分类多个 Sigmoid 输出nn.BCEWithLogitsLoss()多标签分类问题
图像分割概率图Dice Loss / Cross Entropy自定义 Dice Loss
NLP(语言模型)词分布KL Divergence / CEnn.KLDivLoss() / nn.CrossEntropyLoss()
度量学习特征嵌入Contrastive / Triplet自定义损失函数

四、举个🌰

import numpy as np

# 真实值和预测值
y_true = np.array([1.0, 2.0, 3.0])
y_pred = np.array([1.2, 1.8, 2.5])

# 1. 均方误差 (MSE)
mse = np.mean((y_true - y_pred) ** 2)
print(f"均方误差: {mse:.4f}")

# 2. 均绝对误差 (MAE)
mae = np.mean(np.abs(y_true - y_pred))
print(f"均绝对误差: {mae:.4f}")

# 3. Huber损失 (delta=1.0)
delta = 1.0
diff = np.abs(y_true - y_pred)
huber = np.mean(np.where(diff <= delta, 0.5 * diff ** 2, delta * diff - 0.5 * delta ** 2))
print(f"Huber损失: {huber:.4f}")

# 4. 二分类交叉熵 (假设y_true是0/1标签,y_pred是概率)
y_true_binary = np.array([0, 1, 1])
y_pred_binary = np.array([0.2, 0.8, 0.9])
cross_entropy = -np.mean(y_true_binary * np.log(y_pred_binary + 1e-10) + 
                         (1 - y_true_binary) * np.log(1 - y_pred_binary + 1e-10))
print(f"二分交叉熵: {cross_entropy:.4f}")

均方误差: 0.1100
均绝对误差: 0.3000
Huber损失: 0.0550
二分交叉熵: 0.1839

五、总结

损失函数是机器学习和深度学习中不可或缺的一部分,合理选择和设计损失函数可以显著提高模型的性能。

相关文章:

  • Linux主要开发工具之gcc、gdb与make
  • 模型压缩技术从零到一
  • NO.67十六届蓝桥杯备战|基础算法-倍增思想|快速幂|快速乘法(C++)
  • nacos的地址应该配置在项目的哪个文件中
  • 【网安】处理项目中的一些常见漏洞bug(java相关)
  • 换脸视频FaceFusion3.1.0-附整合包
  • Lua语言的边缘计算
  • 蓝桥杯 web 展开你的扇子(css3)
  • Linux : 内核中的信号捕捉
  • 15分钟完成Odoo18.0安装与基本配置
  • OpenSceneGraph 中的 LOD详解
  • USB3.0走线注意事项和其中的协议
  • 音视频学习(三十二):VP8和VP9
  • MCP项目开发-一个简单的RAG示例
  • 第15届蓝桥杯java-c组省赛真题
  • 其他 vector 操作详解(四十)
  • 如何做到一个项目的高可用保障
  • 美国mlb与韩国mlb的关系·棒球9号位
  • 第五章 定积分 第二节 微积分基本公式
  • k8s1.24升级1.28
  • 网站建设技术分析/国产免费crm系统有哪些
  • 武汉哪些网站做免费广告/微信营销软件手机版
  • 网上做网站优化的靠谱吗/html简单网页设计作品
  • 琶洲网站建设/网店代运营公司靠谱吗
  • 临沂建设企业网站/全网推广
  • 用前端做的比较酷的网站/seo搜索引擎的优化