深度学习常见概念解释(四)——损失函数定义,作用与种类(附公式和代码)

本文主要是介绍深度学习常见概念解释(四)——损失函数定义,作用与种类(附公式和代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

损失函数

  • 前言
  • 定义
  • 作用
  • 种类
    • 1. 均方误差损失(Mean Squared Error Loss,MSE)
      • 公式
      • 特点和优点
      • 缺点
      • 使用场景
      • 示例代码
      • 在机器学习框架中的使用
      • 总结
    • 2. 交叉熵损失(Cross-Entropy Loss)
      • 公式
      • 特点和优点
      • 使用场景
      • 示例代码
      • 在机器学习框架中的使用
      • 总结
  • 总结

前言

在机器学习和深度学习中,损失函数(Loss Function)起着至关重要的作用。它是模型优化过程中不可或缺的一部分,用于衡量模型预测值与真实值之间的差异。选择合适的损失函数不仅可以帮助模型更好地拟合数据,还能反映任务的特性,提高模型的性能和鲁棒性。本文将详细介绍损失函数的定义、作用及常见种类,并通过具体的示例代码展示如何在实际应用中使用这些损失函数。

定义

损失函数(loss function)是在机器学习和深度学习中用来衡量模型预测值与真实值之间差异的函数。它通常表示为一个标量值,用来评估模型在训练数据上的表现。

作用

  1. 衡量预测值与真实值之间的差异: 损失函数衡量了模型在给定数据上的表现,即模型对于输入数据的预测与实际标签之间的差异程度。通过最小化损失函数,模型可以更好地拟合训练数据,提高预测的准确性。

  2. 指导模型优化: 在训练过程中,损失函数是优化算法的目标函数,模型的参数通过最小化损失函数来调整,使得模型能够更好地拟合训练数据。常见的优化算法包括梯度下降(Gradient Descent)及其变种,它们通过计算损失函数的梯度来更新模型参数。

  3. 反映任务的特性: 不同任务和模型需要选择不同的损失函数。例如,分类任务常用的损失函数包括交叉熵损失(Cross-Entropy Loss),回归任务常用的损失函数包括均方误差损失(Mean Squared Error Loss)。选择合适的损失函数能够更好地反映任务的特性,有助于提高模型的性能。

  4. 处理不平衡数据: 在某些情况下,数据可能存在类别不平衡或者噪声,选择合适的损失函数可以帮助模型更好地处理这些情况,提高模型的鲁棒性。

总的来说,损失函数在机器学习和深度学习中扮演着至关重要的角色,它不仅指导模型的训练过程,还反映了模型对于任务的表现和适应能力。

种类

在机器学习和深度学习中,常见的损失函数包括以下几种:

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

均方误差损失(Mean Squared Error Loss,简称 MSE)是一种常用的回归模型损失函数,用于衡量预测值与真实值之间的差异。MSE 的计算方式是将每个预测值与真实值之间的差值平方,然后求这些差值平方的平均值。

公式

MSE = 1 2 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{2n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=2n1i=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 个预测值。

特点和优点

  1. 平滑性:MSE 损失函数是连续和可微的,这使得它非常适合用于梯度下降等优化算法。
  2. 凸性:MSE 是一个凸函数,这意味着在大多数情况下,它只有一个全局最小值,这对优化问题非常重要。
  3. 简单性:MSE 的公式简单,计算方便,容易实现。

缺点

  1. 对异常值敏感:由于误差被平方,MSE 对异常值(outliers)特别敏感。如果数据集中存在极端值,这些值会对整体误差有很大影响,导致模型不稳定。
  2. 不适用于分类问题:MSE 主要用于回归问题,对于分类问题,通常使用交叉熵损失等其他损失函数。

使用场景

MSE 广泛用于各种回归问题中,例如:

  • 预测房价
  • 股票价格预测
  • 气温预测
  • 机器学习模型中的损失计算

示例代码

import numpy as np# 定义真实值和预测值
y_true = np.array([1.5, 2.0, 3.5, 4.0, 5.5])
y_pred = np.array([1.4, 2.1, 3.6, 3.9, 5.8])# 计算均方误差
mse = np.mean((y_true - y_pred) ** 2)
print(f"Mean Squared Error: {mse}")

在机器学习框架中的使用

在流行的机器学习框架中,如 TensorFlow 和 PyTorch,均方误差损失通常作为内置函数提供,使用非常方便。

import torch
import torch.nn as nn# 定义真实值和预测值
y_true = torch.tensor([1.5, 2.0, 3.5, 4.0, 5.5])
y_pred = torch.tensor([1.4, 2.1, 3.6, 3.9, 5.8])# 定义 MSE 损失函数
mse_loss = nn.MSELoss()# 计算损失
loss = mse_loss(y_pred, y_true)
print(f"Mean Squared Error Loss: {loss.item()}")

总结

均方误差损失(MSE)是衡量回归模型性能的一种标准方法,通过计算预测值与真实值之间的平方误差平均值来评估模型的准确性。尽管它对异常值敏感,但其简单性和计算效率使其在各种回归任务中广泛应用。

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

交叉熵损失(Cross-Entropy Loss)是一种常用于分类任务中的损失函数,特别适用于多类别分类问题。交叉熵损失用于衡量预测的概率分布与真实分布之间的差异。它通过计算真实标签和预测概率之间的不确定性来衡量模型的性能。

公式

  1. 对于二分类问题,二分类交叉熵损失(Binary Cross-Entropy Loss, BCE)的公式如下:
    CE = − ( y log ⁡ ( p ) + ( 1 − y ) log ⁡ ( 1 − p ) ) \text{CE} = - \left( y \log(p) + (1 - y) \log(1 - p) \right) CE=(ylog(p)+(1y)log(1p))
    其中:

    • y y y 是真实标签,取值为 0 或 1。
    • p p p 是预测为类别 1 的概率。
  2. 对于多分类问题,多分类交叉熵损失(Categorical Cross-Entropy Loss, CCE)的公式为:
    CE = − ∑ i = 1 n y i log ⁡ ( p i ) \text{CE} = - \sum_{i=1}^{n} y_i \log(p_i) CE=i=1nyilog(pi)
    其中:

    • n n n 是类别的数量。
    • y i y_i yi 是真实标签,如果样本属于第 i i i类,则 y i = 1 y_i = 1 yi=1 ,否则 y i = 0 y_i = 0 yi=0
    • p i p_i pi 是模型预测样本属于第 i i i类的概率。

PS.:二分类交叉熵损失(Binary Cross-Entropy Loss)也被称为对数损失(Log Loss)。
PPS. 注意在正式计算的时候需要把所有的误差值加起来取平均值(具体步骤见下面的示例代码)。

特点和优点

  1. 概率输出:交叉熵损失函数使用预测的概率分布,这使得它特别适用于分类问题。
  2. 敏感性:它对错误分类的惩罚较大,尤其是在预测概率较高但实际类别不匹配的情况下。
  3. 凸性:交叉熵损失通常是凸的,这有助于优化算法找到全局最优解。

使用场景

交叉熵损失广泛用于各种分类问题中,例如:

  • 图像分类
  • 文本分类
  • 语音识别
  • 机器翻译

示例代码

import numpy as np# 二分类问题
def binary_cross_entropy(y_true, y_pred):y_true = np.array(y_true)y_pred = np.array(y_pred)return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))# 示例数据
y_true = [1, 0, 1, 1, 0]
y_pred = [0.9, 0.1, 0.8, 0.7, 0.2]# 计算二分类交叉熵损失
loss = binary_cross_entropy(y_true, y_pred)
print(f"Binary Cross-Entropy Loss: {loss}")# 多分类问题
def categorical_cross_entropy(y_true, y_pred):y_true = np.array(y_true)y_pred = np.array(y_pred)return -np.sum(y_true * np.log(y_pred)) / y_true.shape[0]# 示例数据
y_true = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
y_pred = [[0.7, 0.2, 0.1], [0.1, 0.8, 0.1], [0.2, 0.2, 0.6]]# 计算多分类交叉熵损失
loss = categorical_cross_entropy(y_true, y_pred)
print(f"Categorical Cross-Entropy Loss: {loss}")

在机器学习框架中的使用

在流行的机器学习框架中,如 TensorFlow 和 PyTorch,交叉熵损失通常作为内置函数提供,使用非常方便。

import torch
import torch.nn as nn# 定义真实标签和预测概率
y_true = torch.tensor([2, 0, 1])
y_pred = torch.tensor([[0.1, 0.2, 0.7], [0.8, 0.1, 0.1], [0.2, 0.6, 0.2]])# 定义交叉熵损失函数
criterion = nn.CrossEntropyLoss()# 计算损失
loss = criterion(y_pred, y_true)
print(f"Cross-Entropy Loss: {loss.item()}")

总结

交叉熵损失(Cross-Entropy Loss)是分类问题中常用的损失函数,通过衡量预测的概率分布与真实分布之间的差异来评估模型性能。它对错误分类的惩罚较大,并且使用概率输出,非常适合分类任务。流行的深度学习框架通常提供了内置的交叉熵损失函数,方便用户使用。

总结

损失函数在机器学习和深度学习中扮演着至关重要的角色。它不仅指导模型的训练过程,还反映了模型对于任务的表现和适应能力。选择合适的损失函数是模型优化的重要一步,能够显著提高模型的性能和鲁棒性。希望通过本文的介绍,读者能够对损失函数有一个全面的了解,并在实际项目中选择和应用合适的损失函数,这对于模型的训练和性能至关重要。

这篇关于深度学习常见概念解释(四)——损失函数定义,作用与种类(附公式和代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088229

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss