[转载]Meta Learning单排小教学

原文连接:Meta Learning单排小教学算法

 

虽然Meta Learning如今已经很是火了,可是还有不少小伙伴对于Meta Learning不是特别理解。考虑到个人这个AI游乐场将充斥着Meta Learning的分析解读及各类原创思考,因此今天Flood就和你们作一个Meta Learning小教学,但愿可以用最简短,最通俗的语言来让你们明白Meta Learning的概念,Meta Learning的几种研究方法,以及Meta Learning将来的发展,带你们上分!相信这个Meta Learning小教学是目前全网惟一的中文教程。网络

 

固然要看懂这个小教学,你们至少要对深度学习和加强学习有必定了解。下面咱们就开始吧!架构

 

1.Meta Learning到底研究什么?

 

要回答这个问题,咱们先来问另外一个问题:app

 

Deep Learning是在研究什么?ide

 

简单一句话就是Deep Learning研究一个从x到y的映射mapping,只是这个映射函数f是用一个端到端的深度神经网络来表示:函数

 

 

 

若是是计算机视觉中的图像识别,那么x就是图片,y就是标签;性能

若是是天然语言处理中的文本翻译,那么x就是好比中文,y就是英文;学习

若是是深度加强学习中的玩Atari游戏,那么x就是屏幕画面,y就是输出的动做。测试

 

因此,咱们能够看到,深度学习研究的就是经过深度神经网络来学习一个针对某一特定任务task的模型。经过大量的样本进行训练,训练完,这个模型就能够用在特定任务上。this

 

说完Deep Learning研究什么,那Meta Learning呢?

 

Meta Learning研究Task!

 

Meta Learning的目的是但愿学习不少不少的task,而后有了这些学习经验以后,在面对新的task的时候能够游刃有余,学的快又学的好!

 

为何叫Meta呢?Deep Learning是在Task里面研究,如今Meta Learning是在Task外面,更高层级来研究。也就是在Meta Learning的问题上,Task是做为样原本输入的。这里咱们将用Few-Shot Learning的问题加以解释。

 

 

 

 

但在此以前,咱们要先从人类智能的角度,仿生学的角度说说Meta Learning的意义!

 

2. 为何研究Meta Learning?

 

Deep Learning如今的研究,训练一个模型,都是从0开始,也就是所谓的train from scratch。可是对比一下人,咱们人是从0开始学习嘛?没有,人就算是刚出生的婴儿,都已经有一套本能的智能来引导他们去学习,而以后随着人不断长大,咱们就慢慢的再也不从0开始学习了,都是基于咱们已有的知识学习,也就是所谓的先验知识Prior。好比咱们没有玩过炉石传说这个游戏,可是咱们经过咱们的先验知识知道这是卡牌游戏,而后咱们理解了游戏规则,咱们也就能够上手来玩了。因此,咱们人要玩一个新游戏是很是快的,而如今Deep Learning,Deep Reinforcement Learning在作什么?在让一个婴儿从0开始学习玩游戏。这不符合现实,而实际上咱们也发现从0开始学习须要巨量的时间,虽然最后学会了甚至学的比人更好,可是这很不类人,很不智能。

 

所以,咱们的研究须要转换一下思路了,咱们为何要从0开始学习呢?咱们为何不先学习一个Prior先验知识呢?若是咱们构建的深度学习系统可以学到先验知识,而且可以利用这些知识,咱们就能够在新的问题上学的更快更好!那么,这个就是Meta Learning要作的事情了,很是有意义,很是符合人工智能的发展路线。更进一步的,若是咱们可以实现lifelong learning终身学习,那么咱们的人工智能系统就能够愈来愈智能了。

 

有了这样的背景知识,咱们就更好的理解Meta Learning要干什么了?咱们不是要学一个具体的模型,咱们要学的是一个先验知识。这里我特别喜欢用金庸武侠的武功修炼比喻,若是说Deep Learning是学习具体的外功的话,Meta Learning咱们要学的是内功。

 

 

 

 

 

相信你们都看过倚天屠龙记,里面张无忌自从学习了九阳神功以后,学任何武功什么太极拳,乾坤大挪移都变得特别快。Meta Learning就是咱们的九阳神功。

 

那么从AI的发展角度看,人工智能的发展确定是一个由外向内的过程,简单的x到y的映射这种其实一点都不知道,想一想人的情感,人的思惟,一句话能够解毒出无数种可能,怎么多是简单的x到y呢? 也所以,Meta Learning是AI研究的必然趋势。

 

3. Few-Shot Learning,一个引子

 

有了上面的知识基础,咱们如今就要深刻一点,具体的看一个典型的Meta learning问题,也就是Few-Shot Learning少样本学习!

 

 

 

 

 

这里我引用了Google Brain的Hugo Larochelle的一张ppt来加以说明。咱们知道通常的图像识别好比imagenet,就是给你1000个类的训练集进行训练,每个类有600张图片,而后训练好神经网络后,咱们要用1000个类里面新的图片对这个神经网络进行测试,看可以识别多好。那么Few-Shot Learning的要求就是少样本,咱们但愿给你5个类的训练集进行训练,每个类只有1张或者几张图片,总之很是少,而后训练好神经网络以后,咱们要用着5个类里面的新的图片进行测试,看识别效果。

 

那么咱们直接看这个问题,确定以为不可能啊,只用几张图片怎么训练?不得分分钟过拟合吗?不要紧,咱们有Meta Learning的设定,这训练样本和测试样本都只是一个task,咱们能够用不少别的task进行训练,学习一个Prior,而后咱们但愿在新的task上可以学出效果来。

 

因此就如上图所示,在Meta Learning上,咱们再也不直接叫train和test了,而是叫Meta-train和Meta-test。在上图中,每一行都是一个task,包含了task的train set和test set,图中展现就是所谓的5way 1shot 设定,也就是一个task包含5个类,每个类一个训练样本,而后给你2个测试样本测试。咱们能够把每个task当作一个meta learning的训练样本。咱们要经过多种task的训练,从而在Meta-test的时候也就是在新的task上取得好效果。

 

相信经过上面的解释,你们对于Meta Learning这个问题设定是理解的了。下面咱们就来看看怎么来学这些task。

 

4.Meta Learning的三种解决办法

 

咱们仍是根据Few-Shot Learning的问题设定来讲明怎么学。

 

 

 

咱们看到,如今输入到神经网络的数据变了,实际上就是多了一个D_train 训练集,也就是这个task拥有的东西。这个训练集好比上面说的5way 1shot,也就是5张图片和5个对应的标签。咱们但愿咱们的神经网络可以仅根据这几张图片获得一个针对这几张图片的神经网络,从而可以对新的样本进行识别。因此,这里就产生一个问题:

 

怎么使用D_train来影响咱们的神经网络呢?

 

1)HyperNetwork 生成参数

 

 

 

 

HyperNetwork是一个蛮有名的网络,简单说就是用一个网络来生成另一个网络的参数。那么咱们这里很是直接,咱们的设想就是但愿用一个hypernetwork输入训练集数据,而后给我输出个人对应模型也就是上图f的参数,咱们但愿输出的这个参数可以使得在测试图片上取得好的识别效果。那么,有了这样设计,这个hypernetwork其实就是一个meta network。你们能够看到,原本基本的作法是用训练集直接训练这个模型f,可是如今咱们用这个hypernetwork不训练了,直接给你输出参数,这等价于hypernetwork学会了如何学习图像识别,这也是为何meta learning也同时叫作learning to learn的缘由。咱们经过hypernetwork学会学习。训练好了这个模型,连反向传播梯度降低都不要了,直接给你参数,是否是很酷?

 

那怎么训练这个神经网络呢?

 

这里有个所谓的episodic training!一个episode就是包含了一个task,有训练集有测试集。咱们使用训练集输入到hypernetwork,获得f的参数,而后使用测试集输入到f 获得预测的标签,最后用测试集的样本标签获得模型的loss,以后就用梯度降低进行训练。因此咱们能够看到,整个模型是端到端的。经过大量的episodic training,也就是大量的task进行训练,咱们就能够训练出一个模型出来。

 

须要稍微说明一下这个task哪里来呢?咱们采样出来的。好比咱们给你100个类的训练样本,每个类可能有600个图片,也就是imagenet的规模。可是咱们这里不是直接batch这些样本进行训练,而是随机采样出一个task,好比选5个类,每个类1个图片,而后再每个类选5个图片做为task的测试集。这样采样是为了模拟meta-test阶段的task构造。

 

 

 

那么由于meta-train和train和乱,经常会混掉,因此你们约定俗成的把task里面的训练集称为support set,把task里面的测试集称为query set。而Meta training set和Meta test set分别直接称为training set和test set。

 

使用Hypernetwork在我看来是最直接表现meta learning的一种作法。可是如今实际上咱们好像没有看到直接用hypernetwork作few shot learning的paper,而都是间接的使用,或者简单使用一下。具体的优缺点咱们仍是等下再总结。先说第二个方法。

 

2)Conditional Neural Network 条件神经网络

 

 

 

这个作法其实就是上图啦,咱们直接把D_train当作条件输入到f中,那么这个f自己就变成一个meta network了。也就是条件神经网络实际上可以获得和上面的hypernetwork同样的意义。由于咱们能够想,只要条件D_train变了,那么y_test确定也就变了。因此这里就很是很是直接了。把数据所有输入进去,让神经网络本身学就好了,不外乎就是去设计一个合适的网络结构而已。那么,这里最最简单粗暴的网络结构就是SNAIL算法使用temporal convolutional network,也就是wavenet的架构:

 

 

 

固然,咱们也能够巧妙一点的设计,好比个人relation net,不把标签y做为输入:

 

 

 

事实上基于条件神经网络的作法,效果是最好的。

 

3)MAML 基于梯度的作法

 

如今咱们来讲MAML,这个能够单独算一个不同的作法。

 

 

 

这个思路只能说也太简单了,就是为何不用D_train先用通常的监督学习方式更新一下网络,而后再使用更新参数后的f来使用D_test进行训练呢?这样的话,咱们也经过D_train更新了网络了,只是咱们但愿咱们只需用极少的step训练D_train就能使D_test取得好的效果。

 

因此,MAML的核心步骤就是

(1)采集Task,获得D_train和D_test

(2)使用D_train对神经网络f训练少数几步,获得新的参数

(3)利用新的参数训练D_test,而后使得梯度降低更新一开始的参数。

 

这里最很差理解的可能就是二次梯度了,也就是咱们的目的仍是要训练一开始的参数,只是中间咱们要先计算梯度获得新的参数,而后用新的参数再算一次梯度,这样对于一开始的原始参数就要算两次梯度。这是MAML比较麻烦的地方,也能够认为是一种缺点。固然,如今使用Pytorch能够分分钟实现这种二次梯度的操做。

 

能够说MAML仍是很是巧妙的,一种不同的方法,固然了已经被Chelsea Finn发扬光大了。

 

5. 三种解决办法有什么优缺点呢?

 

下面咱们来谈谈三种办法的优缺点。先说HyperNetwork生成参数的作法。这种作法最大的问题就在于参数空间是很大的,因此要生成合适的参数特别是巨量的参数实际上是比较困难的,因此目前绝大多数生成参数的作法都是只生成少许参数,好比一层的MLP,或者对于参数的空间进行必定的限制,好比就在[-1,1]之间,不然空间太多,有无数种选择输出同样的结果,就很难训了。可是采样HyperNetwork又有其灵活性,意味着咱们能够只更新少部分参数,而不用所有。

 

接下来就是条件神经网络了。这又有什么问题呢?我以为在性能上绝对会是最好的,很直接,可是很差看,一直要拖着一个条件,网络很大。无论是生成参数仍是MAML,他们的模型网络就是独立的,以后只要输入x就好了,而条件神经网络每次都要输入条件,很烦啊。

 

那么MAML呢?可能最烦人的就是二次梯度了,这意味着MAML的训练会很慢,那么就很难hold住大网络了。实际上MAML目前对于大的网络结构好比Resnet效果并很差。而后MAML是使用D_train的Loss来更新整个网络,对比HyperNetwork缺乏灵活性。这个Loss就是最好的吗?不见得。若是D_train是无监督数据,那怎么办?因此MAML是有局限性的。

 

目前各类各样的Meta Learning研究,在方法论上都逃不出这三种方法。要么改改网络结构,要么结合一下上面的方法,好比先MAML再生成参数,或者hypernetwork和conditional neural network混着用等等。那么什么才是终极必杀呢?可能仍是要具体问题具体看吧,对于不一样的问题采用不一样办法效果会不同。这些都值得咱们去探索。

 

6. Meta Learning的潜在威力!

 

讲完了前面的方法论,相信你们对于Meta Learning已经有所了解了。可是你们确定会疑问,难道Meta Learning只是在作Few-Shot Learning这种有点boring的任务吗?

 

固然不是。

 

首先咱们能够改为加强学习的task,对于加强学习的task,这里的D_train就是历史信息了:

 

 

 

所谓的历史信息也就是以前的transitions(state,action,reward,next_state)。把历史信息输入进去,原来的reinforcement learning就分分钟变成meta reinforcement learning啦。

 

那么,Meta Learning也仅仅止步于此吗?

 

也固然不是!

 

扩宽思惟极限的时候到了!

 

谁说D_train和D_test要同样呢!!!

 

这才是Meta Learning最最重要的思想!一个task里面的训练集和测试集能够彻底不同。只要经过D_test的loss signal可以传递到D_train中,整个网络就能够端到端的训练。

 

好比D_train能够是彻底的无监督数据(没有标签),那么咱们一样能够构造一个hypernetwork来更新咱们的模型,而后用D_test有标签的数据来训练。这样训练完以后,咱们就获得了一个可以无监督学习的hypernetwork了。

 

实际上D_train和D_test的差别性能够进一步变大,训练能够是加强学习,测试能够是模仿学习,训练能够是语音,测试能够是图像,等等,会不会颇有趣呢?

 

最后,咱们能够举一个更形象一点的idea:好比有一个虚拟世界,里面能够生成虚拟人在里面生活,咱们的train过程就是让这个虚拟人在里面爱干啥干啥,能够玩好比1年的游戏时间,而后咱们的test过程要求这个虚拟人经过200的智商测试。那么经过巨量的虚拟meta training以后,咱们就能获得一个这样的人工智能系统,这个虚拟人懂得本身去学习了,而咱们还彻底不知道他怎么学的。

 

So, this is 

Meta

Learning!

 

The Future of AGI!

相关文章
相关标签/搜索