要创建通用人工智能,必须首先掌握逻辑回归
在试图发展对世界的科学认识的时候,大多数的领域在探索重要的细节之前都要先进行广泛的尝试。在物理学中,我们从简单的模型(牛顿物理)开始,逐步深入到更复杂的模型(相对论)。这使我们能够以最简单有效的推理来有效地解决问题。
凡事尽可能简洁,但不能太过简单
阿尔伯特·爱因斯坦
从一个非常简单的模型开始的完全相同的方法可以应用到机器学习工程中,这是非常有价值的。事实上,在看到数百个项目从构思到成品之后,我们发现以一个简单的模型作为基线,通常会产生更好的最终产品。
当处理复杂的问题时,简单的解决方案(如我们下面将要描述的基线),有许多缺点:
这些解决方案所产生的错误输出,在我们看来是非常愚蠢的,因此要标出愚蠢的模型。然而,正如我们在这篇文章中所描述的,它们提供了一个非常有用的第一步,并让我们更好地理解我们的问题,以便告诉我们如何处理它。用George E. P. Box的话说:
所有的模型都有错误,但有些错误是有用的。
不同的分布需要不同的基线
从根本上讲,一个基线是一个模型,该模型既容易设置又可以提供像样的结果。用他们做实验通常是快速和低成本的,因为该实现可以在流行的包里广泛使用。
这里有一些可以考虑的基线:
基线模型取决于你所处理的数据类型以及所针对的任务类型。如果你试图预测房价从不同的特点(从一组特征预测价值),线性回归是有意义的,但如果你正试图建立一个语音识别算法。为了选择最好的基线,你要考虑通过使用一个基线可以获得那些有用的。
配置一个模型需要大量的工作,确保在提交之前进行探索。
当你开始一个项目的时候,首要的任务是了解潜在的会阻碍你前进的挑战。即使它们不是模型的最终版本,基线允许你快速迭代,同时浪费最少的时间。以下原因:
基线将花费你不到十分之一的时间,并且可以提供高达90%的结果。
把你的生产力乘以9!
这里有一个很常见的故事:一个团队想要实现一个模型来预测用户点击广告的概率。他们从逻辑回归开始,并迅速(经过一些微调)达到90%的准确性。
问题在这里出现了:团队是否应该集中将准确性提高到白分之九十五,还是他们应该将当前其他问题的准确性提高到百分之九十?
最先进的模型仍然会让你有非零的错误率,这是由于它们的随机性。这取决于你的用例,但大多数系统效率在本质上是倍增的,这意味着你最好以90%的准确度(导致34%的总体准确度)执行10个连续的步骤,而不是去执行准确率为99%的一个步骤,和准确率为10%的9个步骤(总体准确度0.00000000099%)。
从基线开始,先解决瓶颈!
基线会将一个更复杂的模型放到上下文中
通常有三个级别的性能可以很容易估计:
这些级别缺失的东西,我称之为“合理的自动化性能”,它代表了一个相对简单的模型所能达到的效果。在评估一个复杂的模型是否运行良好时,拥有这个基准是至关重要的,并且它使我们能够处理准确性/复杂性的权衡。
很多时候,我们发现基线匹配或优于复杂模型,特别是在选择复杂模型时,不考虑基线失败的位置。此外,复杂的模型通常更难配置,这意味着通过简单的基线测量它们的lift是配置它们所需的工程工作的必要前提。
基线很容易配置
根据定义,基线模型很简单。它们通常包含相对较少的可训练参数,并且不需要太多的工作就可以快速地适应你的数据。
这意味着当涉及到工程时,简单的模型通常是:
一旦你构建并配置了一个基线模型,就可以决定下一步该采取什么步骤了。
是时候拿出一些研究论文了吗?(来源)
如上所述,你的基线模型将允许你获得一个快速性能基准。如果你发现它提供的性能是不够的,那么检查一下这个简单模型所遇到的困难,可以帮助你选择下一个方法。
例如,在我们的NLP入门中,通过检查基线的错误,我们可以看到它不能将有意义的单词与填充词分开。这就需要我们使用一个可以捕捉这种细微差别的模型。
基线可以帮助你理解你的数据
如果基线性能很好,那么你就可以省去设置更复杂模型的麻烦。如果不好,它所犯的错误对数据中的偏差和特殊问题是启发性的。机器学习的大部分问题都是通过更好的理解和准备数据来解决的,而不是简单地选择一个更复杂的模型。看看基线的行为会告诉你什么:
哪个类更难分离。对于大多数分类问题,查看一个混乱矩阵将提供非常有用的信息,可以知道学习哪些类会给你的模型带来麻烦。每当一组类的性能特别差时,我们就应该研究这些数据来理解其中的原因。
你的模型所接收到的信号类型。大多数基线允许你提取特征重要度,揭示输入的哪个方面是最具预测性的。分析特征重要度是一个很好的方式来了解你的模型是如何做决定的,以及它可能忽略了什么。
你的模型忽略了什么信号?如果数据的某个方面看起来很重要,但你的模型忽略了,那么下一步就是设计一个特征或者选择一个不同的模型,以便更好地利用数据的这个特定方面。
基线可以帮助你理解你的任务
除了从你的数据中学习,基线模型还允许你查看哪些部分的推理是容易的,哪些部分是困难的。反过来,这让你可以探索在哪个方面上改进你的模型可以更好地解决有问题的部分。
例如,当试图预测某支球队获胜的可能性时,Bowen Yang从逻辑回归开始。他很快注意到,在比赛完成一半以上之后,预测的准确性大大提高了。这一观察帮助他决定了他的下一个建模选择,一种让他可以从先验信息中学习的嵌入技术,这种技术可在比赛第一分钟之前就提高准确率。
大多数机器学习的问题都遵循“no free lunch”定理:没有万能的解决方案。挑战在于选择各种架构、嵌入策略和模型,以确定能够最好地提取和利用数据结构的方法。
另一个例子是,当尝试对心脏MRI进行段切时,Chuck-Hou Yee从一个 vanilla U-net体系结构开始。这使他注意到他的模型所造成的许多细分错误是由于缺乏上下文感知(小的接受域)。为了解决这个问题,他开始使用扩张卷积,这大大减少了细分错误。
当基线不能切割时
最后,对于某些任务,很难构建有效的基线。如果你正致力于分离音频记录中不同的说话者,你可能需要从一个复杂的模型开始,才能获得令人满意的结果。在这些情况下,除了简化模型,另一个好的选择是简化数据:尝试让你的复杂模型过度拟合数据中一个非常小的子集。如果你的模型具有学习所需的表达能力,那就很简单了。如果这部分很难,那通常意味着你应该尝试一个不同的模型!
一旦你意识到更强大的方法的存在,很容易忽略简单的方法,但是在大多数领域中,在机器学习中,从基础开始总是很有价值的。
学习如何应用复杂的方法当然是一个挑战,机器学习工程师面临的最大挑战是决定一个给定任务的建模策略。可以先尝试一个简单的模型;如果它的性能不佳,那就另选一个更复杂的模型,这个模型需要特别擅长于避免你所看到的基线的特定错误。