什么是机器学习?
你的分类器是一个深度学习模型。正如已经提到的,深度学习模型使用神经网络,这些神经网络最初可以追溯到上世纪 50 年代,并且最近由于最新的进展变得非常强大。
另一个重要的背景是,深度学习只是更一般的机器学习领域中的一个现代领域。要理解当你训练自己的分类模型时所做的事情的本质,你不需要理解深度学习。看到你的模型和训练过程是如何成为适用于机器学习的概念的例子就足够了。
因此,在本节中,我们将描述机器学习。我们将探讨关键概念,并看看它们如何可以追溯到最初介绍它们的原始文章。
机器学习就像常规编程一样,是让计算机完成特定任务的一种方式。但是如果要用常规编程来完成前面部分我们刚刚做的事情:在照片中识别狗和猫,我们将不得不为计算机写下完成任务所需的确切步骤。
通常,当我们编写程序时,很容易为我们写下完成任务的步骤。我们只需考虑如果我们必须手动完成任务时会采取的步骤,然后将它们转换为代码。例如,我们可以编写一个对列表进行排序的函数。一般来说,我们会编写一个类似于图 1-4 的函数(其中inputs可能是一个未排序的列表,results是一个排序后的列表)。

图 1-4. 传统程序
但是要在照片中识别物体,这有点棘手;当我们在图片中识别物体时,我们采取了什么步骤?我们真的不知道,因为这一切都发生在我们的大脑中,而我们并没有意识到!
早在计算机诞生之初,1949 年,IBM 的一位研究员阿瑟·塞缪尔开始研究一种让计算机完成任务的不同方式,他称之为机器学习。在他经典的 1962 年文章“人工智能:自动化的前沿”中,他写道:
为这样的计算编程对于我们来说是相当困难的,主要不是因为计算机本身的任何固有复杂性,而是因为需要详细说明过程的每一个细微步骤。任何程序员都会告诉你,计算机是巨大的白痴,而不是巨大的大脑。
他的基本想法是这样的:不是告诉计算机解决问题所需的确切步骤,而是向其展示解决问题的示例,并让它自己找出如何解决。结果证明这非常有效:到 1961 年,他的跳棋程序学到了很多,以至于击败了康涅狄格州冠军!这是他描述自己想法的方式(与之前提到的同一篇文章):
假设我们安排一些自动手段来测试任何当前权重分配的有效性,以实际表现为准,并提供一种机制来改变权重分配以最大化性能。我们不需要详细了解这种程序的细节,就可以看到它可以完全自动化,并且可以看到一个这样编程的机器将从中学习。
这个简短陈述中嵌入了一些强大的概念:
“权重分配”的想法
每个权重分配都有一些“实际表现”的事实
要求有一种“自动手段”来测试该性能
需要一个“机制”(即,另一个自动过程)来通过改变权重分配来提高性能
让我们逐一了解这些概念,以便了解它们在实践中如何结合。首先,我们需要了解塞缪尔所说的权重分配是什么意思。
权重只是变量,权重分配是这些变量的特定值选择。程序的输入是它处理以产生结果的值,例如,将图像像素作为输入,并返回分类“狗”作为结果。程序的权重分配是定义程序操作方式的其他值。
因为它们会影响程序,它们在某种意义上是另一种输入。我们将更新我们的基本图片图 1-4,并用图 1-5 替换,以便考虑到这一点。

图 1-5。使用权重分配的程序
我们已将方框的名称从程序更改为模型。这是为了遵循现代术语并反映模型是一种特殊类型的程序:它可以根据权重做许多不同的事情。它可以以许多不同的方式实现。例如,在塞缪尔的跳棋程序中,不同的权重值会导致不同的跳棋策略。
(顺便说一句,塞缪尔所说的“权重”如今通常被称为模型参数,以防您遇到这个术语。术语权重保留给特定类型的模型参数。)
接下来,塞缪尔说我们需要一种自动测试任何当前权重分配的有效性的方法,以实际表现为准。在他的跳棋程序中,“实际表现”模型的表现有多好。您可以通过让两个模型相互对战并看哪个通常获胜来自动测试两个模型的表现。
最后,他说我们需要一种机制来改变权重分配,以最大化性能。例如,我们可以查看获胜模型和失败模型之间的权重差异,并将权重进一步调整到获胜方向。
我们现在可以看到他为什么说这样的程序可以完全自动化,并且…一个这样编程的机器将从中学习。当权重的调整也是自动的时,学习将变得完全自动——当我们不再通过手动调整权重来改进模型,而是依赖于根据性能产生调整的自动化机制时。
图 1-6 展示了塞缪尔关于训练机器学习模型的完整图景。
!基本训练循环

图 1-6。训练机器学习模型
注意模型的结果(例如,在跳棋游戏中的移动)和其性能(例如,是否赢得比赛,或者赢得比赛的速度)之间的区别。
还要注意,一旦模型训练好了,也就是说,一旦我们选择了最终的、最好的、最喜欢的权重分配,那么我们可以将权重视为模型的一部分,因为我们不再对它们进行变化。
因此,实际上在训练后使用模型看起来像图 1-7。

图 1-7。使用训练后的模型作为程序
这看起来与我们在图 1-4 中的原始图表相同,只是将程序一词替换为模型。这是一个重要的观点:训练后的模型可以像常规计算机程序一样对待。
行话:机器学习
通过让计算机从经验中学习而不是通过手动编码个别步骤来开发程序的培训。
什么是神经网络?
不难想象跳棋程序的模型可能是什么样子。可能编码了一系列跳棋策略,以及某种搜索机制,然后权重可以变化以决定如何选择策略,在搜索期间关注棋盘的哪些部分等等。但是对于图像识别程序,或者理解文本,或者我们可能想象的许多其他有趣的问题,模型可能是什么样子却一点也不明显。
我们希望有一种函数,它如此灵活,以至于可以通过调整其权重来解决任何给定问题。令人惊讶的是,这种函数实际上存在!这就是我们已经讨论过的神经网络。也就是说,如果您将神经网络视为数学函数,那么它将是一种极其灵活的函数,取决于其权重。一种称为通用逼近定理的数学证明表明,这种函数在理论上可以解决任何问题,达到任何精度水平。神经网络如此灵活的事实意味着,在实践中,它们通常是一种合适的模型,您可以将精力集中在训练过程上,即找到良好的权重分配。
但是这个过程呢?人们可以想象,您可能需要为每个问题找到一种新的“机制”来自动更新权重。这将是费力的。我们在这里也希望有一种完全通用的方法来更新神经网络的权重,使其在任何给定任务上都能提高。方便的是,这也存在!
这被称为随机梯度下降(SGD)。我们将在第四章中详细了解神经网络和 SGD 的工作原理,以及解释通用逼近定理。然而,现在,我们将使用塞缪尔自己的话来说:我们不需要深入了解这样一个过程的细节,就可以看到它可以完全自动化,并且可以看到这样一个机器编程的机器可以从中学习经验。
杰里米说
不要担心;无论是 SGD 还是神经网络,在数学上都不复杂。它们几乎完全依赖于加法和乘法来完成工作(但它们进行了大量的加法和乘法!)。当学生们看到细节时,我们听到的主要反应是:“就是这样吗?”
换句话说,简而言之,神经网络是一种特殊类型的机器学习模型,它完全符合塞缪尔最初的构想。神经网络之所以特殊,是因为它们非常灵活,这意味着它们可以通过找到正确的权重来解决异常广泛的问题。这是强大的,因为随机梯度下降为我们提供了一种自动找到这些权重值的方法。
放大后,让我们现在缩小范围,重新审视使用塞缪尔框架解决我们的图像分类问题。
我们的输入是图像。我们的权重是神经网络中的权重。我们的模型是一个神经网络。我们的结果是由神经网络计算出的值,比如“狗”或“猫”。
下一个部分是什么,一个自动测试任何当前权重分配的有效性的手段?确定“实际表现”很容易:我们可以简单地将模型的表现定义为其在预测正确答案时的准确性。
将所有这些放在一起,假设 SGD 是我们更新权重分配的机制,我们可以看到我们的图像分类器是一个机器学习模型,就像 Samuel 所设想的那样。
一些深度学习术语
Samuel 在 1960 年代工作,自那时术语已经发生了变化。以下是我们讨论过的所有部分的现代深度学习术语:
模型的功能形式被称为架构(但要小心—有时人们将模型用作架构的同义词,这可能会让人困惑)。
权重被称为参数。
预测是从独立变量计算出来的,这是不包括标签的数据。
模型的结果被称为预测。
性能的度量被称为损失。
损失不仅取决于预测,还取决于正确的标签(也称为目标或因变量);例如,“狗”或“猫”。
在进行这些更改后,我们在图 1-6 中的图表看起来像图 1-8。

图 1-8. 详细训练循环
机器学习固有的限制
从这幅图片中,我们现在可以看到关于训练深度学习模型的一些基本事情:
没有数据就无法创建模型。
模型只能学习操作训练数据中看到的模式。
这种学习方法只创建预测,而不是推荐的行动。
仅仅拥有输入数据的示例是不够的;我们还需要为这些数据提供标签(例如,仅有狗和猫的图片不足以训练模型;我们需要为每个图片提供一个标签,说明哪些是狗,哪些是猫)。
一般来说,我们已经看到大多数组织声称他们没有足够的数据实际上意味着他们没有足够的带标签数据。如果任何组织有兴趣在实践中使用模型做一些事情,那么他们可能有一些输入数据计划运行他们的模型。并且可能他们已经以其他方式做了一段时间(例如,手动或使用一些启发式程序),因此他们有来自这些过程的数据!例如,放射学实践几乎肯定会有医学扫描的存档(因为他们需要能够检查他们的患者随时间的进展),但这些扫描可能没有包含诊断或干预措施列表的结构化标签(因为放射科医生通常创建自由文本自然语言报告,而不是结构化数据)。在本书中,我们将大量讨论标记方法,因为这在实践中是一个非常重要的问题。
由于这类机器学习模型只能进行预测(即试图复制标签),这可能导致组织目标与模型能力之间存在显著差距。例如,在本书中,您将学习如何创建一个推荐系统,可以预测用户可能购买的产品。这通常用于电子商务,例如通过显示排名最高的商品来定制主页上显示的产品。但这样的模型通常是通过查看用户及其购买历史(输入)以及他们最终购买或查看的内容(标签)来创建的,这意味着该模型很可能会告诉您关于用户已经拥有或已经了解的产品,而不是他们最有可能对其感兴趣的新产品。这与您当地书店的专家所做的事情大不相同,他们会询问您的口味,然后告诉您您以前从未听说过的作者或系列。
另一个关键的洞察来自于考虑模型如何与其环境互动。这可能会产生反馈循环,如此处所述:
基于过去的逮捕地点创建了一个预测性执法模型。实际上,这并不是在预测犯罪,而是在预测逮捕,因此部分地只是反映了现有执法过程中的偏见。
然后执法人员可能会使用该模型来决定在哪里集中他们的执法活动,导致这些地区的逮捕增加。
这些额外逮捕的数据将被反馈回去重新训练未来版本的模型。
这是一个正反馈循环:模型被使用得越多,数据就变得越有偏见,使模型变得更加有偏见,依此类推。
反馈循环也可能在商业环境中造成问题。例如,视频推荐系统可能会偏向于推荐由视频最大观看者消费的内容(例如,阴谋论者和极端分子倾向于观看比平均水平更多的在线视频内容),导致这些用户增加他们的视频消费量,进而导致更多这类视频被推荐。我们将在第三章中更详细地讨论这个话题。
既然你已经看到了理论的基础,让我们回到我们的代码示例,详细看看代码如何与我们刚刚描述的过程相对应。
代码如何工作
让我们看看我们的图像识别器代码如何映射到这些想法。我们将把每一行放入一个单独的单元格,并查看每一行正在做什么(我们暂时不会解释每个参数的每个细节,但会给出重要部分的描述;完整细节将在本书后面提供)。第一行导入了整个 fastai.vision 库:
1 | from fastai.vision.all import * |
不同类型的深度学习数据集和问题有各种类别,这里我们使用ImageDataLoaders。类名的第一部分通常是你拥有的数据类型,比如图像或文本。
我们必须告诉 fastai 的另一个重要信息是如何从数据集中获取标签。计算机视觉数据集通常以标签作为文件名或路径的一部分进行结构化,最常见的是父文件夹名称。fastai 带有许多标准化的标记方法,以及编写自己的方法。在这里,我们告诉 fastai 使用我们刚刚定义的is_cat函数。
最后,我们定义了我们需要的Transform。Transform包含在训练期间自动应用的代码;fastai 包含许多预定义的Transform,添加新的Transform就像创建一个 Python 函数一样简单。有两种类型:item_tfms应用于每个项目(在本例中,每个项目都被调整为 224 像素的正方形),而batch_tfms应用于一次处理一批项目的 GPU,因此它们特别快速(我们将在本书中看到许多这样的例子)。
为什么是 224 像素?出于历史原因(旧的预训练模型需要这个确切的尺寸),但你几乎可以传入任何尺寸。如果增加尺寸,通常会得到更好的模型结果(因为它可以关注更多细节),但代价是速度和内存消耗;如果减小尺寸,则相反。
为什么使用 CNN?这是创建计算机视觉模型的当前最先进方法。我们将在本书中学习有关 CNN 如何工作的所有知识。它们的结构受到人类视觉系统工作方式的启发。
在 fastai 中有许多架构,我们将在本书中介绍(以及讨论如何创建您自己的架构)。然而,大多数情况下,选择架构并不是深度学习过程中非常重要的部分。这是学术界喜欢谈论的内容,但实际上您不太可能需要花费太多时间。有一些标准架构在大多数情况下都有效,而在这种情况下,我们使用的是一种称为ResNet的架构,我们将在本书中大量讨论;它对许多数据集和问题都既快速又准确。resnet34中的34指的是该架构变体中的层数(其他选项是18、50、101和152)。使用层数更多的架构模型训练时间更长,更容易过拟合(即在验证集上的准确率开始变差之前无法训练多少个时期)。另一方面,当使用更多数据时,它们可能会更准确。
什么是度量标准?度量标准是一个函数,使用验证集来衡量模型预测的质量,并将在每个时期结束时打印出来。在这种情况下,我们使用error_rate,这是 fastai 提供的一个函数,它正是它所说的:告诉您验证集中有多少百分比的图像被错误分类。分类的另一个常见度量标准是accuracy(即1.0 - error_rate)。fastai 提供了许多其他度量标准,这将在本书中讨论。
度量标准的概念可能会让您想起损失,但有一个重要区别。损失的整个目的是定义一个“性能度量”,训练系统可以使用它来自动更新权重。换句话说,损失的一个好选择是易于随机梯度下降使用的选择。但度量标准是为人类消费而定义的,因此一个好的度量标准是您易于理解的,并且尽可能接近您希望模型执行的任务。有时,您可能会决定损失函数是一个合适的度量标准,但这并不一定是情况。
使用预训练模型时,cnn_learner将移除最后一层,因为该层始终是针对原始训练任务(即 ImageNet 数据集分类)专门定制的,并将其替换为一个或多个具有随机权重的新层,适合您正在处理的数据集的大小。模型的最后部分被称为头。
这是深度学习的关键之处——确定如何适应模型的参数以使其解决您的问题。要适应一个模型,我们必须提供至少一条信息:每个图像查看多少次(称为时代数)。您选择的时代数将在很大程度上取决于您有多少时间可用,以及您发现在实践中适应模型需要多长时间。如果选择的数字太小,您可以随时稍后进行更多时代的训练。
但为什么这种方法被称为fine_tune,而不是fit?fastai 确实有一个名为fit的方法,它确实适合一个模型(即,多次查看训练集中的图像,每次更新参数使预测越来越接近目标标签)。但在这种情况下,我们已经从一个预训练模型开始,并且我们不想丢弃它已经具有的所有这些功能。正如您将在本书中了解到的,有一些重要的技巧可以使预训练模型适应新数据集,这个过程称为微调。
微调一种迁移学习技术,通过使用与预训练不同的任务进行额外时代的训练来更新预训练模型的参数。
当您使用fine_tune方法时,fastai 将为您使用这些技巧。您可以设置一些参数(我们稍后会讨论),但在此处显示的默认形式中,它执行两个步骤:
使用一个时代来适应模型的那些部分,以使新的随机头部能够正确地与您的数据集配合工作。
在调用适合整个模型的方法时,请使用请求的时代数,更快地更新后面的层(特别是头部)的权重,而不是早期的层(正如我们将看到的,通常不需要对预训练权重进行太多更改)。
模型的头部是新添加的部分,专门针对新数据集。一个时代是对数据集的一次完整遍历。在调用fit之后,每个时代后的结果都会被打印出来,显示时代编号,训练和验证集的损失(用于训练模型的“性能度量”),以及您请求的任何指标(在这种情况下是错误率)。
因此,通过所有这些代码,我们的模型学会了仅仅通过标记的示例来识别猫和狗。但它是如何做到的呢?
我们的图像识别器学到了什么
在这个阶段,我们有一个工作良好的图像识别器,但我们不知道它在做什么!尽管许多人抱怨深度学习导致不可理解的“黑匣子”模型(即,可以提供预测但没有人能理解的东西),但事实并非如此。有大量研究表明如何深入检查深度学习模型并从中获得丰富的见解。话虽如此,各种机器学习模型(包括深度学习和传统统计模型)都可能难以完全理解,特别是考虑到它们在遇到与用于训练它们的数据非常不同的数据时的行为。我们将在本书中讨论这个问题。
2013 年,博士生 Matt Zeiler 和他的导师 Rob Fergus 发表了《可视化和理解卷积网络》,展示了如何可视化模型每一层学到的神经网络权重。他们仔细分析了赢得 2012 年 ImageNet 比赛的模型,并利用这一分析大大改进了模型,使他们能够赢得 2013 年的比赛!图 1-10 是他们发表的第一层权重的图片。

图 1-10。CNN 第一层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
这张图片需要一些解释。对于每一层,具有浅灰色背景的图像部分显示了重建的权重,底部较大的部分显示了与每组权重最匹配的训练图像部分。对于第一层,我们可以看到模型发现了代表对角线、水平和垂直边缘以及各种梯度的权重。(请注意,对于每一层,只显示了部分特征;实际上,在所有层中有成千上万个特征。)
这些是模型为计算机视觉学习的基本构建块。它们已经被神经科学家和计算机视觉研究人员广泛分析,结果表明,这些学习的构建块与人眼的基本视觉机制以及在深度学习之前开发的手工计算机视觉特征非常相似。下一层在图 1-11 中表示。

图 1-11。CNN 第二层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
对于第 2 层,模型找到的每个特征都有九个权重重建示例。我们可以看到模型已经学会创建寻找角、重复线条、圆圈和其他简单模式的特征检测器。这些是从第一层中开发的基本构建块构建的。对于每个特征,图片右侧显示了与这些特征最匹配的实际图像的小块。例如,第 2 行第 1 列中的特定模式与日落相关的梯度和纹理相匹配。
图 1-12 显示了一篇论文中展示第 3 层特征重建结果的图片。

图 1-12。CNN 第三层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
通过观察图片右侧,您可以看到特征现在能够识别和匹配更高级的语义组件,如汽车车轮、文字和花瓣。利用这些组件,第 4 层和第 5 层可以识别更高级的概念,如图 1-13 所示。

图 1-13。CNN 的第四和第五层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
本文研究了一个名为AlexNet的旧模型,该模型只包含五层。自那时以来开发的网络可以有数百层 - 所以你可以想象这些模型开发的特征有多丰富!
当我们早期微调我们的预训练模型时,我们调整了最后几层关注的内容(花朵、人类、动物),以专注于猫与狗问题。更一般地,我们可以将这样的预训练模型专门用于许多不同的任务。让我们看一些例子。
图像识别器可以处理非图像任务
其中举了一些将非图像处理任务的对象转换成图像之后再处理的例子,例如声波转换为声谱。
术语回顾
我们刚刚涵盖了很多信息,让我们简要回顾一下。表 1-3 提供了一个方便的词汇表。
表 1-3. 深度学习词汇表
| 术语 | 意义 |
|---|---|
| 标签 | 我们试图预测的数据,比如“狗”或“猫” |
| 架构 | 我们试图拟合的模型的 模板 ;即我们将输入数据和参数传递给的实际数学函数 |
| 模型 | 架构与特定一组参数的组合 |
| 参数 | 模型中改变任务的值,通过模型训练进行更新 |
| 拟合 | 更新模型的参数,使得使用输入数据的模型预测与目标标签匹配 |
| 训练 | 拟合 的同义词 |
| 预训练模型 | 已经训练过的模型,通常使用大型数据集,并将进行微调 |
| 微调 | 为不同任务更新预训练模型 |
| 纪元 | 一次完整通过输入数据 |
| 损失 | 衡量模型好坏的指标,选择以驱动通过 SGD 进行训练 |
| 指标 | 使用验证集衡量模型好坏的测量标准,选择供人类消费 |
| 验证集 | 从训练中保留的一组数据,仅用于衡量模型好坏 |
| 训练集 | 用于拟合模型的数据;不包括验证集中的任何数据 |
| 过拟合 | 以使模型 记住 输入数据的特定特征而不是很好地泛化到训练期间未见的数据的方式训练模型 |
| CNN | 卷积神经网络;一种特别适用于计算机视觉任务的神经网络 |
课后习题
你需要这些来进行深度学习吗?
很多数学 F
很多数据 T
很多昂贵的电脑 F
一个博士学位 F
列出深度学习现在是世界上最好的工具的五个领域。
- 图像识别
- 自然语言处理
- 图像分割
- 数据分析预测
- 用户喜好推测
第一个基于人工神经元原理的设备的名称是什么?
- Mark 1 感知机
根据同名书籍,分布式并行处理(PDP)的要求是什么?
一组处理单元
激活状态
每个单元的输出函数
单位之间的连接模式
通过网络连接传播活动模式的传播规则
将输入与单位的当前状态相结合以产生单位输出的激活规则
通过经验修改连接模式的学习规则
系统必须运行的环境
- 是什么两个理论误解阻碍了神经网络领域的发展?
- 使用多层设备可以解决这些限制
- 单层无法学习一些简单但关键的数学函数(如异或)。
打开一个笔记本并执行包含:
1+1的单元格。会发生什么?- 会output 2
跟随本章笔记本的精简版本中的每个单元格。在执行每个单元格之前,猜测会发生什么。
为什么使用传统计算机程序来识别照片中的图像很困难?
- 需要详细说明过程的每一个细微步骤。
塞缪尔所说的“权重分配”是什么意思?
- 即通过某种方式(如随机初始化、梯度下降优化等)为权重这种参数赋予初始值,并在训练过程中调整它们,使模型能更准确地拟合数据。
在深度学习中,我们通常用什么术语来表示塞缪尔所说的“权重”?
- 参数
画一幅总结塞缪尔对机器学习模型看法的图片。

为什么很难理解深度学习模型为什么会做出特定的预测?
- 深度学习模型通过多层非线性变换提取抽象特征,导致决策过程高度复杂且缺乏直观解释性。
展示了一个定理的名称,该定理表明神经网络可以解决任何数学问题并达到任何精度水平是什么?
- 度量标准
为了训练模型,您需要什么?
- 大量数据 其中需要划分出训练集和数据集
反馈循环如何影响预测性警务模型的推出?
基于过去的逮捕地点创建了一个预测性执法模型。实际上,这并不是在预测犯罪,而是在预测逮捕,因此部分地只是反映了现有执法过程中的偏见。然后执法人员可能会使用该模型来决定在哪里集中他们的执法活动,导致这些地区的逮捕增加。这些额外逮捕的数据将被反馈回去重新训练未来版本的模型。
这是一个正反馈循环:模型被使用得越多,数据就变得越有偏见,使模型变得更加有偏见,依此类推。
反馈循环也可能在商业环境中造成问题。例如,视频推荐系统可能会偏向于推荐由视频最大观看者消费的内容(例如,阴谋论者和极端分子倾向于观看比平均水平更多的在线视频内容),导致这些用户增加他们的视频消费量,进而导致更多这类视频被推荐。我们将在第三章中更详细地讨论这个话题。
我们在猫识别模型中总是需要使用 224×224 像素的图像吗?
- 不需要这是旧版本的遗留问题,在现在像素越高效果就会越好但所需要的时间就会更多
- 分类和回归之间有什么区别?
- 分类预测离散类别(如是否垃圾邮件),回归预测连续数值(如房价)
- 什么是验证集?什么是测试集?为什么我们需要它们?
- 简单来说就是一组模型从未见过的数据用来验证模型的训练效果,防止少量数据过度训练后导致过拟合,使得模型仅仅只是记住训练集而已。
- 验证集用于调参和模型选择,测试集用于最终评估模型泛化性能;两者分离以避免过拟合和确保评估客观性。
如果不提供验证集,fastai 会怎么做?
- 在valid_pct`默认设置比率fastai会将一定比率的训练集用作测试
我们总是可以使用随机样本作为验证集吗?为什么或为什么不?
- 不可以 一个随机子集是一个糟糕的选择(填补缺失太容易,且不代表你在生产中所需的)对于时间序列,选择数据的随机子集既太容易(你可以查看你试图预测的日期之前和之后的数据),又不代表大多数业务用例(在这些用例中,你使用历史数据构建模型以供将来使用)。
什么是过拟合?举个例子。
- 即使您的模型尚未完全记住所有数据,在训练的早期阶段可能已经记住了其中的某些部分。因此,您训练的时间越长,您在训练集上的准确性就会越好;验证集的准确性也会在一段时间内提高,但最终会开始变差,因为模型开始记住训练集而不是在数据中找到可泛化的潜在模式。
- 什么是度量?它与损失有什么不同?
- 度量标准是一个函数,使用验证集来衡量模型预测的质量,并将在每个时期结束时打印出来。在这种情况下,我们使用
error_rate,这是 fastai 提供的一个函数,它正是它所说的:告诉您验证集中有多少百分比的图像被错误分类。分类的另一个常见度量标准是accuracy(即1.0 - error_rate)。fastai 提供了许多其他度量标准,这将在本书中讨论。 - 性能的度量被称为损失。
- 度量标准是一个函数,使用验证集来衡量模型预测的质量,并将在每个时期结束时打印出来。在这种情况下,我们使用
- 预训练模型如何帮助?
- 预训练模型通过迁移学习大幅减少新任务所需数据和训练时间,同时提升模型性能。
- 模型的“头”是什么?
- 使用预训练模型时,cnn_learner将移除最后一层,因为该层始终是针对原始训练任务(即 ImageNet 数据集分类)专门定制的,并将其替换为一个或多个具有随机权重的新层,适合您正在处理的数据集的大小。模型的最后部分被称为头。
CNN 的早期层找到了什么样的特征?后期层呢?
图 1-10。CNN 第一层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
这张图片需要一些解释。对于每一层,具有浅灰色背景的图像部分显示了重建的权重,底部较大的部分显示了与每组权重最匹配的训练图像部分。对于第一层,我们可以看到模型发现了代表对角线、水平和垂直边缘以及各种梯度的权重。(请注意,对于每一层,只显示了部分特征;实际上,在所有层中有成千上万个特征。)
通过观察图片右侧,您可以看到特征现在能够识别和匹配更高级的语义组件,如汽车车轮、文字和花瓣。利用这些组件,第 4 层和第 5 层可以识别更高级的概念,如图 1-13 所示。
图 1-13。CNN 的第四和第五层的激活(由 Matthew D. Zeiler 和 Rob Fergus 提供)
图像模型仅对照片有用吗?
- 否 你可以将相关的目标转换为图像后进行分析
什么是架构?
- 我们试图拟合的模型的 模板 ;即我们将输入数据和参数传递给的实际数学函数
什么是分割?
- 区分图片中的不同物体
y_range用于什么?什么时候需要它?- 预测的是一个连续数值,而不是一个类别时。告知我们的目标范围。
- 什么是超参数?
- 它们是关于参数的参数,因为它们是控制权重参数含义的高级选择。
- 在组织中使用 AI 时避免失败的最佳方法是什么?
每章还有一个“进一步研究”部分,提出了一些在文本中没有完全回答的问题,或者给出了更高级的任务。这些问题的答案不在书的网站上;您需要自己进行研究!
为什么 GPU 对深度学习有用?CPU 有什么不同之处,为什么对深度学习效果不佳?
试着想出三个反馈循环可能影响机器学习使用的领域。看看是否能找到实践中发生这种情况的文档示例。