【常见的损失函数总结】

article/2025/10/11 17:39:08

文章目录

  • 损失函数的定义
  • 神经网络的学习为何要设定损失函数?
  • 常见的损失函数
    • 1. 0-1损失函数(zero-one loss)
    • 2. 对数损失函数
    • 3. 平方损失函数MSE(均值平方差)
    • 4. Hinge 损失函数
    • 5. 交叉熵损失函数 (Cross-entropy loss function)

损失函数的定义

损失函数,又叫目标函数,是编译一个神经网络模型必须的两个要素之一。另一个必不可少的要素是优化器。

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

损失函数分为经验风险损失函数结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项

损失Loss必须是标量,因为向量无法比较大小(向量本身需要通过范数等标量来比较)。

损失函数一般分为4种:

  1. HingeLoss 0-1 损失函数:感知机就是用的这种损失函数;
  2. 对数损失函数:逻辑回归的损失函数就是log对数损失函数;
  3. MSE平方损失函数:线性回归的损失函数就是MSE;
  4. Hinge 损失函数:SVM就是使用这个损失函数;
  5. 交叉熵损失函数 :逻辑回归的损失函数,用sigmoid作为激活函数,常用于二分类和多分类问题中。

在这里插入图片描述

我们先定义两个二维数组,然后用不同的损失函数计算其损失值。

import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
y_pred = Variable(torch.ones(2,2))
a = torch.Tensor(2,2)
a[0,0]=0
a[0,1]=1
a[1,0]=2
a[1,1]=3
y = Variable (a)

y_pred 的值为:[[1,1],[1,1]]。
y 的值为:[[0,1],[2,3]]。

神经网络的学习为何要设定损失函数?

神经网络中的“学习”是指从训练数据中自动获取最优权重参数的过程。学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。

常见的损失函数

1. 0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0:
在这里插入图片描述
特点:

(1)0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用。

(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足
[公式]
时认为相等。

2. 对数损失函数

log对数损失函数的标准形式如下:
在这里插入图片描述
特点:

(1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
(2)健壮性不强,相比于hinge loss对噪声更敏感。
(3)逻辑回归的损失函数就是log对数损失函数。

3. 平方损失函数MSE(均值平方差)

数理统计中演化而来,均方误差是指参数估计值和参数真实值之差平方的期望值。在此处其主要是对每个预测值与真实值作差求平方的平均值,具体公式如下所示:
在这里插入图片描述
MSE越小代表模型越好,类似的算法还包括RMSE和MAD。
线性回归就是使用MSE作为损失函数。

方式1:Pytorch

criterion = nn.MSELoss()
loss = criterion(y_pred, y)
print(loss)

最后结果是:1.5。

方式2:tensorflow
tensorflow没有单独的MSE函数,不过可由开发者自己组合即可,如下所示:

# y为真实值,y_pred为预测值
1. MSE = tf.reduce_mean(tf.square(y - y_pred)))
2. RMSE = tf.sqrt(tf.reduce_mean(tf.square(y - y_pred)))
3. MAD =  tf.reduce_mean(tf.complex_abs(y - y_pred))

4. Hinge 损失函数

Hinge损失函数标准形式如下:
在这里插入图片描述
y为目标值,f(x)为预测值。

特点:

(1)hinge损失函数表示如果被分类正确,损失为0,否则损失就为 1 − y f ( x ) 1-yf(x) 1yf(x)SVM就是使用这个损失函数。
(2)一般的 f ( x ) f(x) f(x) 是预测值,在-1到1之间, y y y 是目标值(-1或1)。其含义是, f ( x ) f(x) f(x) 的值在-1和+1之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)| > 1 f(x)>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差
(3) 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

5. 交叉熵损失函数 (Cross-entropy loss function)

交叉熵(cross-entropy)刻画了两个概率分布之间的距离,更适合用在分类问题上,因为交叉熵表达预测输入样本属于某一类的概率。
交叉熵损失函数的标准形式如下:
在这里插入图片描述
注意公式中 x x x 表示样本, y y y 表示实际的标签, a a a 表示预测的输出, n n n 表示样本总数量。

也就相当于:
在这里插入图片描述
特点:

  1. 本质上也是一种对数似然函数,可用于二分类多分类任务中。
  • 二分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
    在这里插入图片描述
  • 多分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
    在这里插入图片描述
  1. 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

Pytorch实现交叉熵函数:

def cross_entropy(Y, P):"""Cross-Entropy loss function.以向量化的方式实现交叉熵函数Y and P are lists of labels and estimationsreturns the float corresponding to their cross-entropy."""Y = np.float_(Y)P = np.float_(P)return -np.sum(Y * np.log(P) + (1 - Y) * np.log(1 - P)) / len(Y)

tensorflow具有多种常见的交叉熵函数:

#Sigmoid交叉熵
tf.nn.simoid_cross_entropy_with_logits(y_pred, y, name=None)
#softmax交叉熵
tf.nn.softmax_cross_entropy_with_logits(y_pred, y, name=None)
#Sparse交叉熵
tf.nn.sparse_cross_entropy_with_logits(y_pred, y, name=None)
#加权Sigmoid交叉熵
tf.nn.weighter_cross_entropy_with_logits(y_pred, y, pos_weight,name=None)

三、总结
loss函数的选取取决于输入标签数据的类型:若输入的是实数、无界的值,损失函数使用平方差;若输入标签是位矢量(分类标志),使用交叉熵更适合。此外预测值与真实值要采用同样的数据分布,以便于loss函数取得更佳的效果。

参考链接:
深度学习基础(三)loss函数:https://blog.csdn.net/u010554381/article/details/88351920
常见的损失函数(loss function)总结:https://zhuanlan.zhihu.com/p/58883095


http://chatgpt.dhexx.cn/article/WJCdc0TJ.shtml

相关文章

神经网络损失函数汇总

目录 一、基础知识 二、分类 (1)二分类交叉熵损失函数(binary_crossentropy) (2)categorical_crossentropy损失函数 (3)sparse_categorical_crossentropy (4&#…

Jmeter 使用正则表达式提取器将返回值全部保存到一个文件中

目标:将响应数据 {"errorCode":0,"message":"success","data":null} 中的message字段的值全部保存到一个文件中。 1.正则表达式提取器 正则表达式:提取内容的正则表达式【()表示提取,对于你要提取的…

Jmeter性能测试报告模板

性能测试报告 一、测试内容 针对当当网——服务器,进行性能测试,主要针对的核心业务是:注册,登录,查看商品信息与提交订单等。 二、测试方法 本次采用Apache的开元测试工具jmeter,采用本地动态拼装请求数据…

Jmeter5.4.1测试批量上传文件(参数化)

0、下载jmeter5.4.1 jmeter5.4.1-Java文档类资源-CSDN下载 注意需要java环境哦 jdk1.8-java_sdk_jre-Java文档类资源-CSDN下载 启动命令: java -jar ApacheJMeter.jar 用这个启动才是中文版本,另外启动后,界面字体太小&#xff0c…

Jmeter接口测试参数化详解

接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试范围;…

Jmeter学习之用户定义变量与用户变量

一、User Defined Variables 1、添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables,定义你所需要的参数,如 2、在对应的需要使用参数的位置,使用${host}替代。 …

jmeter请求get接口报错(java.net.URISyntaxException: Illegal character in query at index 153: http://qa....)

log: 问题描述: 接口请求类型:get 请求参数:{"canshu1":"17600000005","canshu2":"test-0004","canshu3":"2021090301"},如下: 请求的时候报错如下: …

jmeter文件上传请求配置:文件,图片,语音、视频上传

图片上传http请求配置: 跟一般的http请求相对,图片上传的配置请求参数多了以下3个部分 1.点击图中【高级】,将客户端实现方式改为java 2.点击【参数】,按照基本请求参数配置即可 3.点击【文件上传】,配置图片路径&am…

JMeter外观配置与汉化

1、JMeter外观配置 推荐使用系统默认的外观,原因:不会出现窗口拉伸、变形等问题。 路径:选项->外观->System 2、JMeter汉化 方法1:修改JMeter设置(一次性的,下次打开JMeter还会恢复默认配置&#x…

16、Jmeter如何创建桌面快捷带图方式(亲测有效)

First step** 1、先找到jmeter文件安装的bin目录—>jmeter.bat文件,创建桌面快捷方式。 ** 2、右键,点击“发送到”---->桌面快捷方式”。然后再选中桌面快捷方式,右键,点击“属性”,修改“属性”里的路径为&am…

11、jmeter读取CSV文件之元件数据文件设置基础页面了解(1)

使用场景以及好处: 读取用例的方法通常有两种,1、通过建立多个请求信息实现接口的入参参数化,2、通过读取csv文件,加载测试用例。第一种方法会导致脚本过于冗余,不便于维护,因此多数情况我们会使用读取csv文…

JMeter的基本使用

目录 一、下载JMeter 二、设置语言为简体中文 三、JMeter外观设置 三、添加线程组 四、添加HTTP请求 五、添加信息头管理器 ​六、创建察看结果树 七、运行查看结果 一、下载JMeter 下载地址:Apache JMeter - Apache JMeter™ 下载zip文件解压后运行bin目录…

使用Jmeter进行性能测试的基本操作方法

Jmeter是一款轻量型的优秀测试软件产品,在很多场合如个人测试,企业测试中都有广泛应用。相比体积巨大的我们在某些场合可能更倾向于对Jmeter的使用,那么我们要如何利用该软件进行性能测试呢? 我们需要下载安装这款全免费的测试软件…

JMeter下载安装及入门教程

1 JMeter介绍 JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试、性能测试和压力测试的工具。负载测试、性能测试和压力测试概念: 负载测试: 这类测试使系统或者应用程序在预先设计好的极端场景下测试运行。这类测试用来评估系统或者程序…

Jmeter模拟selenium操作浏览器

前言 selenium是一个web自动化测试的开源框架,它支持多语言:python/java/c#… selenium支持多语言,是因为selenium与浏览器驱动之间是通过http协议进行通信的。只关心通信的数据是否能够正确解读 ,并不关心这个数据是从哪个客户…

jmeter 安装与配置

目录 一、jmeter 安装配置与启动 1、安装 2、配置 3、启动 (若要求在 Linux 下启动,则用bin --> jmeter.sh 打开) 二、jmeter 插件安装 一、jmeter 安装配置与启动 (需要Java环境) 1、安装 安装与JDK版本对…

JMeter执行顺序与作用域

两个线程组之间是不可以直接传入参数的 执行顺序 一般情况下JMeter按照如下顺序执行∶ 0.配置元件 1.定时器 2.前置处理器 3.取样器 4. 后置处理器 5.断言 6.监听器 一个简单的例子∶ -Test Plan -Thread Group -HTTP Requesto 4  …

Jmeter测试全流程学习教程

Jmeter测试全流程学习教程,本文从jmeter的下载安装到具体的测试流程做了详细的介绍,并在文章中介绍了一些长见问题及处理方法。适合刚刚接触jmeter测试的新手小白参考,若有错误之处,欢迎指正,大神勿喷。 1. 安装与配置 1.1. 下载 官网地址:https://jmeter.apache.org/…

jmeter测试服务器性能测试报告,Jmeter的性能测试

需要分析的系统信息 需要分析的业务信息 性能需求评估 确定性能测试点: 关键业务: 确定被测项目是否属于关键业务,有哪些主要的业务逻辑点,特别是跟交易相关的功能点。例如转账,扣款等接口。如果项目(或功能点)不属于关键业务(或关键业务点) 日请求量: 确定被测项目各功能…

Jemeter 设置中文

1、在jmeter路径下找到文件,bin–>jmeter.bat开启编辑模式 2、找到set JMETER_LANGUAGE-Duser.language“en” -Duser.region"EN"部分; 3、在该部分前后分别添加goto remove_language_reset_bug_4.0和:remove_language_reset_bug_4.0&#…