当我使用Theano或Tensorflow训练我的神经网络时,他们将报告每个时期称为"损失"的变量.
我该如何解释这个变量?更高或更低的损失,或者它对我的神经网络的最终性能(准确性)意味着什么?
损失越低,模型越好(除非模型过度拟合训练数据).损失是根据培训和验证计算得出的,它的交互是模型对这两组的影响.与准确性不同,损失不是百分比.它是训练或验证集中每个示例所犯错误的总和.
在神经网络的情况下,损失通常分别是负对数似然和残差平方和用于分类和回归.当然,学习模型的主要目标是通过不同的优化方法(如神经网络中的反向传播)改变权重向量值,从而减少(最小化)损失函数相对于模型参数的值.
损失值表示在每次优化迭代后某个模型的表现有多好或多差.理想情况下,人们会期望在每次或几次迭代后减少损失.
模型的准确性通常在学习和修复模型参数并且没有进行学习之后确定.然后将测试样品送入模型,并在与真实目标进行比较后记录模型产生的错误数(零丢失).然后计算错误分类的百分比.
例如,如果测试样本的数量是1000并且模型正确地分类了952,那么模型的准确度是95.2%.
在减少损失价值的同时还有一些细微之处.例如,您可能遇到过度拟合的问题,其中模型"记忆"训练样例并且变得对测试集无效.如果您不使用正则化,您有一个非常复杂的模型(自由参数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.那么我们现在的损失是什么?
y1_hat = 1 /(1 + exp { - (0.1*50-0.03*160)})= 0.549834 = 0.55
y2_hat = 1 /(1 + exp { - (0.1*60-0.03*170)})= 0.7109495 = 0.71
y3_hat = 1 /(1 + exp { - (0.1*55-0.03*175)})= 0.5621765 = 0.56
所以损失是(-log(1-0.55)+ -log(1-0.71) - log(0.56))= 2.6162
然后你学习算法(例如梯度下降)将找到更新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.
@Aadnan只是为了澄清训练/验证/测试数据集:训练集用于执行模型的初始训练,初始化神经网络的权重。
在训练神经网络后使用验证集。它用于调整网络的超参数,并比较对它们的更改如何影响模型的预测准确性。可以将训练集视为用于构建神经网络的门权重,而验证集可以对神经网络模型的参数或体系结构进行微调。它非常有用,因为它允许将这些不同的参数/体系结构与相同的数据和网络权重进行重复比较,以观察参数/体系结构的变化如何影响网络的预测能力。
然后,在使用训练和验证数据集进行训练以及参数/体系结构选择之后,测试集仅用于对先前看不见的数据测试训练后的神经网络的预测准确性。