PyTorch计算机视觉实战:目标检测、图像处理与深度学习
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.4 计算损失值

损失值(或者称为损失函数)是需要在神经网络中进行优化的值。为了正确理解损失值是如何计算的,我们看看如下两种情况:

❍ 分类变量预测;

❍ 连续变量预测。

计算连续变量预测的损失

当变量连续时,损失值通常是实际值和预测值之差平方的平均值,也就是说,我们通过改变与神经网络相关的权重值来尽量减小均方误差。均方误差值的计算公式如下:

在上式中,yi为实际输出;是神经网络计算出来的预测值(其权重以θ的形式存储),其中输入为xim为数据集的行数。

关键的结论应该是,对于每个唯一的权重集,神经网络将会预测出相应的损失值,我们需要找到损失值为零(或者,在现实场景中,尽可能接近零)的黄金权重集。

在我们的例子中,假设得到的预测结果是连续值。此时,损失函数值为均方误差,计算方法如下:

loss(误差)=1.2352=1.52

在理解了如何计算连续变量的损失值后,在下一小节中,我们将学习如何计算分类变量的损失值。

计算分类变量预测的损失

对于预测变量是离散值(即变量中只有几个类别)的情形,通常使用分类交叉熵损失函数。当预测变量只有两个不同取值的时候,损失函数是二元交叉熵。

二元交叉熵的计算公式如下:

yi为实际的输出值,pi为预测的输出值,m为数据点总数。

一般的分类交叉熵计算公式如下:

yi为输出的实际值,pi为输出的预测值,m为数据点总数,C为类别总数。

对交叉熵损失进行可视化的一种简单方法是观察预测矩阵本身。假设需要预测图像识别问题中的五个类别——狗、猫、鼠、牛和母鸡。神经网络必须在softmax激活的最后一层包含5个神经元(下一节将详细介绍softmax)。因此,模型将预测每个数据点属于每个类别的概率。假设有5个图像,那么得到的预测概率如下表所示(每行突出显示的单元格对应于目标类):

注意,每一行的和为1。在第一行中,当目标为、预测概率为0.88时,相应的损失为0.128(即对数0.88的相反数)。其他损失的计算方法与此相同。如你所见,当正确类别的概率较高时,损失值较小。如你所知,概率的范围在0和1之间。因此,可能的最小损失可以是0(当概率为1时),最大损失可以是无穷(当概率为0时)。

数据集的最终损失是所有行中所有单个损失的平均值。

现在我们已经对均方误差损失和交叉熵损失的计算有了比较透彻的理解,让我们回到这个小例子。假设输出是一个连续变量,我们将在后面的小节中学习如何使用反向传播来最小化损失值。我们将更新权重值θ(之前随机初始化的值)来最小化损失(Jθ)。但在此之前,首先需要使用NumPy数组编写前向传播Python代码,以巩固对其工作细节的理解。