查看原文
其他

【综述专栏】Meta Learning — Introduction to meta-learning

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

来源:知乎—刘本初

地址:https://zhuanlan.zhihu.com/p/357617447  https://zhuanlan.zhihu.com/p/357894956 https://zhuanlan.zhihu.com/p/359366503


01

1. 写在前面
由于工作中遇到数据集少的情况,顺便查了下资料,发现有关小样本学习,元学习等相关研究可以解决这一问题。最终聚集到《Hands-On Meta Learning With Python》这本书和相关一些文章上,为了加深对元学习的理解,对此书和部分论文内容进行了整理,希望对即将有兴趣入门的同学有所帮助,一起学习讨论,共同提高~
注:以这本书为主线,重点在介绍原理、思想上,代码相关的部分进行了省略。
2 简介
1. 元学习简介,帮助我们理解什么是元学习以及各种不同类型的元学习。我们将学习如何利用只需要少量数据点的小样本学习进行元学习。接下来,我们将深入了解梯度下降。最后,我们将小样本学习抽象成一个模型优化问题。
2. 首先介绍下孪生网络和孪生网络如何在单样本学习中应用。我们将介绍下孪生网络的架构,以及它的一些应用。接下来介绍如何利用孪生网络构建人脸和语音识别模型。
3. 原型网络及其变种,阐述了什么是原型网络以及在小样本学习中的应用。接下来我们将构建一个在文字识别的原型网络。最后,我们将研究不同类型的原型网络,如高斯原型网络和半原型网络。
4. 利用tensorflow 构建的关系匹配网络,将助我们理解关系网络及其在单样本、小样本和零样本学习中的应用。接下来,我们将研究如何用tensorflow构建一个关系网络。后面,我们将学习匹配网络及其架构,挖掘全语境嵌入及 如何用tensorflow 构建一个匹配网络。
5. 存储增强神经网络,包含介绍神经调节机和如何利用外部存储进行信息存储与检索。接下来我们将探索神经调节机的寻址机制,以及存储增强神经网络,以及二者的架构的区别。
6. MAML及其变种,涉及一种最受欢迎的一种元学习方法,即不依赖模型的元学习。我们将研究下什么是MAML 和它是如何在监督学习和强化学习中应用的。我们将从头构建MAML。接下来,我们将学习对抗元学习和快速文本适应元学习。
7. Meta_SGD 和爬虫(reptile) 章节,我们将介绍meta-SGD是如何学习梯度下降算法中所有要素的,比如初始权重、学习率和更新方向。我们将构造meta-SGD。在后面的部分我们将学习爬虫算法,分析其如何可以作为MAML的一个改进。我们最后介绍如何用爬虫算法进行正弦波回归。
8. 梯度一致作为优化目标一节,将会涉及其如何在元学习中应用。我们将学习什么是梯度一致,它是如何增强元学习算法的。后面,我们将学习如何从头搭建梯度一致算法。
9. 近期进展和下一步工作,从解释什么是不依赖任务的元学习,极其是元学习如何应用在模仿学习中。接下来介绍如何借助CACTUS算法将MAML算法应用到无监督学习的场景。最后,我们将探讨下一种深度元学习算法,即在概念空间的如何学会学习。
3. 元学习
元学习是当前人工智能领域最炙手可热的研究方向。随着大量的研究文献和成果,元学习在人工智能方向取得了重大突破。在进入元学习主题之前,我们先来看下当前AI模型是如何工作的。
近些年深度学习以生成对抗式网络和胶囊网络为代表发展迅猛。但深度网络需要大量训练数据训练模型,在少量数据样本的情况下将陡然失效。假设我们训练一个深度模型来完成任务A。现在,我们有一个新的任务B,它和任务A高度相关,但是我们不能用同一个模型。我们需要从新训练模型来完成任务B。因此,我们需要重新训练模型,即使它们是高度相关的。
深度学习真的是人工智能吗?当然,它不是。人类是如何学习的?我们将学到的知识泛化成很多概念,从这些概念中学到知识。但是当前的学习算法解决的仅仅是一个任务。这样就导致了元学习的诞生。元学习产生一个通用的人工智能模型, 它不仅可以完成不同类型的任务,还可以不用每次都重新训练模型。我们利用多个相关任务的少量样本来训练模型,当处理一个新的相关任务时,可以在原来模型基础上进行微调模型,不需要从头训练模型。很多学者和科学家相信元学习使得我们更接近通用人工智能。在接下的章节中,我们将详细介绍元学习模型是如何进行学习的。
4. 元学习与小样本
从少量数据点学习知识被称为小样本学习或K样本学习,其中K代表数据集中每个类别中的样本数目。假设我们研究猫和狗的图像分类问题。当我们只有猫和狗个一张图像时,称为单样本(姑且统一将shot 译成样本)学习,即在每个类别中只有一个数据点。当我们分别有猫和狗的十张图像时,称为10样本学习。因此k样本学习中的k代表每个类别中数据点的个数。那么0样本学习代表每类没有样本。等等~,什么?我们如何学习当根本就没有数据点时?这不是在扯~吗?在这种情况下,虽然没有数据点,但是有从每类学习到的元信息,我们将从这些元信息中学习。当在数据集中有两个类别时,如猫和狗,我将定义为2式(姑且统一将way译成式)k样本学习,因此n式即代表数据集中有n个类别。
5. 元学习分类
元学习的分类有多种方式,从学习优化器找到最优的权重集合的角度,我们将元学习分为下面三大类:
  • 度量空间学习
在基于度量空间的元学习中,我们将学习适合的度量空间。加入我们将学习两幅图像的相似度。在度量学习中,我们采用一个简单的神经网络提取两幅图像的特征,通过计算两幅图像的距离来衡量相似度。这种方法广泛应用在没有很多数据点的小样本学习中。在接下来的章节,我们将学习基于度量的学习算法,比如孪生网络,原型网络和关系网络
  • 初始化学习
在此方法中,我们将尝试学习最优的初始化参数。这是什么意思呢?假设我们将要构建一个神经网络来进行图像分类。首先,我们初始化随机权重,计算损失,接下来通过梯度下降最小化损失。也就是说,我们将通过梯度下降和最小化损失来得到最优权重。假设我们能够用最优权重或次最优权重初始化权重,而不是随机初始化权重,我们将能得到更快的学习、收敛速度。我们后面将介绍不依赖模型的元学习, 爬虫算法和元随机梯度算法,并详细的探讨这些算法如何能够找到权重的最优初始化。
  • 优化器学习
在此方法中,我们将学习优化器。通常如何优化神经网络?我们将通常采用海量数据集训练网络,通过梯度下降最小化损失进行神经网络优化。但在小样本学习中,因为数据点太少,梯度下降是无效的。因此,在这种情况下,我们将自学习优化器。我们将有两个网络:一个主学习基网络和一个优化基网络的元网络。在下面的章节中,我们将详细地讨论这部分工作。
6. 结束
本节大概介绍了后面要讲述的主要内容。下一节将重点描述优化器学习中的通过梯度下降来学习如何梯度下降学习 和 小样本学习优化模型。

02

1. 通过梯度下降来学习如何梯度下降学习
接下来我们将学习一种有意思的元学习算法,称为通过梯度下降来学习如何通过梯度下降学习。这个名字是不是听起来很迷惑?其实,实际上,是一种最简单的元学习算法。我们知道在学习中,目标是学习学习的过程。通常我们是如何训练神经网路呢?我们通过梯度下降来计算和最小化损失来训练网络。因此,我通过梯度下降优化模型。那么,我们可以自动学习优化过程来代替梯度下降吗?
我们将如何学习呢?我们用循环神经网络(RNN)来代替传统梯度下降优化器。那么这是如何工作的呢?为何可用RNN来代替梯度下降呢?加入我们进行深入研究,那么梯度下级究竟做了什么呢?它本质上是从输出到输入的序列更新,我们将这些在一个状态中存储这些更新。因此,可以采用RNN,并在RNN单元中存储更新结果。
因此,次算法的核心思想就是利用RNN来代替梯度下降。但是RNN是如何学习的呢?如何优化RNN?为了优化RNN,采用梯度下降。简而言之,通过RNN 来学习梯度下降,并用梯度下降来优化RNN,这就是为何取名通过梯度下降来学习如何梯度下降学习的原因。这块有点拗口,英文为Learning to learn by gradient descent by gradient descent。下面重点介绍下论文中重点的部分。
2. 介绍
通常,机器学习问题可以描述成在特定的参数域中,最小化目标函数问题。目标是找到最优参数。虽然能够最小化目标函数的方法都能采用,但是标准的可微分函数通常采用梯度下降方法,得到下面序列更新公式:

这个原始的梯度下降算法,通常性能不佳,因为只利用了梯度信息,没有利用二阶信息。经典的优化技术通过利用曲率信息来修正梯度下降的步长,比如利用二阶偏导的海森矩阵信息,或者其他选择比如高斯-牛顿矩阵或鱼儿信息矩阵。
大部分现代优化方法都集中在针对特定问题设计更新策略,这样导致不同研究领域设计不同的方法。比如,深度学习领域主要针对高维、非凸问题进行设计,比如:momentum、Rprop、adagrad、RMSprop 和ADAM。在稀疏领域是诸如压缩感知等方法。在组合优化领域,通常采用松弛范数的方法。
工业优化器设计使得不同的领域设计不同优化方法,其中大部分利用了领域内特有的结构信息,而超出领域通常得不到较满意结果。优化中没有免费午餐理论表明,在组合优化领域,在期望上没有一种算法优于随机策略。这就说明通常专注于某一类问题解决方案是提升性能的唯一方法。
在这篇文章中我们将换种方式,采用自动学习更新策略代替手动设计更新策略。我们定义优化器为优化器参数,采用下面优化的更新方式:

这一过程可用下图表示,接下来我们将利用RNN来建模更新策略  ,因为RNN能保持自有的状态并且通过迭代函数来动态更新。
3. 学习利用循环神经网络学习
在这部分工作,我们将考虑如何直接参数化优化器。定义为最终优化参数,是优化器参数的函数,我们将主要研究这个函数。接下来有个问题:什么情况下一个优化器算是好的?假设函数的分布,期望损失可以写成下式:

如前所述,我们将更新神经网络m的参数化输出  ,这个状态可由  确定。接下来上式目标函数有最终的参数唯一确定。为了更方便训练优化器,在一定的区间  下,基于整个优化轨迹得到如下目标函数:

其中
在这里,为每个时刻的任意权重,同样记如下表示。当权重为1时,等价于期望损失目标函数,但后面将解释为何不同权重会产生更好的性能。
我们可以利用在参数上的梯度下降进行最小化期望损失函数。梯度估计可以通过抽样随机函数和对计算图应用后向传播计算得到。如下图所示。我们允许梯度可以沿图中实现传播,而丢掉沿虚线传播的梯度。忽略沿虚线传播的梯度等价于假设优化的梯度不依赖于优化器的参数,即。这个假设避免计算的二阶导数。
研究上式,我们发现只有当,梯度才不为0。加入我们设定  匹配原问题,则轨迹前缀的梯度为零,只有最后的优化步骤才能提供训练优化器的信息。这使得时间反向传播(BPTT)效率低下。我们通过在轨迹的中间点松弛目标函数  来解决这一问题。这松弛虽然改变了目标函数,但是允许我们在局部轨迹上训练优化器。为了简单起见,在所有试验中均设置  。
4. 逐个坐标的LSTM优化器
在我们的环境中应用RNN的一个挑战是,我们希望能够优化至少数万个参数。使用完全连接的RNN在这种规模上进行优化是不可行的,因为这将需要对巨大的隐藏状态和大量参数进行优化。为避免这种困难,我们将使用优化器m来对目标函数的参数进行逐坐标操作,类似于RMSprop和ADAM之类的更新规则。这种逐个坐标的网络体系结构使我们可以使用非常小的网络,该网络仅查看单个坐标即可定义优化器,并在优化器的不同参数之间共享优化器参数。
通过对每个目标函数参数使用单独的激活,可以在每个坐标上实现不同的操作。除此之外,允许我们为该优化器设计小型网络,此设置还具有使优化器对网络中参数顺序不变的良好效果,因为在每个坐标上都独立使用了相同的更新规则。
我们对每个坐标实施更新规则,使用两层的长期短期记忆网络,使用现在标准的遗忘门架构。网络将优化单个坐标的优化梯度、以前的隐藏状态作为输入,输出相应的优化器的更新参数。LSTM优化器如下图所示。
循环的作用使得LSTM可以和动量优化方法一样,学会利用综合以前梯度信息进行动态更新规则。这种思路在凸优化里面有很多优良的性质,实际上在很多最近机器学习程序中,比如ADAM,都采用了动量方法进行了自己的更新。
这里给一个优化二次函数实验结果,结论就是由于其他优化方法。
后面还有一些预处理和后处理的技巧,以及在更多实验部分就不详细介绍了,感兴趣的可以参考原论文。
5. 结束
介绍了论文《Learning to learn by gradient descent by gradient descent》,下一篇将介绍第一章节的最后一部分内容,小样本优化模型,即《optimization as a model for few-shot learning》。

03

0. 小样本优化模型
我们知道,在小样本学习领域针对更少的数据点学习,那么如何应用梯度下降呢?因为数据点很少,梯度下降方法性能急剧下降,因为梯度下降需要大量数据点才能达到收敛和最小化损失。因此,在小样本领域,我们需要一个更好的优化技术。
接下来按照论文《OPTIMIZATION AS A MODEL FOR FEW-SHOT LEARNING》思路进行。
1. 任务描述
我们首先对详细地介绍下元学习的数据集构成,后面就不在详细介绍了。
在典型的机器学习领域,我们通常将数据集分为两个部分,一部分称为训练集用来训练模型参数,另一部分称为测试集来进行评估模型的泛化性能。在元学习中,将设计元数据集包含了多个规则数据集,每个数据集都包含训练集和测试集。
在元学习中,我们有多个不同的元数据集合,每个都包含元训练、元验证和元测试数据集。我们利用元数据集来训练模型来达到在元测试集上取得高的性能。用元验证集来进行元学习器的超参选择,利用元测试集上评估其泛化性能。可以用下图表示:
2. 模型
2.1 模型描述
考虑单个数据集,即轮回。假学习一个神经网络分类器,标准的训练深度神经网络优化方法是梯度下降或其一些变种,更新公式是:

这个公式可以抽象成用LSTM更新:

当 满足, 时。因此,为了训练一个神经网络,我们通过训练一个元LSTM学习器来学习更新公式。在给出有关梯度的有价值的信息优化情况下,设置LSTM的单元状态为学习器的参数,候选状态。通过更新过程,我们参数化元学习器进而可以确定最优值。
  对应学习率,我们有如下更新公式:

由于学习率是当前参数,当前梯度, 当前损失函数和前一步骤的学习率  的函数。因此,元学习器可以精细的调整学习率,并且速度快避免发散。
对于,直观看为1不是最优的解。凭直觉,缩小学习器的参数并忘记其部分先前值的合理性是,如果学习者当前处于不良的局部最优状态,并且需要进行较大的更改以逃避。这将对应于损失高但梯度接近零的情况。因此,关于遗忘门的一个建议是使其成为该信息以及遗忘门的先前值的函数。

另外,请注意,我们还可以学习LSTM单元状态c0的初始值,它作为元学习器的参数。这就对应分类器的初始权重。通过学习此初始值,元学习器可以确定学习器的最佳初始权重,从而使训练从一个较优的起点开始,该起点可以使优化快速进行。最后,请注意,尽管元学习器的更新规则与LSTM的单元状态更新匹配,但元学习器也与GRU的隐状态更新具有相似之处,除了遗忘门和输入门不强制求和为1。
2.2 参数共享与预处理
因为我们希望元学习器对深度神经网络的数以万计的参数更新,为防止元学习器参数急剧增加,需要采用某种参数共享策略。这里我们采用学习器梯度的坐标点维度进行参数共享。这意味着每个坐标都有其自己的隐单元状态值,但所有坐标上的LSTM参数都相同。这使我们可以使用紧凑的LSTM模型,并且还具有一个不错的特性,即每个坐标使用相同的更新规则,但是在优化过程中,更新规则取决于每个坐标的各自历史信息。我们可以很容易实现参数共享,通过使输入为每个维度i的一批梯度坐标和损失输入
由于梯度的不同坐标和损失的幅度可能具有很大差别,因此我们需要谨慎地对值进行归一化,以使元学习者能够在训练期间正确使用它们。因此,我们发现在每个时间步骤中,应用以下预处理方法对梯度和损失的维度上有很好的效果。

;其他情况
这种预处理可调整梯度和损失的比例,同时还可分离有关其大小和符号的信息(后者对梯度最有用)。我们发现上述公式中p = 10的建议值在我们的实验中效果很好。
2.3 训练
具体算法:
计算流图:
  • 此处还介绍了梯度独立性假设和元学习器LSTM的初始化,感兴趣的读者可以阅读原文。
2.4 批归一化技术
批次规范化(Ioffe&Szegedy,2015)是最近提出的一种方法,可通过减少学习者隐藏层内的内部协变量偏移来稳定并因此加快对深度神经网络的学习。通过对各层的预激活进行归一化,减去均值并除以标准偏差来实现。在训练过程中,均值和标准差使用正在训练的当前批次进行估算,而在评估过程中,将使用在训练集上计算出的两个统计值的运行平均值。后面还介绍了一些细节东西,这就不一一赘述了。
3. 结束
本节介绍了书中的进一步阅读中的《OPTIMIZATION AS A MODEL FOR FEW-SHOT LEARNING》文章,更细节的东西可以直接阅读原文哈~。从下一节,我们将进一步回归元学习的书的部分,将介绍一种基于度量的元学习方法,即孪生网络及其在人脸和语音识别中的应用。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“综述专栏”历史文章


更多综述专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存