我想知道您如何使机器学习算法以更高的抽象水平进行思考-我似乎找不到任何资源。
说,我训练了一种机器学习算法,使用包含1000个带标签示例的数据集来识别猫。即使猫和狗有点相似,我是否需要构建一个全新的算法并在1000个新数据点上对其进行训练,以识别狗?有什么方法可以让Cat算法向狗提供几张狗的照片(远少于1000张),现在它也能够检测到狗了吗?必须重新训练算法以完成非常相似的事情(我到目前为止一直在这样做)似乎很乏味。
很抱歉,这个问题似乎很基本。我对机器学习非常陌生(没有上过任何课或上任何课);到目前为止,我只使用了非常简单的分类算法和基本的张量流。
答案 0 :(得分:5)
是的,实际上,您正在寻找的被称为转移学习,而这实际上在当今的深度学习(尤其是图像识别)中非常普遍。
以下是转移学习的工作原理(直观):
就您的示例而言,您有一个模型,该模型学得很好,可以识别猫。但是为了使模型能够识别图像(请注意:计算机将图像视为像素阵列,仅此而已)是猫,它首先需要能够看到更简单的特征(例如线条) ,曲线,角,圆)。我们称这些为低级功能。通过组合这些特征,该模型现在可以学习如何查看高级特征,或更复杂的形状,可能是特定于领域的(例如,眼睛,耳朵,爪子,尾巴)。现在,这些高级功能将传递给一个简单的分类器,以告诉我们它是否是猫。
现在说我们要建立一个识别图像是否是狗的模型。通常,我们必须从头开始进行培训,但是我们真的必须这样做吗?实际上,否!我们可以使用从猫模型中学到的一些知识来使我们的生活更轻松。事实证明,猫模型必须首先学习的这些低级特征(线条,边缘等)非常通用,可用于任何图像识别任务!因此,我们可以按原样使用这些低级功能,改编高级功能,然后在最后完全训练分类器。因此,通过最少的培训,我们就有了一个模型,可以学习如何识别狗!
一旦您了解了这些功能,整个概念就会变得更加清晰:
在底部,您可以看到可以在任何与图像相关的任务中使用的通用低级功能。然后,每个模型都从低级功能中创建自己的高级功能。这意味着,一旦模型学会了提取这些知识,就可以将这些知识传递给另一个模型。
除了减少训练时间之外,模型实际上还可以受益于更大的训练集。随后,如您所述,第二个模型可以用比第一个模型少的图像来训练!
这在实践中如何完成?
最简单的方法是对第一个任务(在您的情况下为猫)训练卷积神经网络,然后再训练具有相同架构的第二个 在第二项任务(狗)上。诀窍是将第二个模型的权重初始化为第一个模型的权重。然后,您可以选择冻结模型的第一层,因为它们对应于模型已经学会提取的低级特征。
此过程实际上非常普遍,以至于当今训练的图像识别模型的多数权重是从另一个预先训练的模型中初始化的。
有任何例子吗?
我第一次看到这是在Cats vs Dogs kaggle competition期间,排名最高的参赛者之一下载了ImageNet数据集上预先训练的模型的权重,然后训练了大约5分钟(btw此过程通常称为微调)。
答案 1 :(得分:0)
有很多方法可以回答这样的问题。
您需要明确说明您希望“机器学习算法”做什么。
您要吗
您尝试了什么?重新培训可能看起来很乏味,但如果可行,那么这有关系吗?采取“自动驾驶汽车”算法。如果社会不安全(或不起作用),社会可能会感到乏味。
另一个例子是计算机象棋。在70年代和80年代初,一切都与蛮力有关。 “在短时间内我能找到的最好的动作是什么。
但是后来算法变得更聪明了。他们了解了开局动作,中局和结束局策略。
“当您拿着锤子时,一切看起来都像钉子”这句话在这里适用。
如果仍然不确定,请研究用例。即您可以使用哪种算法来检测猫?哪个最好? (您如何衡量“最佳”?速度,效率,准确性?)