具有更高抽象水平的机器学习

Nei*_*rni 3 machine-learning

我想知道您如何使机器学习算法以更高的抽象水平进行思考-我似乎找不到任何资源。

假设我训练了一种机器学习算法,使用包含1000个带标签示例的数据集来识别猫。即使猫和狗有点相似,我是否需要构建一个全新的算法并在1000个新数据点上对其进行训练,以识别狗?有什么方法可以让Cat算法为狗提供几张照片(远少于1000张),现在它也能够检测到狗了吗?必须重新训练算法以完成非常相似的事情(我到目前为止一直在这样做)似乎很乏味。

抱歉,这个问题似乎很基本。我对机器学习非常陌生(没有上过任何课或上任何课);到目前为止,我只使用了非常简单的分类算法和基本的张量流。

Dji*_*011 5

是的,实际上,您正在寻找的是所谓的转移学习,它实际上在深度学习(尤其是图像识别)中非常普遍。

以下是转移学习的工作原理(直观):

就您的示例而言,您有一个模型,该模型已经很好地学习了识别猫的能力。但是为了使模型能够识别图像(注意:计算机将图像视为像素阵列,仅此而已)是猫,它首先需要能够看到更简单的特征(例如线条) ,曲线,角,圆)。我们称这些较低级别的功能。通过组合这些功能,模型现在可以学习如何查看更高级别的功能或更复杂的形状,可能是特定于领域的(例如,眼睛,耳朵,爪子,尾巴)。现在,这些高级功能将传递给一个简单的分类器,以告诉我们它是否是猫。

现在说我们要建立一个识别图像是否为狗的模型。通常,我们必须从头开始进行培训,但是我们真的必须这样做吗?其实!我们可以使用从猫模型中学到的一些知识来使我们的生活更轻松。事实证明,猫模型必须首先学习的这些低级特征(线条,边缘等)非常通用,可以用于任何图像识别任务!因此,我们可以按原样使用这些低级功能,改编高级功能,然后在最后完全训练分类器。因此,通过最少的培训,我们就有了一个模型,可以学习如何识别狗!

看看这些功能,整个概念就会变得更加清晰:

在底部,您可以看到可以在任何与图像相关的任务中使用的通用低级功能。然后,每个模型从低级模型创建其自己的高级特征。这意味着,一旦模型学会了提取这些知识,就可以将这些知识传递给另一个模型。

除了减少训练时间外,模型实际上可以从初始模型所基于的更大的训练集中受益!随后,正如您所说,可以用比第一个模型少的图像训练第二个模型!

在实践中如何做到这一点?

最简单的方法是在第一个任务上训练卷积神经网络(在您的情况下是猫),然后在第二个任务(狗)训练具有相同体系结构的第二个。诀窍是将第二个模型的权重初始化为第一个模型的权重。然后,您可以选择冻结模型的第一层,因为这些第一层对应于模型已经学会提取的低级特征。

该过程实际上非常普遍,以至于当今大多数训练的图像识别模型都从另一个预先训练的模型中初始化了权重。

有什么例子吗?

我第一次看到这是在Cats vs Dogs kaggle比赛中,排名最高的参赛者之一下载了在ImageNet数据集上预先训练的模型的权重,然后训练了大约5分钟的模型(此过程是通常称为微调)。