259

当我用 Theano 或 Tensorflow 训练我的神经网络时,他们会在每个 epoch 报告一个名为“loss”的变量。

我应该如何解释这个变量?更高的损失是好是坏,或者这对我的神经网络的最终性能(准确性)意味着什么?

4

3 回答 3

342

损失越低,模型越好(除非模型过度拟合训练数据)。损失是根据训练验证计算的,其相互作用是模型对这两组的表现。与准确性不同,损失不是百分比。它是训练或验证集中每个示例所犯错误的总和。

在神经网络的情况下,损失通常分别是分类和回归的负对数似然残差平方和。那么自然地,学习模型的主要目标是通过不同的优化方法(例如神经网络中的反向传播)改变权重向量值,从而减少(最小化)损失函数相对于模型参数的值。

损失值意味着在每次优化迭代后某个模型的表现有多好或多差。理想情况下,人们会期望在每次或多次迭代后减少损失。

模型的准确性通常是在模型参数被学习和固定之后确定的,并且没有进行学习。然后将测试样本输入模型,并在与真实目标进行比较后记录模型所犯的错误数(零一损失)。然后计算错误分类的百分比。

例如,如果测试样本数为 1000,模型正确分类了其中的 952 个,则模型的准确率为 95.2%。

在此处输入图像描述

在降低损失值的同时也有一些微妙之处。例如,您可能会遇到过度拟合的问题,其中模型“记住”了训练示例并对测试集变得无效。在不使用正则化、模型非常复杂(自由参数W数量很大)或数据点N数量非常少的情况下也会发生过拟合。

于 2015-12-29T21:21:13.867 回答
29

它们是评估模型性能的两个不同指标,通常在不同阶段使用。

在训练过程中经常使用损失来找到模型的“最佳”参数值(例如神经网络中的权重)。这是您尝试通过更新权重在训练中优化的内容。

准确性更多地来自应用的角度。找到上述优化参数后,您可以使用此指标来评估模型的预测与真实数据相比的准确性。

让我们使用一个玩具分类示例。您想根据一个人的体重和身高来预测性别。你有3个数据,它们如下:(0代表男性,1代表女性)

y1 = 0,x1_w = 50kg,x2_h = 160cm;

y2 = 0,x2_w = 60kg,x2_h = 170cm;

y3 = 1,x3_w = 55kg,x3_h = 175cm;

您使用一个简单的逻辑回归模型,即 y = 1/(1+exp-(b1*x_w+b2*x_h))

如何找到 b1 和 b2?您首先定义损失并使用优化方法通过更新 b1 和 b2 以迭代方式最小化损失。

在我们的示例中,此二元分类问题的典型损失可能是:(应在求和符号前添加减号)

我们不知道 b1 和 b2 应该是什么。让我们随机猜测 b1 = 0.1 和 b2 = -0.03。那我们现在的损失是什么?

所以损失是

然后你学习算法(例如梯度下降)会找到一种方法来更新 b1 和 b2 以减少损失。

如果 b1=0.1 和 b2=-0.03 是最终的 b1 和 b2(梯度下降的输出),那么现在的准确度是多少?

假设如果 y_hat >​​= 0.5,我们决定我们的预测是女性(1)。否则为 0。因此,我们的算法预测 y1 = 1, y2 = 1 和 y3 = 1。我们的准确度是多少?我们对 y1 和 y2 做出了错误的预测,而对 y3 做出了正确的预测。所以现在我们的准确率是 1/3 = 33.33%

PS:在Amir 的回答中,反向传播据说是 NN 中的一种优化方法。我认为这将被视为一种在 NN 中找到权重梯度的方法。NN 中常用的优化方法有 GradientDescent 和 Adam。

于 2017-10-17T22:46:36.653 回答
8

只是为了澄清训练/验证/测试数据集:训练集用于执行模型的初始训练,初始化神经网络的权重。

验证集在神经网络经过训练后使用。它用于调整网络的超参数,并比较它们的变化如何影响模型的预测准确性。训练集可以被认为是用于构建神经网络的门权重,而验证集允许微调神经网络模型的参数或架构。它很有用,因为它允许将这些不同的参数/架构与相同的数据和网络权重进行可重复的比较,以观察参数/架构的变化如何影响网络的预测能力。

然后,在使用训练和验证数据集进行训练和参数/架构选择之后,测试集仅用于测试经过训练的神经网络对以前看不见的数据的预测准确性。

于 2017-11-01T14:46:40.833 回答