20

谈谈实现小样本学习的两条路径

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzA3MzQwNzI3OA%3D%3D&%3Bmid=2651386375&%3Bidx=1&%3Bsn=5aae7590a119bfa9fccfdea1d084d1ad
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

小样本学习是当下机器学习界的一个核心课题。大数据是当下深度学习的咽喉,面临收集成本昂贵,甚至根本无法采集的弊端, 小样本学习的实践价值不言而喻。对于众多产业来说, 真正能够收集到大量样本的是极少数情况,比如人脸识别,互联网上的文本等。而更广大的行业, 数据本身收集就很难,一些隐私伦理等障碍难以跨越,比收集数据更难的还有标注,大数据支撑的机器学习基本使用无望。

所谓小样本学习,就是使用远小于深度学习所需要的数据样本量, 达到接近甚至超越大数据深度学习的效果,也即是小样本学习的本质就是学习的效果与数据比值的提升, 或者说单位数据产生的模型收益增大了 。

与之高度相关的课题其实是迁移学习, 元学习, 提高模型泛化性能, 这些方法, 本质是在不对数据使用量进行限定的情况下, 如何让同一模型用到更广泛的数据分布和更多的任务, 因此它们是一颗硬币的两面。多一分泛化能力,就少一点数据成本。

那么, 小样本学习究竟有没有可能?这个问题其实是细思恐极。因为这个命题就像永动机一样, 似乎违反了能量守恒。不应该是有多少数据, 有多少模型效果吗?这里事实上一被忽略的盲点是先验知识, 二被忽略的是盲点是数据利用效率。

如果没有任何先验知识, 当然是有多少数据有多少模型。然而, 如果先验知识是充足的, 那么其实可以数据不足, 知识来凑。另一条路则是提高单位数据的使用效率, 如果每个数据对模型的改进都是有效的,远离随机游走。

也就是说, 实现小样本学习的方法, 主要是 1, 如何让给定模型具备相关任务的先验知识, 2, 如何让每个数据产生的学习效果更加一步到位。

关于1, 其实这也是人类可以小样本学习的关键,所以我们就从人的认知力说,首先谈谈概念的学习和使用

有关1的方法, 事实上很多, 我觉得如果让对它们进行分类,就要对先验知识的理解和表示进行分层。

比先验知识更好的一个词是世界模型, 因为世界模型蕴含了不同层次的知识, 而且知识和知识不是孤立的, 而是存在因果联系的一个网络,也就是它对应一个被理解的世界,而不是死记硬背的词条。

这个世界模型里的知识是有层次的。站在最底层的是一些特别基本的先验,而高层的对应更加具体的知识。 

对于比较根本的先验, 通常对应真实物理世界的常识,有一些常识熟悉到我们已经忽略到了它们的存在。比如时间,空间,运动,因果本身。这些先验往往对应我们在婴儿期就掌握的一种从进化,发育,和早期探索得来的知识,通常被称为intuitive physics。

这些先验一旦被利用,将大大减少需要的样本数。比如卷积就是抓住了空间平移这一类先验。虽然卷积的学习速度依然是缓慢的,但是相比一个全连接网络已经好太多。

另一类先验更为具体, 对应长期记忆中的基本概念的细胞,比如不同的颜色,老人儿童动物植物的区分, 这些是组成事物最根本的概念,比比刚说的intuitive physics 要具体, 但是相当于特定领域的知识,它们依然是非常基本的。

这些先验的掌握, 会在特定的问题上大大减少需要的数据量。其中一类非常重要的概念, 是关于关系的假定, 比如加减法, 位置的相对关系, 关于概念比较等,有了这些关系, 基本概念可以组合成复杂概念, 这样对于新的复杂概念的学习可能仅仅需要几个样本。

关于关系的常识里对时间预测特别重要的是因果关系, 和刚刚说的因果概念本身, 这里指的是各个领域里更为具体的因果常识,比如水往地处流, 有了这些关系先验, 对未发生的事情的预测需要的数据样本将大大减少,就好比掌握了基本物理定律的人很容易预测各类运动。

然后我们来看看基本能力

人的复杂能力无疑是由各种基本能力组成的, 比如我们经常做的那些智商测试事实上是在测试我们的基本能力, 如记忆能力, 想像力, 推理能力。有的人具有很好的视觉工作记忆,看过一个东西过目不忘, 也有的人对数字敏感这是基本能力的不同。这些基本能力对应我们不同的脑区的一种素质, 这些脑区的组合成就了具有综合能力的人,使我们学习新的任务非常迅速。

从这两个角度看,小数据学习这件事压根不存的,是构建在“进化” 这个低效的大数据学习基础上筛选出来的各种基本概念或能力上的。但是,一旦有了这些先验和概念,我们的大脑就可以根据基本概念和关系,构成新的概念, 新的概念和旧的概念连成网络,预测感官世界的改变,最终构成世界模型的本体, 也构成人脑很快可以根据一两个数据来学习的基础。

一句话说,就是人的学习建立在人脑的模型之树上, 里面的知识有的是我们意识到的, 有的我们甚至意识不到。我们没有哪一个学习是孤立的从零开始的训练。

我们再来看机器学习,当下机器学习所使用的知识还极少真正用到了人类世界模型的本体, 而是跟多的是领域依赖的零碎的先验。它们的存储形式也可以根据不同的方法分为知识图谱那种显式的符号化的知识, 和隐藏在网络权重里分布式存储的隐式知识, 甚至也有存储在贝叶斯条件概率中的统计知识。这些知识的获取方法, 已经构成了小样本学习的基础, 我们就来看看其中的一些范式:

通过构建先验的范式

1, 基于预训练的范式

Transfer learning 已经基础成为图像处理领域的范式,这一类模型往往基于一个大规模的公共数据集训练一个基础网络(backbone), 在未来的需要迁移的数据集在finetune一个classifier。经过ImageNet预训练的ResNet 50 可以作为各类视觉任务的基础网络(backbone)也是广为人知, 只要所学习的数据离ImageNet包含的类型不是那么远这个方法都有保证。

事实上这就是小样本学习的最基本方法。更为突出的则是自然语言处理领域的Bert和GPT-3, 它们不仅使用了所有可以找到了所有可能的网络文本作为预训练的素材,而且其网络参数的巨大和框架的表达力使得它们成为所有下游自然语言处理任务的超级基础,此基础上, 模型在很多类任务上实现了zero-shot or one-shot 学习。

Transfer learning是否可以减少训练数据本质取决于:

1, 训练backbone的大数据集和最终需要小数据学习的特定数据集的差距。

2, backbone 到底掌握了多少解决不同领域问题的基础知识。 

在无法量化1和2的时候,这个效果就有点炼金术的感觉。值得一提的是,当下的因果推断给出了对这一问题定量的一定依据。因为backbone里掌握的知识如果越接近下游任务的因, 则transfer Learning的效果会更好。

当下开始慢慢进入主流的一个迁移学习范式,是所谓的自监督学习,被lecun这类大牛认定为深度学习的救赎。这类学习范式通常免除了数据收集的魔咒就是标注。比如我们的摄像头每天无时无刻的看着这个世界的变化,它没有标注。

我们的网络无时无刻的记录着没啥意义的网络文本和图片, 这些数据被收集下来, 却无法被利用。 自监督的方法就打开了一扇大门把这些数据里隐含的结构性信息给挖掘出来。 这个学习的通常范式是把这些原始数据的一部分遮盖住, 让机器猜测被遮盖的部分, 或者把数据分段,用过去一段的数据预测下一段的数据,机器猜测和预测的过程就会学习到一个生成模型, 学到视频或自然语言背后的结构性信息。 

另一类崛起的范式是contrasive learning,对比性学习,比如在一个图片里抠出一小块,放到一大堆图片里让机器发掘是哪个图片里出来的, 这本质有点像聚类, 让机器充分的去比较相同或比较不同,最终发现图片里的结构信息。这两种范式都可以在认知科学里找到一定对应,尤其是第一种, 和生物的预测性编码息息相关,有兴趣的同学可以关注贝叶斯大脑。

经过这一类预训练的模型通常在后续任务里样本需求大大下降。

bMBB73b.jpg!mobile

Neural scene representation and rendering(不停预测下一帧图片的自监督学习)

https://science.sciencemag.org/content/360/6394/1204.abstract

2, 基于元学习的范式

基于元学习的范式则更加精准的靶向few shots learning的问题。元学习指的是通过学习一系列任务集,而不是一个个数据,来掌握一个基本模型, 可以在新的任务来到时候, 用最小的数据完成训练过程。 

这个概念有时候和transfer learning很容易混淆,但是又不同。因为在meta - learninig 里, 往往训练是按照一个个episode 进行, 模型试图学习的是不仅仅是通用的特征,而是可以迅速在少量数据提取模型的方法本身, 这点有点像是一个训练模型的模型,或者学习如何学习。

关于元学习的范式,本质上和刚刚讨论的人可以小样本学习的认知基础是相通的, 有的是学习一个不同类事物背后可以共同被使用的表征或测度, 然后新来的训练集和测试集只需要在这个测度里做一个距离度量就可以实现分类或预测。有的则是学习一个能够生成模型的网络。

比如通过一个较大的记忆网络生成针对每个子任务的网络权重,这就好比掌握一定基本能力的人在新任务面前迅速生成新的能力。对于元强化学习, LSTM本身在多个任务集上学到的动力学针对每个具体任务相当于实现一个新的算法,可以通过在新的环境里自适应得到新的模型。另外一大类方法是学习不同的子任务背后一个比较好的优化起点,如MAML等。所有的元学习都可以大大减少在子任务需要的数据样本,本质上与人类通过先验结构或世界模型减少数据样本的能力是想通的。

QjIR3uE.png!mobile

基于Metric的元学习范式

Yfiieqv.jpg!mobile

学到生成模型的模型的元学习范式

nuQ7fqF.jpg!mobile

基于优 化的元学 习范式

3, 模块化系统

模块化的系统,可以通过模块的复用或组合迅速的实现小样本学习。我本人在ICLR2020的网络, 通过先预训练不同认知功能的模块(比如认知地图,或者事件记忆),实现了在新环境里快速学习导航任务的泛化能力。 基础模块的学习本身其实可以看做是一个元学习的方法,因此可以看做是2的一种特殊情况。

许铁的文章

IMPLEMENTING INDUCTIVE BIAS FOR DIFFERENT NAVIGATION TASKS THROUGH DIVERSE RNN ATTRRACTORS , ICLR 2020

训练Agent 智能体通过其RNN动力学掌握对不同环境侧面的认知能力, 包括对空间位置和事件的认知和记忆能力, 从而导致Agent在各种不同导航任务中的不同性能, 最终组合这些网络模块,使得agent可以用少量样本在新环境达到极高性能。

Inmaqm7.jpg!mobile

多任务设置

ZVviymN.jpg!mobile

从预训练的不同网络中筛选出来组合

4, 记忆系统

深度强化学习是一个需要特别大数据样本的学习范式。本质上, 我们需要在大量经验的基础上获得Q value。相比之下, 人类可以一招被蛇咬,十年怕井绳,说明只需要被蛇咬一次,就可以学到对同类事物的价值泛化(绳子 近似 蛇 等于 危险)。 这种能力的获得是因为人具备情景记忆的能力。大量的经历被抽取到海马中, 使得人能够从相似的经历中抽象出一些共同的模型,在新的事件出现的时候, 通过做比较的方法, 来得到一个Q函数, 从而快速的学习,所谓以史为镜,可以明得失。

例如:Continual and Multi-task Reinforcement Learning With Shared Episodic Memory , 通过提高数据利用效率的范式

5 改善优化方法

事实上另一种小样本学习的方法是如何提高每个样本的使用效率。这就不得不提提当下深度学习速度慢的一大根源,就是随机梯度下降法, 随机梯度下降, 本质上是利用梯度函数, 在非凸的复杂曲面上摸索寻找最优参数。一个小批量数据进来, 对整个目标的优化是非常有限的。

但是在传统机器学习里, 有很多学习方法可以更充分的利用每个数据, 比如recursive least square这样的直接求最优解的方法,或者SVM这种通过对偶空间得到的优化方法。甚至生物学习的基本方法Hebbian learning ,也有比深度学习当下的随机梯度下降法更高的数据利用率。

在hebbian learning中,不同刺激引起的神经元先后放电会加强两者的联系,从而可以直接把两个不同的信号联系起来。因此, 如何改善学习方法也是实现小样本学习的重要途径。

在优化方面,一个小数据学习的致命杀手是灾难性遗忘, 也就是当模型需要连续的学习一些改变, 比如先识别1,2,3 ,再识别4,5,6, 学过1,2,3的网络往往很快就忘记了4,5,6,这无疑降低了数据利用率。 有一些优化的方法可以有效的缓解这一问题 ,其中有些还用到了脑启发的算法。比如最近余山老师的文章。

UVRvqyQ.jpg!mobile

论文提出了正交权重修改 (orthogonal weights modification,OWM) 算法和情境依赖处理 (context-dependent processing,CDP) 模块,使得灾难遗忘问题得到有效缓解,从而提高了数据的利用效率

减少模型的参数量

训练过深度模型的同学都知道, 通常情况下,模型的参数越多,收敛速度就越慢。因此, 如果模型在达到类似效果的同时有效减少模型的参数数量, 会对小样本学习起到非常大的助力。

这其中的一类非常典型的代表就是用一个随机的网络直接提取特征, 而不去训练内在的权重, 然后只训练一个读出层得到需要的输出。由于 读出层的参数数量往往比整个网络小很多, 从而减少需要的模型参数数量。比较典型的如训练RNN用到的蓄水池训练。

uQJNVfz.jpg!mobile

蓄水池训练有效利用了神经网络内在的动力学

事实上 , 对所有网络权重进行一个简单的梯度下降正好显现了我们对神经网络数学本质的无知。比如一些研究显示, 如果需要控制一个RNN网络的功能, 其实真正需要改变的权重数量是很少的。这些研究来自对梯度下降的RNN进行理论研究的团队。虽然整个RNN 的隐层网络的参数等于神经元的数量的平方,但是并不是改变所有这些参数都有意义。

生物大脑的网络连接synapse每时每刻都在进行着微小的随机扰动, 但是我们的日常认知功能却从来都十分稳定,这说明决定一个网络功能的可能不是网络权重大小的具体值。一个被称为low rank pertubation的理论指出, 控制这样一个巨大的神经元数量平方级参量的网络,只需要控制一组和神经元数量成线性的向量即可, 这组向量叠加在整个随机网络之上,就可以让网络表现出各种不同的认知功能。

Linking Connectivity, Dynamics, and Computations in Low-Rank Recurrent Neural Networks

这些工作指出的一种可能性,是我们当下的学习训练方法类似于前牛顿时代的工匠雕砌, 虽然也可以做的出罗马的大斗兽场,是一种效率低的多的方法 。 如果发现了真正的牛顿力学,这一切都是轻而易举的。

更多阅读

谈谈元学习的技术实现框架

非线性动力学特辑 - 低维到高维的联通者

贝叶斯大脑

论文速递:通过模拟大脑-解决深度学习中的灾难性遗忘


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK