与人工智能交朋友
你有没有使用你的损失函数来评估你的机器学习系统的性能?这是一个错误,但别担心,你不是孤单的。
这是一个普遍的误解,可能与软件默认值、大学课程格式和决策者缺席在人工智能方面有关。
在本文中,我将解释为什么你需要两个独立的模型评分函数进行评估和优化...可能还需要第三个用于统计测试。
图片来自Unsplash,摄影师Hiroshi Kimura
在数据科学中,你会看到评分函数(例如MSE)用于三个主要目的:
- 性能评估:一目了然,我们的模型表现如何?换句话说,我们能快速了解我们正在处理的内容吗?
- 模型优化:这是最好的拟合,还是我们可以改进它?换句话说,哪个模型最接近我们的数据点?
- 统计决策:模型是否足够好,可以被我们使用?换句话说,模型是否通过我们严格的假设检验标准?
这三个目的在某种程度上略有不同,但却非常重要,因此让我们深入了解每个目的需要什么“好”的函数。
性能评估(指标)
性能指标告诉我们我们的模型表现如何。性能评估的目标是让一个人(你,我,任何人)读取分数并理解我们的模型的某些内容。
指标应该被设计成让人们容易理解并有效传达信息。
尽管均方误差(MSE)是用于模型优化的非常流行的函数之一,但它涉及到平方我们关心的数字,这使得它处于错误的比例上。它不是很容易阅读,这是一个问题,如果你正在寻找一个好的、有意义的_指标_。指标应该被设计成让人们容易理解并有效传达信息。
人们更喜欢RMSE,因为它将MSE放在一个更人性化的比例上。
正如我将在另一篇文章中解释的那样,这就是为什么许多人在查看之前更喜欢取MSE的平方根(然后称之为RMSE - R代表根号)。RMSE将MSE放在一个更人性化的比例上。它不完全是“我们的平均误差有多大?”但它已经足够接近了,可以这样引用,而不会引起任何火灾。 (虽然这种解释确实让一些人发疯。)
总结:什么使得一个评分函数对于评估“好”?
当性能评估指标被设计成捕捉人们关心的内容并将信息有效地传达到你的人类大脑时,它就是好的。MSE是一个还可以的性能指标,但它远非最好的。
模型优化(损失函数)
模型评分函数的第二个用途是用于优化。这就是损失函数的作用。在优化/模型拟合步骤中,损失函数是你的机器学习算法试图最小化的公式。
对于那些需要复习模型优化的人,请查看MFML课程中的这个片段:bit.ly/mfml_045
当你通过数据拟合模型时,你实际上是微调一些参数,这些参数决定了将模型放在何处,以使其尽可能接近你的数据。如果你对这个想法有点生疏,请看看下面的视频,我会用选择在你的汤配方中放多少盐的类比来解释它。有一个答案可以让你获得最好的结果,这就是优化的目的:它实质上是自动找出哪个参数设置可以为你提供最佳的配方。
在机器学习中,汤的“味道”得分的等价物称为损失函数*,除了按惯例我们测量错误而不是成功。它更像是一个“坏味道”得分——越低越好。
一旦你有了这样的一个函数,你就可以调整参数,看看分数如何变化。损失越大,我们的模型就越糟糕。
任何损失函数,当我们的模型有更严重的错误时变大,技术上都可以胜任,但在实践中,实现就是一切。聪明的做法是选择一个对你的计算机易于处理的函数,这就是为什么MSE在优化中如此受欢迎的原因。你被教的第一个导数是x²,这有一个很好的原因;在微积分中,因此在优化中,平方非常容易。MSE中的S代表“平方”——这是一个非常方便的函数来最小化。
我们通过让像MSE这样的损失函数尽可能低来设置我们的模型参数。你可以在下面的视频中观察发生了什么。
在上面的视频中,我们从Model 1开始,然后使用优化算法(或微积分,如果我们喜欢)给我们提供Model 2。换句话说,我们找到了拦截和斜率的值,使我们得到这些数据的最小MSE。Model 2是根据MSE得到的直线,可以尽可能接近点。但是当涉及到在_你的_机器学习算法中优化哪个损失函数时,你很少有选择的余地。除非你重新发明轮子并从头构建优化代码(这是很少有时间的)或限制自己使用可自定义损失函数的少数库。
你最终会依赖哪个损失函数,这是机器的便利性问题,而不是适用于你的业务问题或现实世界解释的问题。
仅仅因为你喜欢某个损失函数,并不意味着(1)你会找到使用它的现成代码,也不意味着(2)你能够自己编写有效的实现——优化它可能会太昂贵。
实际上,由于你将导入别人的算法,因此你必须接受其中已经实现的任何损失函数。有时,你选择的库会给你一些灵活性,但不要指望这一点(尤其是在规模上)。你最有可能遇到的损失函数是最容易优化的那个,不幸的是这可能不是最符合你用例的那个。
但是,如果你的理想评估+测试度量也可以作为损失函数使用,那么请使用它(并为你的好运唱一首赞歌)。但是永远不要从损失函数开始构建你的评估。这是错误的方法。
因为你将从适合你的问题的评估+测试函数开始,然后再寻找损失函数,因此你将尽力选择一个相似的匹配……但是完美匹配可能不可用。
这就是为什么你最终会依赖于机器方便性而不是适用于你的业务问题或现实世界解释的问题。
总结:什么使得一个评分函数对优化“好”?
当设计损失函数以在机器学习算法中高效工作时,它就是好的。换句话说,它必须容易被机器优化(并且它还应该与你关心的任何现实世界指标对齐,否则优化它将使你的模型变得更糟而不是更好)。对于建模连续数据,MSE是冠军损失函数……但是它也有一些陷阱——如果你有异常值,你会想要避免它。
统计决策(测试统计量)
那么统计测试呢?游戏规则是描述一个得分,该得分恰好位于两个操作之间的边界处,例如启动系统和不启动系统。
为测试选择得分函数的想法类似于性能评估度量,再加上一个小转折:重点不再是人类可读性,而是它作为决策边界的能力以及它在假设检验中的方便性。
现实世界的重点
由于性能评估度量和用于统计测试的度量都必须捕捉对你试图解决的真实世界问题最重要和有意义的系统性能方面,因此它们很可能非常密切相关。
如果它们不相同,那么可能是因为评估度量涉及增强可读性的转换(如改变比例或取根),而统计测试度量通常保留与驻留的统计学家更接近的形式。
总结:什么使得一个评分函数对统计测试“好”?
如果假设检验统计量准确反映了两个世界之间的边界,那么它就是好的:一个是项目负责人希望使用该模型的世界,另一个是最好放弃该模型的世界。然后,统计学家可能会将这个统计量转化为方便进行假设检验的东西,而不改变边界本身。(如果你不是统计学家,不用担心这最后一点,你永远不会看到它。你需要知道的是,这第三个用途是一个适当的决策标准,可以将行动与不作为分开。)
结论
只有新手才会坚持使用他们的损失函数进行性能评估;专业人士首先使用正确的评估函数,然后再寻找损失函数,这意味着他们最终会使用两个(或更多)评分函数。
使用对人类有益的度量标准。使用对机器有益的损失函数。始终检查是否存在冲突。
在应用ML / AI中,损失函数用于优化,而不是用于统计测试。统计测试应该问,“它的表现足够好吗?可以建立/启动吗?”其中“表现”应该由业务问题及其所有者定义。你不应该修改业务问题陈述以适应你的凸优化抱负。为了迅速行事,你可以使用标准损失函数进行优化,该函数与你的领导者想象中产生的函数相同方向移动(使用模拟或分析方法进行相关性检查***),但请使用他们的函数进行测试。
步骤演示
如果你除了讲述还喜欢展示,那么这里有一个关于数据科学中MSE三种不同用途的演示:
- “损失函数”是“目标函数”的机器学习术语——它们是一样的。虽然在实践中,性能评估和假设检验之间的区别变得模糊(如果你将它们捆绑在一起,我也不会太在意),但损失函数是一个完全不同的问题,因为你很少是实现它的人。
如果没有任何标准的损失函数与性能指标有相当的相关性,请立即通知你的决策者,告诉他们他们所要求的是非常困难的,并且可能需要投资于优化研究人员。
评论(0)