查看原文
其他

ICLR 2017 | Highlight 1: Meta- and Few-shot Learning

小 S 程序媛的日常 2019-04-07

之前跳票到一半的 ICLR 2017 专题系列又续更了!刚刚参会回来的小S 经过多方学习,总结出了几个专题,也是个人认为现在 ICLR 等 learning 和 DL 相关会议与学者比较关注的方向。首当其中可能就是比较 fancy 但其实很本质的 meta-learningfew-shot learning。说是 fancy 是因为,他们的问题设定往往让人非常激动,比如仅用很少的数据就可以学出很有用的模型和参数(让我们摒弃大数据!)——说它们本质是因为,这些问题的核心思想其实往往是学习到一个 invariant/general representation,也就是通用的表达(这里也包括模型初始化参数等等)。而后者简直是每一个机器学习任务的梦想嘛!


今天想先和大家分享是 ICLR 2017 上和 meta-learning 还有 few-shot learning 直接相关的工作,下次再与大家分享拓展工作——invariant representation learning。

那么,meta-learning 和 few-shot learning 的动机是什么呢,其实很简单:

当我们没有足够多的标注数据来提供训练时,我们往往想从其他的无标注数据(无监督学习)、多模态数据(多模态学习)和多领域数据(领域迁移、迁移学习)里来获得更多帮助。在这种动机的驱动下,few-shot learning 便是希望针对一组小样本,得到一个能学习到很好的模型参数的算法。而如果我们能用端对端的方式学习到这种算法,那么就可以称为 meta-learning 或者 learning to learn(后者这个概念去年刷爆了……)。


1

《Optimization As a Model For Few-Shot Learning》 by Twitter. ICLR 2017 oral.

有了上面的概念背景,我们来看看这次的一些 meta-learning 相关的工作。这篇 Hugo 二作的文章是这次 ICLR 2017 的少数几篇 oral 之一。

这篇工作比较巧妙,把神经网络的更新规则和 LSTM 的更新规则联系在一起,使得一个 LSTM 变成了另一个大的神经网络的 meta-learner。并且,用这样的方法,学习到的 meta-learner 也可以为大的神经网络提供初始化权重,所以这个工作可以看做用 meta-learning 的方式同时学习优化规则和初始化权重(而以往的工作往往是只能学习二者之一)

有了这样巧妙的映射,这篇工作实际上就是利用了一个 meta LSTM 来学习或者说提供另一个神经网络的 parameter dynamics——一方面,这样就像为一个 large-batch 学习参数;另一方面,这样就可以学到大的神经网络的初始化参数 c_0。

而这篇工作的 slides 里也提到了跟他们相关的各种 learning to learn 的工作:


2

《Hypernetworks》 by Google Brain. ICLR 2017.

如果说上面的 related work 里提到的 Andrychowicz et al. 2016 的 learning to learn 的工作是学习如何优化一个神经网络,那么来自 Google Brain 的这篇《Hypernetworks》则是学习一个动态更新的循环神经网络。

虽然本质上,他们也是利用一个小网络去学习另一个大网络的权重,但是在学习过程中,Hypernetworks(HN)更侧重有结构的学习,也就是说,小网络的输入涵盖了一些具体大网络的结构信息,学习到的权重也会是大网络某个层的特定的:

于是乎,这些由小网络生成的权重也可以是动态的。作者曾经在自己的 blog 中给出过这种动态权重的可视化结果:

这个动态权重才是 HN 一个比较特殊的地方:

从上图的对比可以看出,HN 提供了一种新的权重共享方式,介于 CNN 和 RNN 之间,使得 HN 能在参数的个数和模型的效果和灵活性之间做出比较不错的平衡。


3

《Learning to Remember Rare Events》 by Google Brain. ICLR 2017.

这篇来自 Google Brain 的文章重点是提升 memory 在 RNN 等结构中的利用。乍一看可能觉得 memory 相关的工作和 meta-learning 关系不大,但其实也 memory-augmented 的工作可以认为是利用记忆模块增强后的网络学习新任务——那么记忆增强的网络相当于不断的进行新的适应和调整,也像一种 meta-learner。基于此,这种 memory-augmented 的工作更多地出现在 few-shot learning 的问题上。

这篇工作的作者们指出,人类通常可以在见到少数次数的新样本(rare events)后迅速学习并记住,比如在我们遇到一个不认识的新单词时。他们希望通过赋予现有模型这种记忆罕见事件的记忆模块,来让模型达到 life-long learning 的能力。概括来说,他们提出了 life-long memory module that enabels one-shot learning。

具体实现上,他们采用了 key-value pair 作为 memory module 的基本存储 unit(但同时赋予了一个 age value,也就是每一个 k-v 对存入/更新的时间)。key 是神经网络中某一个层的激活(在实验中他们多数使用最后一个输出层),value 就是对应的预测值(比如分类问题中对应的类别信息):

有了上述这种结构,就可以实现针对 memory module 的最近邻查询:

也就可以实现针对查询结果的损失计算和基于损失的记忆模块以及模型更新:

有了这样的结构和机制,作者进一步提出了几种将他们提出的 memory module 和 NN 结合在一起的设定:最简单的当然就是直接利用 memory module 查询返回到的 value 作为 prediction 值;但也可以将返回的 value 再次经过 dense layer 等像 embedding feature 一样嵌入。有了这样的两种大设定,他们提出了三种结合方式:(1)CNN with memory;(2)RNN with memory;(3)extended neural GPU with memory. 以第二种为例:

从实验结果上可以看出,增加了这样的记忆模块,也就是相当于实现了 one-shot learning 后,NMT 的结果有非常大的提升。


4

《Using Fast Weights to Attend to the Recent Past》

既然提到了 memory-augmented 的工作,就不得不提去年引起过广泛关注的并且被上面多篇工作都引用并在实验中比较的这篇 fast weights 的工作。概括来说,如果上面那篇文章是提出了一种新的记忆模块来实现 RNN 的记忆增强功能,那么这篇 fast weights 的工作则是利用 Hebbian learning 更新的方式将记忆增强与 RNN 结合在一起的。

在原始的 RNN 中,我们一般将 hidden states 称为一种“memory”,这种 memory 每个 timestep 都改变,像一种短时记忆。而后来引入的 LSTM,有了 gate 机制,可以实现 memory 的一些增量计算,也就因此有了更多的可能的 memory。这两种记忆,因为是每个 timestep 才(可能)改变一次,都被认为是比较缓慢的记忆,在这篇论文和以前的工作中被称为 slow weights。 

相对于 slow weights,这篇工作提出了在 RNN 上增加 fast weights 的想法。fast weights 旨在模拟或者刻画 RNN 中更加动态的信息,实现的方式就是 memory 的 dynamics,也就是关于 memory 的变化。如果我们把这种 RNN 中 hidden states 的变化进行离散化,也就是拆解成每个 timestep 的变化来进行观察——就可以利用 Fast Associative Memory 的模型得到一种差分形式的表达。 


而这个公式(1)就是 Hebbian learning updates,这里面的 A(t) 就是 fast weights 了。这篇论文并不是发表在 ICLR 2017 上面的,有兴趣的同学欢迎直接去读原文。


END

今天的 ICLR 2017 Highlight 1 就先到这里。下一篇 Highlight 2 会继续这个题目,也就是,meta-learning 和 few-shot learning 背后,最希望得到的是一种 invariant representation,关于这一点 ICLR 2017 上又有怎样的研究呢?


相关阅读:

ICLR 2017 | GAN Missing Modes 和 GAN

ICLR 2017 | Reinforcement Learning with Unsupervised Tasks



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

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