Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2年前关闭。
                                                                                            
                
        
我想知道您如何使机器学习算法具有更高的抽象水平-我似乎找不到任何资源。

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

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

最佳答案

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

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

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

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

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



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

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

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

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

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

有什么例子吗?

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

07-24 09:53
查看更多