Meta学习的初衷十分令人着迷:不仅仅构建能够学习的机器, 更重要的是让它学会如何去学习。这也就意味着Meta学习得到的算法能够依据自己表现的反馈信号及时地调整其结构和参数空间, 进而能够在新环境中通过累计经验提升表现性能。 其实, 当未来学家用通用性的鲁棒人工智能编织我们对未来的憧憬时, 这些梦想的细节无不是上述思路的体现。
具体来说: 很多的强化学习算法需要多于人类学习时间的很多倍才能完成学习任务; 例如在Atari游戏中, 近期的算法需要花费约83小时(1800万帧)才能达到人类玩家的中等水平, 而这种水平人类仅需要玩几小时游戏就能达到。
我们可以发现:将这个问题牢记是一个必要的基础, 不是试图学习如何总结某个类的分布中存在的共享信息和模式, 而是试图学习存在于任务分布上的规律, 因为每一个任务都有自己的内部结构或目标。
如果需要给出一个Meta学习的从最具体到最抽象的过程排序, 那么应该是这样的:
一个能够通过带有超参的梯度下降法学习关于任务的完整分布的表示信息。 MAML以及Reptile就是两个典型的例子, 而共享层次结构的Meta学习则是一个更为复杂的方法: 它将学到的表示全部当作直接子策略并由一个主策略控制。
一个学习优化自己梯度下降参数的网络。 这些参数有: 学习速率, 惯性, 自适应学习算法的权值。 在这里, 我们将沿着用一种有限的, 参数化的修正算法的方向进行学习。这就如何用梯度下降的方法进行以梯度下降为基础的学习, 也就是本文的标题。
一个学习内部循环优化器的网络, 这个优化器本身就是一个网络。 也就是说, 梯度下降是用来更新神经优化器的网络参数, 使它们在各个任务上执行得很好, 但是在单个任务中输入数据到输出预测的映射完全由一个网络进行, 没有任何明确的损失或梯度计算。 这就是RL²和A Simple Neural Attentive Meta Learner 的工作原理。
一场关于“任务”的纠结
在此, 我们需要提到另一个问题。通常, 在讨论Meta学习时, 我们都会看到一种“任务分布”的概念。我们知道这是个并没有被详细定义的概念。 我们没有一个标准来判断什么情况下我们面对的是单任务的问题, 或者是多个任务的分布。 比如: 我们是不是应该认为ImageNet是一个物体识别的单任务问题? 又或者我们是否应该认为它是个多任务问题, 因为有时需要识别出狗有时却要识别出猫? 为什么Atari游戏就是个单任务问题而不是几个不同任务组成的单机游戏呢?
我能从这一切中提炼出的是:
“任务”这个词是需要跟被构造的数据集联合考虑的, 毕竟我们当学习的过程仅仅局限于一个数据集时我们便会很自然的认为这个学习是单任务的。
对于任一给定的任务分布来说, 任务之间的差异可真是大相径庭(例如: 学习正弦波的不同振幅和学习不同的Atari游戏就大不一样)。
因此我们不能仅仅说“这个方法可以在<这个样本的分布>上泛化”, 更应该去追求能在几个不同的分布上均有不错的表现。 从方法效用的角度上看, 这固然不错,但确实需要批判性思维来考虑网络真正需要表现出多大的灵活性才能在所有任务中表现出色。
在2017年初,Chelsea Finn等人提出了 MAML: Model Agnostic(不可知的) Meta Learning。在学习策略和学习先验之间的关系上, 这种方法倾向于后者。 该网络的目标是训练一个模型, 如果给定一个新任务的一步梯度更新, 那么它便可以很好地在该任务泛化。算法思路如下:
随机初始化网络的参数。
从任务分布中选取一些任务t, 从训练集中选k个 (约为10个) 样本进行一步梯度更新。
在测试集上评价更新后的网络。
对任务t的测试表现求初始化网络时的参数的梯度, 然后依据这些梯度更新网络参数然后用更新后的参数返回第一步。
Few-shot classification是监督学习领域中元学习的实例。
Few-shot learning 少量样本学习
information shared scheme 信息共享
we introduce function-level sharing scheme to extract the meta knowledge of semantic composition across the different tasks.