如何解释机器学习模型的损失和准确性

当我用Theano或Tensorflow训练我的神经网络时,它们会在每个纪元报告一个名为“损失”的变量。

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

254055 次浏览

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

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

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

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

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

enter image description here

在减少损失值时,还有一些微妙之处。例如,你可能会遇到过度学习的问题,其中模型"记忆"训练的例子对于测试集来说是无效的。过拟合也会发生在你不使用正则化的情况下,你有一个非常复杂的模型(自由参数W的数量很大)或数据点N的数量非常低。

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

在训练过程中,损失通常用于为你的模型找到“最佳”参数值(例如神经网络中的权重)。它是你在训练中通过更新权重来优化的东西。

准确性更多的是从应用的角度。一旦你找到了上面的优化参数,你就可以使用这个指标来评估你的模型预测与真实数据相比的准确性。

让我们用一个玩具分类的例子。你想从一个人的体重和身高来预测性别。你有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。我们的准确度是多少?我们对y和y的预测是错误的而对y的预测是正确的。现在我们的准确率是1/3 = 33.33%

PS:在阿米尔的回答中,反向传播被认为是NN中的一种优化方法。我认为这是一种在神经网络中寻找权重梯度的方法。神经网络中常用的优化方法有GradientDescent和Adam。

为了澄清训练/验证/测试数据集: 训练集用于对模型进行初始训练,初始化神经网络的权值

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

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