深度学习中的损失函数

损失函数以一个真实值(y)和一个预测值(ŷ)作为输入,并产生一个实值分数。这个分数越高,模型的预测就越差。

Mean Squared Error Loss

对于网络输出(ŷ)和目标(y)为连续值的回归问题,一个常见的损失函数是均方误差(MSE):
在这里插入图片描述
MSE是预测值和目标值之间差的平方的平均值。还有一些其他的损失函数可以用于回归问题,比如平均绝对误差(MAE)和均方根误差(RMSE),但它们都涉及到计算输出和目标之间的实值距离。
深度学习中的损失函数_第1张图片

Categorical Cross-Entropy Loss

类别交叉熵损失通常用于多类别分类设置,其中输出被解释为类别隶属概率的预测。目标(y)是一个包含n个元素的向量,它表示所有类的真正多项分布。如果只有一个类是正确的,这个向量就是一个 one-hot 向量。网络的输出(ŷ)也是n个元素的向量,但表示了网络对多项分布的预测。分类交叉熵将比较这两个向量(y,ŷ)来衡量损失:
在这里插入图片描述
我们希望正确类的概率接近于1,而其他类的概率接近于0。

要正确使用PyTorch的CrossEntropyLoss()函数,重要的是理解网络输出之间的关系、如何计算损失函数,以及真正表示浮点数时产生的计算约束类型。具体来说,有四个信息决定了网络输出和损失函数之间的微妙关系。首先,一个数字的大小是有限制的。第二,如果softmax公式中使用的指数函数的输入是负数,则结果是一个指数小的数,如果指数函数的输入是正数,结果是一个指数大的数。接下来,假设网络的输出是应用softmax函数之前的向量。最后,log函数是指数函数的反函数,log(exp(x))就等于x。数学上进行了简化,假设指数函数是softmax函数的核心,而对数函数用于交叉熵计算,以便在数值上更稳定,避免非常小或非常大的数字。这些简化的结果是,不使用softmax函数的网络输出可以与PyTorch的CrossEntropyLoss()一起使用,以优化概率分布。然后,当网络经过训练后,可以使用softmax函数来创建一个概率分布,如下图所示。
深度学习中的损失函数_第2张图片
在这个代码示例中,首先使用一个随机值向量来模拟网络输出。然后,ground truth向量,称为targets,被创建为整数向量,因为PyTorch的CrossEntropyLoss()实现假设每个输入都有一个特定的类,每个类都有一个唯一的索引。这就是为什么目标有三个元素:表示每个输入的正确类的索引。根据这个假设,它执行对模型输出进行索引的计算效率更高的操作。

Binary Cross-Entropy Loss

我们在前一节看到的类别交叉熵损失函数在我们有多个类别时的分类问题中非常有用。有时,我们的任务包括区分两个类别——也称为二元分类。在这种情况下,利用二进制交叉熵(BCE)损失是有效的。

比如我们在代表网络输出的随机向量上使用sigmoid激活函数,创建了一个二进制概率输出向量probability。接下来,ground truth被实例化为一个0和1的向量。最后,我们利用二值概率向量和ground truth向量计算二值交叉熵损失。
深度学习中的损失函数_第3张图片

回顾

监督学习需要以下内容:模型、损失函数、训练数据和优化算法。监督学习的训练数据是观察数据和目标数据对;模型根据观测值计算预测结果,损失测量了预测与目标相比的误差。训练的目的是利用基于梯度的优化算法调整模型的参数,使损失尽可能低。

你可能感兴趣的:(深度学习和神经网络,自然语言处理,深度学习,pytorch)