Advertisement

李宏毅机器学习35——meta learning

阅读量:

摘要:

这节课学习了meta learning(元学习)

元学习是通过一系列task的训练,让机器成为一个更好的学习者,当机器遇到新的学习任务时,就能更快的完成。类比到现实生活中,元学习不是指某一类的知识内容,更像是学习一种学习方法

meta learning和机器学习的步骤大体相同,只是将函数替换成学习算法。区别在于元学习中训练任务中包括训练数据和测试数据。而机器学习只有训练数据。

这节课中,meta learning讲了两种方法maml和reptile,以初始化参数为例,介绍了这两种方法和pre-train的区别:pre-train关注当前初始化参数θ的表现,而maml更在意训练之后θ的好坏。在一定条件下,reptile更像是maml和pre-train的结合。

目录

一、什么是Meta learning

1.定义一组learning algorithm

2.评估函数的好坏

3.选择最好的函数

二、meta learning的两种方法

1.maml

2.Maml和model pre-training对比

3.reptile

总结:


一、什么是Meta learning

让机器学习如何去做学习

机器在经过一系列的学习任务后,可以将学到的知识用在新的学习任务中,成为一个更好的学习者。这样在遇到新的学习任务时,机器能够能快的完成。-

机器学习指的是找到满足需求的函数f,以下图为例,f的任务是对图像识别。

Meta learning指的是找到产生f的函数F,向F输入训练数据,可以产生满足需求的f。

Meta learning的步骤与machine learning类似,机器学习的步骤是:

1.定义函数集

2.评估函数的好坏(也就是找到loss函数)

3.选择最好大的函数

与machine learning的差别,只需要把函数f改成学习算法F

1.定义一组learning algorithm

下图是图片梯度下降算法。红色方框中的内容都是我们人为设计的,红色的方块选择不同设计的时候,就等于选择了不同的算法。以初始化部分为例,当我们选择不同的初始化方案时,最终产生的结果也是不同的,那我们能不能考虑让机器自己训练这部分,选出最合适的初始化值。选择不同的初始化值也就可以看作是一组learning algorithm。

2.评估函数的好坏

通过上一步,我们已经有一个学习算法集,这一步的目的是评估学习算法的好坏。

输入训练数据到F中得到f,为了评估F的好坏,我们需要将测试数据输入到f中,查看f的输出结果loss,在多个任务中反复进行这一步骤。

之后将每个任务得到的loss求和,最终得到L(F)。L用来评估学习算法的好坏。

机器学习只需要有一个训练目标,整个过程需要测试数据和训练数据

Meta learning需要很多个训练任务,其中训练过程中需要很多组的训练数据和测试数据。在测试过程中,也要选取与上面不同的测试数据。

Meta learning在few-shot中被广泛应用,因为训练资料少,跑的比较快,比较容易评估。

在few-shot learning中,往往把训练资料叫做support set,把测试资料叫做query set

3.选择最好的函数

求解loss函数L(F)

老师提供了一个数据集,其中有1623个字符,每个字符有20种写法。

用这个数据集进行few-shot 分类测试

n-ways K-shot指的就是进行n个类别,每个类别k个例子的分类。

举例的任务是20ways 1shot,也就是给机器20种类别,每个类别1样本,,让机器学习分类。

训练时:选取n个训练字符,从每个字符中选取k个例子,作为一次训练任务。

测试时:寻去n个测试字符,从每个字符中选取k个例子,作为一次测试任务。

二、meta learning的两种方法

1.maml

学习一个最好的初始化参数

这个方法和上面说的就是一回事,找到最好的初始化参数Φ

Φ会决定θ的最终结果,将每个task的θ输入loss函数,求和,找到最合适的初始化参数Φ。

如何minimizeL(Φ)? 可以利用gradient descent

2.Maml和model pre-training对比

在maml中,我们不在意Φ在训练任务上的表现如何,更在意选取Φ为初始值后,选了的结果表现怎么样。

下图中,Φ在task1和task2中进行训练,都能得到很好的效果,那这样的Φ就很好。

在model pre-training中,需要找到目前在所有task中表现很好的Φ,并不能保证之后训练的结果好坏。

另外,maml在实际训练时,只进行一次参数的更新。主要原因是为了缩短时间。

Maml的实际操作:

首先有初始值Φ0,选取一个task m,更新一次参数,得到θm,再次更新参数

用得到的θm的方向来更新Φ,得到Φ1

继续选取新的task,重复上述操作

对于model pre-training来说,每次更新直接按照计算的梯度移动Φ。

3.reptile

Reptile的做法:

首先有一个初始值Φ0,选取一个task m,更新多次参数,得到θm

之后Φ0朝着θm的方向移动,得到Φ1

继续选取task n,重复上面的操作,更新Φ。

Reptile、pre-train、maml的区别

结合起来看,reptile更像是pre-train和maml的结合版本

下面的图展示了几种方法的对比,可以看到maml最好,reptile次之,pre-train明显效果更差一些。

总结:

按照广义的元学习,上节课的迁移学习也是其中的一类。与深度学习相比,当前的深度学习大部分情况下只能从头开始训练。使用finetune来学习新任务,效果往往不好,而Meta Learning 就是研究如何让神经元两个很好的利用以往的知识,使得能根据新任务的调整自己。

此外,meta learning除了可以寻找初始化参数,还可以用来找神经网络的结构/激活函数,甚至还可以输出调节参数的规则。

全部评论 (0)

还没有任何评论哟~