Pytorch实践模型训练(损失函数)

2023-06-07,,

一个深度学习项目包括了: 模型设计、损失函数设计、梯度更新方法、模型保存和加载和模型训练,其中损失函数就像一把衡量模型学习效果的尺子,训练模型的过程就是优化损失函数的过程,模型拿到数据之后有一个非常重要的环节: 将模型自己的判断结果和数据真实的情况做比较,如果偏差或者差异特别大,那么模型就要去纠正自己的判断,用某种方式去减少这种偏差,然后反复这个过程,知道最后模型能够对数据进行正确的判断

损失函数和代价函数介绍

例如在二维空间中,任意一个点对应的真实函数为F(x),通过模型的学习拟合出来的函数为f(x),F(x)和f(x)之间就存在着一个误差,定义为L(x),于是有:

\[L(x)=(F(x)-f(x))^2
\]

L(x)提供了一个评价你和函数表现效果"好坏"的度量指标,这个指标函数称作损失函数,根据公式可知,损失函数越小,拟合函数对于真实情况的拟合效果就越好,但损失函数的种类有很多中,L(x)其中一个

如果将数据从刚才的任意一个点,扩大到所有的点,那么这些点实际上就是一个训练集合,将集合所有的点对应的拟合误差做平均:

\[\frac{1}{N}\sum(F(x)-f(x))^2
\]

这个函数叫作代价函数,就是在训练样本集合上,所有的样本的拟合误差的平均值,也称经验风险

常见损失函数

损失函数的种类是无穷多的,因为损失函数用来度量模型拟合效果和真实值之间的差距,而度量方式要根据问题的特点或者需要优化的方面具体定制,下面列举一些常用的

0-1损失函数

如果模型判断的结果只有两种: 是或非,那么这是一个最为简单的评估方式,如果预测对了损失函数的值为0,因为没有误差,如果错了,损失函数值就为1,这就是最简单的0-1损失函数

\[L(F(x),f(x))=\begin{cases}
0 & ifF(x) \neq f(x) \\
1 & ifF(x) = f(x)
\end{cases}
\]

其中F(x)是输入数据的真实类别,f(x)是模型预测的类别,但是0-1损失函数在模型训练中很少用到,因为其导数值为0

平方损失函数

上述列举的L(x)就属于平方损失函数,是可求导损失函数中最简单的一种,它直接度量了模型拟合结果和真实结果之间的距离

均方差损失函数和平均绝对误差损失函数

均方误差是回归问题损失函数中最常用的一个,是预测值与目标值之间差值的平方和:

\[MSE=\frac{\sum_{i=1}^{n}(s_i-y_i^p)^2}{n}
\]

其中s为目标值的向量表示,y为预测值的向量表示

平均绝对误差损失函数是另一种常用于回归问题的损失函数,其目标是度量真实值和预测值差异的绝对值之和,定义如下:

\[MAE=\frac{\sum_{i=1}^{n}|y_i-y_i^p|}{n}
\]

交叉熵损失函数

熵表示了一个系统的混乱程度或无序程度,如果一个系统越混乱,那么熵就越大

公式:

\[H=-\sum_{i=1}^{n}p(x_i)log(q(x_i))
\]

p(x)表示真实概率分布,q(x)表示预测概率分布,该函数就是交叉熵损失函数,这个公式同时衡量了真实概率分布和预测概率分布两方面,所以这个函数实际上就是通过衡量并不断去尝试缩小两个概率分布的误差,使预测的概率分布尽可能达到真实概率分布

softmax损失函数

在某些场景下,一些数值大小范围分布非常广,而为了方便计算,或者梯度更好的更新,将输入的数值映射为0-1之间的实数,并且归一化后能够保证几个数的和为1,公式化表示:

\[S_j=\frac{e^{a_j}}{\sum_{k=1}^{T}e^{a_k}}
\]

Pytorch实践模型训练(损失函数)的相关教程结束。

《Pytorch实践模型训练(损失函数).doc》

下载本文的Word格式文档,以方便收藏与打印。