元学习:如何使模型快速适应新任务

前言

我们现在大部分模型都是通过训练样本学习好某一任务,即使是多任务学习也是使得模型最后学习好这几个多任务。

但是!!!今天要讨论的话题并不是说模型要学会任务,而是让模型学会去学习。这里是不是有点绕,我们举个例子来说:我们人类一生会学习很多东西,也就是很多任务,每当在学习很多新任务的时候我们也需要看一些书籍或者示范(其实对于模型来说就是训练样本),但是有的时候我们只需要看很少的示范就可以一举三学会,也就是常说的学习能力强,什么是学习能力强?学习能力强说的是当两个人面对同样一个新任务的时候,其中一个人可以在极短时间内搞定。

那现在我们来考虑一个问题:什么导致了学习能力强?一个刚出生的宝宝,如果给其一个新的任务比如整理一下xlsx表格,宝宝很难在短时间内学会,但是如果给成年人那就要轻松很多即使是之前没用过。导致这个结果的原因就是成年人其实比宝宝在社会上做了更多的事情,见了更多的事情,有了一定的经验和基本常识。

基于这个思路,MAML就提出了一个学习框架,使得我们的模型在面对一个新任务的时候学习能力更强~

论文链接:https://arxiv.org/pdf/1703.03400.pdf

代码链接:https://github.com/cbfinn/maml

方法

当然了关于MAML的优秀解读博客非常多了如下,大家也可以看,笔者这里尽可能的以一种更加通俗易懂的话语来模拟它的核心思想,并且后面会介绍一个具体的基于MAML思想设计的落地场景的paper

论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

模型无关的元学习用于快速适应深度网络

前面我们已经说过,它的核心思想非常简单,那就是如果模型先天已经学习过很多任务了,那就意味着它具备了一定的学习能力,那当一个新的任务来时,就可以快速学习。

好了,假设我们最终要学习的得到模型是F,我们希望他是一个有很强学习能力的模型,对于任何新的任务都可以快速适应。记住哦,这是我们的目标,再强调一遍:我们不是很关注F对某一个任务的效果(当然了也比较重要),我们的关注重点是其对任何新的任务都可以快速学习,目标上来看这是有本质区别的。

假设我们有N个旧任务,每个任务都有自己的训练集和测试集 我们期望模型通过在N个旧任务上学习后具备快速学习新任务的能力,那我们怎么做呢,先把模型复制N份即N个一摸一样的模型,然后各自学习N个任务(用各自的训练集去训练),这样我们就得到了N个模型F={f1, f2, ... fN}。

到这里大家应该是没啥疑问的对吧,说白了就是每个任务都是一个单独模型,只不过这些模型的参数和初始化权重都一摸一样。 然后重点来啦,我们再复制一份原始的F出来(注意哦,其实这里前前后后一共有N+1个模型)这里我们命名为 ,然后我们用某一个任务自己的测试集在自己优化的模型{f1, f2, ... fN}上过一遍也会得到新的loss,进而就可以得到优化的梯度,可以想到这里一共可以得到N个优化的梯度。

然后拿这些梯度相加去更新

好了,这就是一轮训练。大家可以停在这里想想这个流程。说的简单点就是各自任务用各自任务训练集去训练各种任务的模型,然后用各自的测试集去重新过一遍各自训练好的模型得到loss,进而得到各自需要更新的梯度,最后综合这些梯度去更新

其实 全程没有输入数据,计算loss更新自己,而是通过别人(N个上面的梯度)去更新自己的。

说到这里大家应该是比较明白了吧,下面我们来看看公式化的算法流程

alt

第三行就是我们上面说的N个任务,只不过在实践中,可能预选会有很多任务,我们每次抽取一部分任务来训练。

第四到七行就是我们说的各个任务在训练各种的模型,需要说明的是这里使用的数据集就是各个任务的训练集专业术语叫做support set 第八行就是我们上面说的用各自网络的loss梯度(注意这里各个模型的输入数据是各个任务的测试集,专业术语叫做query set)更新最终的网络 ,再说一遍, 本身并没有输入数据计算loss等等,它是直接用了别的(那N个任务的梯度)来更新自己的,理解透这一点对理解整个MAML极其重要!!!也是MAML的核心!!!

第八行是核心!!!

第八行是核心!!!

第八行是核心!!!

当一个新的任务来的时候就可以以 热启来快速适应了。

总结

大家看完上面MAML的思想不知道有没有想到最近几年一直霸榜的预训练模型,后者其实也是希望基于大模型热启,少量fintune开始适配新的任务,这两者大家觉得从思路来源上有什么相似和不同吗?哈哈,供大家自己开阔思路~

后续也会介绍一篇基于MAML思想设计的“考虑长短期兴趣和内外部信息的推荐”paper,感兴趣的小伙伴可以关注下~

关注

欢迎关注,下期再见啦~

知乎csdngithub微信公众号

本文由 mdnice 多平台发布

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值