10个常用的损失函数解释以及Python代码实现
理解机器学习中的损失函数
损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数(loss function)的值取平均值的函数称为代价函数(cost function),更简单的理解就是损失函数是针对单个样本的,而代价函数是针对所有样本的。
一些损失函数也可以被用作评价指标。但是损失函数和度量指标(metrics)有不同的目的。虽然度量指标用于评估最终模型并比较不同模型的性能,但损失函数在模型构建阶段用作正在创建的模型的优化器。损失函数指导模型如何最小化误差。
也就是说损失函数是知道模型如何训练的,而度量指标是说明模型的表现的
由于损失函数测量的是预测值和实际值之间的差距,因此在训练模型时可以使用它们来指导模型的改进(通常的梯度下降法)。在构建模型的过程中,如果特征的权重发生了变化得到了更好或更差的预测,就需要利用损失函数来判断模型中特征的权重是否需要改变,以及改变的方向。
我们可以在机器学习中使用各种各样的损失函数,这取决于我们试图解决的问题的类型、数据质量和分布以及我们使用的算法,下图为我们整理的10个常见的损失函数:
1、均方误差(MSE)
均方误差是指所有预测值和真实值之间的平方差,并将其平均值。常用于回归问题。
2、平均绝对误差(MAE)
作为预测值和真实值之间的绝对差的平均值来计算的。当数据有异常值时,这是比均方误差更好的测量方法。
3、均方根误差(RMSE)
这个损失函数是均方误差的平方根。如果我们不想惩罚更大的错误,这是一个理想的方法。
4、平均偏差误差(MBE)
类似于平均绝对误差但不求绝对值。这个损失函数的缺点是负误差和正误差可以相互抵消,所以当研究人员知道误差只有一个方向时,应用它会更好。
5、Huber损失
Huber损失函数结合了平均绝对误差(MAE)和均方误差(MSE)的优点。这是因为Hubber损失是一个有两个分支的函数。一个分支应用于符合期望值的MAE,另一个分支应用于异常值。Hubber Loss一般函数为:
这里的
6、最大似然损失(Likelihood Loss/LHL)
该损失函数主要用于二值分类问题。将每一个预测值的概率相乘,得到一个损失值,相关的代价函数是所有观测值的平均值。让我们用以下二元分类的示例为例,其中类别为[0]或[1]。如果输出概率等于或大于0.5,则预测类为[1],否则为[0]。输出概率的示例如下:
[0.3 , 0.7 , 0.8 , 0.5 , 0.6 , 0.4]
对应的预测类为:
[0 , 1 , 1 , 1 , 1 , 0]
而实际的类为:
[0 , 1 , 1 , 0 , 1 , 0]
现在将使用真实的类和输出概率来计算损失。如果真类是[1],我们使用输出概率,如果真类是[0],我们使用1-概率:
((1–0.3)+0.7+0.8+(1–0.5)+0.6+(1–0.4)) / 6 = 0.65
Python代码如下:
7、二元交叉熵(BCE)
这个函数是对数的似然损失的修正。对数列的叠加可以惩罚那些非常自信但是却错误的预测。二元交叉熵损失函数的一般公式为:
— (y . log (p) + (1 — y) . log (1 — p))
让我们继续使用上面例子的值:
输出概率= [0.3、0.7、0.8、0.5、0.6、0.4]
实际的类= [0,1,1,0,1,0]
— (0 . log (0.3) + (1–0) . log (1–0.3)) = 0.155— (1 . log(0.7) + (1–1) . log (0.3)) = 0.155— (1 . log(0.8) + (1–1) . log (0.2)) = 0.097— (0 . log (0.5) + (1–0) . log (1–0.5)) = 0.301— (1 . log(0.6) + (1–1) . log (0.4)) = 0.222— (0 . log (0.4) + (1–0) . log (1–0.4)) = 0.222
那么代价函数的结果为:
(0.155 + 0.155 + 0.097 + 0.301 + 0.222 + 0.222) / 6 = 0.192
Python的代码如下:
8、Hinge Loss 和 Squared Hinge Loss (HL and SHL)
Hinge Loss被翻译成铰链损失或者合页损失,这里还是以英文为准。
Hinge Loss主要用于支持向量机模型的评估。错误的预测和不太自信的正确预测都会受到惩罚。 所以一般损失函数是:
l(y) = max (0 , 1 — t . y)
这里的t是真实结果用[1]或[-1]表示。
使用Hinge Loss的类应该是[1]或[-1](不是[0])。为了在Hinge loss函数中不被惩罚,一个观测不仅需要正确分类而且到超平面的距离应该大于margin(一个自信的正确预测)。如果我们想进一步惩罚更高的误差,我们可以用与MSE类似的方法平方Hinge损失,也就是Squared Hinge Loss。
如果你对SVM比较熟悉,应该还记得在SVM中,超平面的边缘(margin)越高,则某一预测就越有信心。如果这块不熟悉,则看看这个可视化的例子:
如果一个预测的结果是1.5,并且真正的类是[1],损失将是0(零),因为模型是高度自信的。
loss= Max (0,1 – 1* 1.5) = Max (0, -0.5) = 0
如果一个观测结果为0(0),则表示该观测处于边界(超平面),真实的类为[-1]。损失为1,模型既不正确也不错误,可信度很低。
loss = max (0 , 1–(-1) * 0) = max (0 , 1) = 1
如果一次观测结果为2,但分类错误(乘以[-1]),则距离为-2。损失是3(非常高),因为我们的模型对错误的决策非常有信心(这个是绝不能容忍的)。
loss = max (0 , 1 — (-1) . 2) = max (0 , 1+2) = max (0 , 3) = 3
python代码如下:
9、交叉熵(CE)
在多分类中,我们使用与二元交叉熵类似的公式,但有一个额外的步骤。首先需要计算每一对[y, y_predicted]的损失,一般公式为:
如果我们有三个类,其中单个[y, y_predicted]对的输出是:
这里实际的类3(也就是值=1的部分),我们的模型对真正的类是3的信任度是0.7。计算这损失如下:
Loss = 0 . log (0.1) + 0 . log (0.2) + 1 . log (0.7) = -0.155
为了得到代价函数的值,我们需要计算所有单个配对的损失,然后将它们相加最后乘以[-1/样本数量]。代价函数由下式给出:
使用上面的例子,如果我们的第二对:
Loss = 0 . log (0.4) + 1. log (0.4) + 0. log (0.2) = -0.40
那么成本函数计算如下:
使用Python的代码示例可以更容易理解:
10、Kullback-Leibler 散度 (KLD)
又被简化称为KL散度,它类似于分类交叉熵,但考虑了观测值发生的概率。 如果我们的类不平衡,它特别有用。
以上就是常见的10个损失函数,希望对你有所帮助.
作者:Carla Martins
神经网络算法 – 一文搞懂Loss Function(损失函数)
本文将从损失函数的本质、损失函数的原理、损失函数的算法三个方面,带您一文搞懂损失函数 Loss Function 。
损失函数
一、损失函数的本质
机器学习“三板斧”:选择模型家族,定义损失函数量化预测误差,通过优化算法找到最小化损失的最优模型参数。
机器学习 vs 人类学习
- 定义一个函数集合(模型选择)
- 目标:确定一个合适的假设空间或模型家族。
- 示例:线性回归、逻辑回归、神经网络、决策树等。
- 考虑因素:问题的复杂性、数据的性质、计算资源等。
- 判断函数的好坏(损失函数)
- 目标:量化模型预测与真实结果之间的差异。
- 示例:均方误差(MSE)用于回归;交叉熵损失用于分类。
- 考虑因素:损失的性质(凸性、可微性等)、易于优化、对异常值的鲁棒性等。
- 选择最好的函数(优化算法)
- 目标:在函数集合中找到最小化损失函数的模型参数。
- 主要方法:梯度下降及其变种(随机梯度下降、批量梯度下降、Adam等)。
- 考虑因素:收敛速度、计算效率、参数调整的复杂性等。
损失函数的本质:量化模型预测与真实结果之间的差异。
损失函数的本质
- 一、损失函数的概念:
- 损失函数用于量化模型预测与真实值之间的差异。
- 它是预测值与真实值之间差距的计算方法,并通过深度学习框架(如PyTorch、TensorFlow)进行封装。
- 二、损失函数的重要性:
- 在机器学习中,目标是使预测值尽可能接近真实值,因此需要通过最小化预测值和真实值之间的差异来实现。
- 损失函数的选择对于模型的训练速度和效果至关重要,因为不同的损失函数会导致不同的梯度下降速度。
- 三、损失函数的位置:
- 损失函数位于机器学习模型的向前传播和向后传播之间。
- 在向前传播阶段,模型根据输入特征生成预测值。
- 损失函数接收这些预测值,并计算与真实值之间的差异。
- 这个差异随后被用于向后传播阶段,以更新模型的参数并减少未来的预测误差。
损失函数的位置
二、损失函数的原理
- 定义:误差是指模型在对单个数据点进行预测时,其预测结果与真实值之间的差异或偏离程度。这种差异反映了模型预测的不准确性或偏差。
- 计算:误差可以通过多种数学公式来计算。其中,绝对误差是预测值与真实值之间差值的绝对值,用于量化预测偏离真实值的实际大小;平方误差则是预测值与真实值之间差值的平方,常用于平方损失函数中,以便更显著地突出较大的误差。
- 误差棒:误差棒通常以线条或矩形的形式出现在数据点的上方、下方或两侧,其长度或大小代表了误差的量级。这种可视化方法有助于识别潜在的问题区域,并指导进一步的模型改进或数据分析。
误差棒
损失(Loss):损失是衡量机器学习模型在整个数据集上预测不准确性的总体指标,通过最小化损失可以优化模型参数并改进预测性能。
- 定义:损失是衡量机器学习模型在整个数据集上预测的总体不准确性的指标。它反映了模型预测与真实值之间的差异,并将这些差异进行聚合,以提供一个标量值来表示预测的总体不准确性。
- 计算:损失的具体计算是通过损失函数来完成的。损失函数接受模型的预测值和真实值作为输入,并输出一个标量值,即损失值,表示模型在整个数据集上的总体预测误差。
- 损失曲线:损失曲线直观地呈现了模型在训练过程中损失值的变化趋势。通过绘制训练损失和验证损失随迭代次数的变化,我们能够洞察模型是否遭遇过拟合或欠拟合等问题,进而调整模型结构和训练策略。
损失曲线
三、损失函数的算法
损失函数的算法
均方差损失函数(MSE):通过计算模型预测值与真实值之间差值的平方的平均值,衡量回归任务中预测结果的准确性,旨在使预测值尽可能接近真实值。
均方差损失函数(MSE)
- 应用场景:主要用于回归问题,即预测连续值的任务。
- 公式:
均方差损失函数(MSE)公式
- 特点:
- 当预测值接近真实值时,损失值较小。
- 当预测值与真实值差距较大时,损失值迅速增大。
- 由于其梯度形式简单,易于优化。
- 优化目标:最小化均方差损失,使得模型的预测值尽可能接近真实值。
交叉熵损失函数(CE):用于衡量分类任务中模型预测的概率分布与真实标签之间的差异,旨在通过最小化损失来使模型预测更加接近真实类别。
交叉熵损失函数(CE)
- 应用场景:主要用于分类问题,尤其是多分类问题。
- 公式:
交叉熵损失函数(CE)公式
- 特点:
- 当预测概率分布与真实概率分布相近时,损失值较小。
- 对预测概率的微小变化非常敏感,尤其当真实标签的概率接近0或1时。
- 适用于概率输出的模型,如逻辑回归、softmax分类器等。
- 优化目标:最小化交叉熵损失,使得模型对于每个类别的预测概率尽可能接近真实概率分布。
下面是截图,扫码进群免费领取:扫码进群领资料
我会在群里与朋友们定期分享人工智能的发展就业情况与相关资料。
最后祝大家天天进步!!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。