主要看点

这篇文章力求将我们从那些对AI空洞的幻想以及抽象的预测中带回到这片领域现在的真实情景中:在这里我们将分享这片领域的辉煌之处, 探讨其局限性,
并分析我们离鲁棒的多任务智能还有多远。




Meta学习的初衷十分令人着迷:不仅仅构建能够学习的机器,
更重要的是让它学会如何去学习。这也就意味着Meta学习得到的算法能够依据自己表现的反馈信号及时地调整其结构和参数空间,
进而能够在新环境中通过累计经验提升表现性能。 其实, 当未来学家用通用性的鲁棒人工智能编织我们对未来的憧憬时, 这些梦想的细节无不是上述思路的体现。

 

为什么人类可以表现出较高的智能行为?




具体来说: 很多的强化学习算法需要多于人类学习时间的很多倍才能完成学习任务; 例如在Atari游戏中, 近期的算法需要花费约83小时(1800万帧)
才能达到人类玩家的中等水平, 而这种水平人类仅需要玩几小时游戏就能达到。



这种差距就让很多机器学习学者将问题归纳为: 人类大脑在面对类似任务的时候究竟使用了哪些手段或者能力, 以及我们怎样才能用统计和信息论的方法对之建模?
具体来说, Meta学习有两种策略,分别对应于大脑能力的两种理论:




1. 学习到的先验知识: 从这个角度看, 人类之所以能够快速学习的原因是我们可以对过去学到的知识迅速重用, 就像是物体在空间中移动的直观物理,
或是在电子游戏中失去生命会导致低奖赏的元知识。

2. 学习策略: 这个想法是, 在我们的生活中 (也许是在进化的时间尺度上), 我们不仅收集了关于世界的物质级知识, 而且还创造了一种神经结构:
即使是在崭新的环境中, 它能更有效地接受输入, 并将其转化为输出或策略。




显然, 这两种想法并不互相排斥甚至两者之间没有一个明确的界限: 我们写的一些与环境交互的策略是以对环境的深层感知为基础的, 就像我们常说的
(至少是这篇文章中提到的算法体现的) 环境也是有结构的。尽管如此, 我依旧认为这两个想法是可以互相区分的, 可以将它们理解为一个轴的两个极点。

 

One Shot学习




在深入了解Meta学习之前,了解一些One Shot学习的概念性知识是很有必要的。如果Meta学习的问题是“我如何建立一个快速学习新任务的模型”,
那么One Shot学习的问题是:“我怎样才能建立一个模型, 在只看到某类的一个例子后, 就可以学习如何该类进行分类”。




下面我们在概念层次上思考为什么One Shot学习会这么难。如果我们想基于某一类训练一个不错的模型,
那么我们必然会面对过拟合的问题。如果一个模型只看到一幅图, 比如数字3, 它就不知道图像可以经历什么样的像素变化但仍然基本上保持3。 例如,
如果这个模型只显示了这个集合中的第一个3, 那么如何知道第二个3是相同类的一个例子呢? 我们在网络学习时所关心的类标签与字体的粗细在理论上有关系吗?
在我们看来这很简单, 但是只有一个3的例子对网络来说并不是一个容易的任务。



如果我们可以拿到多一点的3的样本, 那么这个问题解决起来就轻松多了, 因为我们可以学到3这个类别的主要特征——两处凸出的笔触, 大体呈垂直方向;
另外还能学到什么是与类别无关的——线条的粗细, 笔锋的角度。为了提升OneShot学习的性能, 我们必须促使网络能够学习那些能够区分不同数字的一般特征,
尤其是在无法得到每种数字的准确方差的条件下。




在OneShot学习中一项常见的技术就是学习一个嵌入的空间, 并在这个空间中计算两个样本的欧氏距离以确定其相似性进而判断二者是否属于同一个类别。直观地说,
这需要学习在这个分布中最能够区分这个类的内部维度 (在例子中:数字的分布), 并学习如何将输入压缩和转换到那些最相关的维度上去。




我们可以发现:将这个问题牢记是一个必要的基础, 不是试图学习如何总结某个类的分布中存在的共享信息和模式, 而是试图学习存在于任务分布上的规律,
因为每一个任务都有自己的内部结构或目标。




如果需要给出一个Meta学习的从最具体到最抽象的过程排序, 那么应该是这样的:

*
一个能够通过带有超参的梯度下降法学习关于任务的完整分布的表示信息。 MAML以及Reptile就是两个典型的例子,
而共享层次结构的Meta学习则是一个更为复杂的方法: 它将学到的表示全部当作直接子策略并由一个主策略控制。

*
 一个学习优化自己梯度下降参数的网络。 这些参数有: 学习速率, 惯性, 自适应学习算法的权值。 在这里, 我们将沿着用一种有限的,
参数化的修正算法的方向进行学习。这就如何用梯度下降的方法进行以梯度下降为基础的学习, 也就是本文的标题。

*
 一个学习内部循环优化器的网络, 这个优化器本身就是一个网络。 也就是说, 梯度下降是用来更新神经优化器的网络参数, 使它们在各个任务上执行得很好,
但是在单个任务中输入数据到输出预测的映射完全由一个网络进行, 没有任何明确的损失或梯度计算。 这就是RL²和A Simple Neural Attentive
Meta Learner 的工作原理。




为了使这篇文章详略得当, 我们主要集中在1和3, 并阐释两个关于人类智能的概念性问题。

 

一场关于“任务”的纠结




在此, 我们需要提到另一个问题。通常, 在讨论Meta学习时, 我们都会看到一种“任务分布”的概念。我们知道这是个并没有被详细定义的概念。 
我们没有一个标准来判断什么情况下我们面对的是单任务的问题, 或者是多个任务的分布。 比如: 我们是不是应该认为ImageNet是一个物体识别的单任务问题?
又或者我们是否应该认为它是个多任务问题, 因为有时需要识别出狗有时却要识别出猫? 为什么Atari游戏就是个单任务问题而不是几个不同任务组成的单机游戏呢?




我能从这一切中提炼出的是:

*
“任务”这个词是需要跟被构造的数据集联合考虑的, 毕竟我们当学习的过程仅仅局限于一个数据集时我们便会很自然的认为这个学习是单任务的。

*
 对于任一给定的任务分布来说, 任务之间的差异可真是大相径庭(例如: 学习正弦波的不同振幅和学习不同的Atari游戏就大不一样)。

*
因此我们不能仅仅说“这个方法可以在<这个样本的分布>上泛化”, 更应该去追求能在几个不同的分布上均有不错的表现。 从方法效用的角度上看,
这固然不错,但确实需要批判性思维来考虑网络真正需要表现出多大的灵活性才能在所有任务中表现出色。




那些以动物为名的无法言喻




在2017年初,Chelsea Finn等人提出了 MAML: ModelAgnostic Meta Learning。在学习策略和学习先验之间的关系上,
这种方法倾向于后者。 该网络的目标是训练一个模型, 如果给定一个新任务的一步梯度更新, 那么它便可以很好地在该任务泛化。算法思路如下:

*
 随机初始化网络的参数。

*
从任务分布中选取一些任务t, 从训练集中选k个 (约为10个) 样本进行一步梯度更新。

*
在测试集上评价更新后的网络。

*
对任务t的测试表现求初始化网络时的参数的梯度, 然后依据这些梯度更新网络参数然后用更新后的参数返回第一步。




从一个抽象的层次来说, 这个算法是在参数空间中找最接近一个好的泛化解的期望。 简单说: MAML会更激励找到附近地区多山谷的峰顶,
它们都包含合理的低于所有任务期望的损失。 正是这种激励, 有助于帮助MAML走出过拟合。




最新的一种叫做Reptile的文献是在2018年初问世的。 它从MAML处的借鉴问题的设定, 但是找到一个计算效率更高方法进行初始参数的更新循环。
MAML明确以测试集的损失相对初始参数求梯度, Reptile只是执行每个任务的SGD更新的几步, 然后用现在与初始的参数差异为“梯度”来更新初始权值。




这么做能work其实真有点奇怪, 因为这似乎与将所有混合在一起的任务作为一个任务进行训练没有什么不同。然而, 作者认为, 由于每个任务采取了多个SGD步骤,
因此每个任务的损失函数的二阶导都会受到影响。为此, 他们将更新分解为两部分:

*
 将结果推向“联合训练损失”, 例如训练一些列任务后的结果;

*
 将初始化推向后续SGD相似的位置, 因为小批次之间的梯度方差较小。 因此作者推断这个技巧会提高学习速率, 并使得每个任务维持在一个更稳定和低方差的训练区域。




选择MAML/Reptile 来讨论的原因在于, 从理论上说, 通过学习内部表示或者那些在参数空间相近的可泛化的表示可以使神经网络work起来。



为了说明这一点, 请看一下上图。 它将MAML与预训练的网络进行比较, 两者都在一系列由相位和振幅不同的正弦波组成的回归任务上做了训练。
红色曲线代表了两者经过调参后的结果。紫色三角形表示经过少量梯度更新的结果。 可见, 与预训练网络相比, MAML已经学到了正弦波具有周期性结构: 在k =
5时, 能够更快地将左侧峰值移动到正确的位置, 而实际上没有从该空间区域观察到数据。 虽然很难说我们的解释是否与现实情景完全匹配,
但我们可以推断MAML在计算正弦波彼此不同的两种相关方式 (相位和振幅) 以及如何从它给出的数据中学习表示这些方面做得更好。

 

将网络进行到底




对于一些人来说, 即使是有了使用梯度下降等算法来学习全局先验知识的思路, 也不免产生疑问: 谁能保证我们设计的学习算法是最有效的? 难道我们不能学得更好了吗?




这是RL²所采用的方法。该模型的基本结构是RNN。 由于RNN具有存储状态信息的能力, 并根据状态给出不同的输出, 所以理论上他们可以学习任意可计算的算法:
换句话说, 它们可能是图灵完备 (Turing complete) 的。以此为基础, RL²的作者构建了一个RNN,
使得它所训练的每个“序列”实际上是一系列具有给定MDP (马尔可夫决策过程) 的经验集,
为此可以只需将每个MDP视为定义了一组可能的行为和这些行为在环境中产生的潜在回报。 然后对RNN进行训练, 如同一般的RNN一样对许多序列进行训练,
在这种情况下对应于许多不同的MDP, 并且对RNN的参数进行优化以得到所有序列总体产生较低的regret。 Regret是一个指标, 对应训练中的总奖赏,
因此除了鼓励网络在训练结束时产生一个好的策略之外, 它还可以激励更快的学习, 以便减少由一个不好的策略指导的行为探索。



在试验中的每一步, 网络采取的行动都是由多个任务学习的权重矩阵和隐藏状态的内容而参数化的函数。而隐藏状态的内容根据数据进行更新, 还可以作为一种的动态参数集。
因此, RNN会学习如何更新其隐藏状态的权重, 以及控制如何利用它的权重以完成多个任务。 然后, 在一个给定的任务中,
隐藏状态可以捕获有关网络是如何确定的信息, 无论是探索利用等的时间, 都是它在特定任务上看到的数据的函数。 从这个意义上说,
RNN可以学习一种如何确定最佳地探索空间并更新其最佳策略的算法,并使其在任务分布上表现良好。作者比较了RL²和能够达到某些任务上接近最优的算法,
RL²并不逊色。

 

我们能总结出什么?




这只是一个非常浓缩的领域介绍, 我相信有一些遗漏或者理解不到位的地方。如果您想更深入了解这个领域, 那么您可以阅读这个文章。




在整理这篇文章之后, 我还有一些问题想跟大家一起探讨: 这些方法如何扩展到更高多样性任务中? 大多数文献都是在较低多样性任务的分布上进行验证测试:
不同参数的正弦曲线, 不同参数的bandit实验等。其实, 在这些任务分布上做得很好, 并不能保证在不同复杂程度的任务, 以及不同的模式上能够很好的泛化; 




这些算法对高强度的计算需求到底有多少? 近期很多工作都在较小且较简单的数据集上训练的原因也包括: 当需要在内部循环中更新模型参数时,
在测试过程将昂贵的计算开销。 鉴于近期摩尔定律似乎正在放缓,如若每个内部循环在较复杂的问题上进行迭代可能需要数百小时的GPU时间,
我们将如何研究这些算法并使其真正发挥作用?




这些方法如何与直接想办法将先验知识写成代码相比较? 在人类的宝库中一个非常有价值的工具就是语言。在机器学习方面,
这就变成了一种高度压缩的嵌入在我们知道如何在概念上变换使用的空间中的信息,
我们可以将它在人与人之间进行转换。没有人能够自己从经验中提炼出所有这些知识,所以我怀疑我们是否真的会解决可以整合有关世界的知识的模型问题,除非我们知道如何去做一些类似于学习算法的事情。






如果对本文有自己的见解,欢迎在评论区留言,   或者扫码关注公众号交流。





此为贪心科技编译,转载请联系本公众号获得授权。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信