在构建学习算法时,我们希望最大化给定的评估指标(例如准确性),但该算法将尝试在学习期间优化不同的损失函数(例如 MSE/熵)。
那么为什么评估指标不用作学习算法的损失函数呢?然后我们不会优化我们感兴趣的相同指标吗?
有什么我想念的吗?
在构建学习算法时,我们希望最大化给定的评估指标(例如准确性),但该算法将尝试在学习期间优化不同的损失函数(例如 MSE/熵)。
那么为什么评估指标不用作学习算法的损失函数呢?然后我们不会优化我们感兴趣的相同指标吗?
有什么我想念的吗?
这是个好问题。一般来说,我认为您应该尝试优化与您最关心的评估指标相对应的损失函数。
但是,您可能想了解其他评估指标。
例如,在进行分类时,我认为您需要给我一个很好的理由来不优化交叉熵。也就是说,交叉熵不是一个非常直观的指标,所以一旦你完成了训练,你可能还想知道你的分类准确度有多好,以了解你的模型是否真的会任何现实世界的使用(它可能是最好的模型,并且具有比其他人更好的交叉熵,但仍然没有足够的准确性在现实世界中使用)。
我不太熟悉的另一个论点是,主要在基于树的(或其他贪婪的)算法中,使用某些损失是否意味着您可以在早期进行更好的拆分并允许您更好地优化您在全球范围内关心的指标。例如,在决定决策树中的最佳分割是什么时,人们倾向于使用 Gini 或信息熵(注意,不是交叉熵)。我听过的唯一论据不是很有说服力,而且基本上是不使用准确性而是使用交叉熵的论据(可能是关于类不平衡的事情)。在尝试获得最佳交叉熵时,我可以想到两个可能使用 Gini 的原因:
正如上面提到的,与本地学习和贪婪的决策有关(我不相信这一点,我必须补充)。
与实际的计算实现有关。理论上,决策树会评估每个节点的每个可能的拆分,并根据您的标准找到最佳拆分,但实际上,据我了解,它不会这样做并使用近似算法,我怀疑它利用了您的损失标准的属性.
总之,您拥有多个评估指标的主要原因是了解您的模型在做什么。可能存在与通过近似方法找到最佳解决方案相关的原因,这意味着您希望最大化度量 A 以获得接近于最大化度量 B 的解决方案。
通常,MSE/交叉熵比准确度更容易优化,因为它们对模型参数是可微的,在某些情况下甚至是凸的,这使它更容易。
即使在度量是可微的情况下,您也可能需要具有“表现更好”的数值属性的损失——请参阅关于骰子系数度量的梯度的这篇文章。
区别在于:
损失函数用于训练您的模型。指标用于评估您的模型。
在学习过程中使用损失函数。在学习过程之后使用度量
示例:假设您训练三个不同的模型,每个模型使用不同的算法和损失函数来解决相同的图像分类任务。根据损失误差选择最佳模型并不总是有效,因为它们不能直接比较。因此,指标用于评估您的训练模型。
一般来说,当损失错误减少时,您的指标分数会提高。因此,两者是联系在一起的,有着共同的目标。
正如这里关于无免费午餐定理所解释的那样(https://peekaboo-vision.blogspot.com/2019/07/dont-cite-no-free-lunch-theorem.html,见最后部分),“学习没有适当的假设是不可能的”. 如果您有一个简单地最小化评估指标的模型,那么您就不会对数据及其意义做出任何假设。换句话说,如何学习。在这种情况下,模型无法学习任何东西,它所能做的就是“记住”训练集的细节(包括噪声),并且缺乏泛化能力,无法在看不见的数据上表现出色。基本上,您需要根据一些假设来构建模型。这是非常普遍的,但在 ML 和算法的情况下,这些假设以分析的方式表达,编码在损失函数中。这些假设定义了与数据相关的内容,允许模型学习噪声之外的东西并具有泛化能力。
让我们看一个例子,说明为什么使用度量作为损失函数是行不通的。让我们考虑一个典型的分类问题,其中有两个类和一个二维特征空间。您希望该算法找到一个跨越 2D 空间的 1D 边界,以便您对新数据点进行分类。现在,假设您通过简单地最小化训练集中的错误分类率来创建该边界,因为您认为这是您稍后评估模型的方式。在这种情况下,训练步骤微不足道,因为您可以轻松绘制边界,从而正确分类 100% 的训练集点。因此,您实现了目标,这是训练步骤中指标的完美结果。但是,这显然是过度拟合,因为您必须在没有实际了解数据的情况下绘制边界。
此外,我认为在某些算法中,这种方法根本没有任何意义。想想一个树算法。它基于在不同的步骤中多次拆分数据。在某个步骤拆分数据的最佳方法是什么?该模型基于一些分析假设,以最丰富的方式对其进行拆分。但是,如果在模型进行此类分类之前仍需要执行可能的数千个拆分步骤,您可以通过哪种方式拆分它以最大化度量(例如分类精度)?