知行编程网知行编程网  2022-04-07 12:00 知行编程网 隐藏边栏 |   抢沙发  295 
文章评分 0 次,平均分 0.0

求问meta-learning和few-shot learning的关系是什么?

编辑:忆臻

https://www.zhihu.com/question/291656490

本文仅作为学术分享,如果侵权,会删文处理

机器学习算法与自然语言处理报道


  求问meta-learning和few-shot learning的关系是什么?


作者:hazekiah
https://www.zhihu.com/question/291656490/answer/699385301

谢邀

之前老板有提到过一次,尝试回答一下。

我们倾向于把few-shot learning理解成这样一个问题--如何训练一个模型使其基于少量的训练样本能在目标任务中获得好的性能。

显然,仅使用少量样本训练模型必然导致过拟合。因此,必须引入一些先验或者外部知识来提高模型泛化性能。而这在few-shot的问题设定里是没有进行假设的。

meta-learning虽然目的是learning to learn,但是其问题设定和few-shot的设定在我们看来是一种父类和子类的关系--他们都要求在新任务上只使用少量样本快速适应(fast adapt),而meta-learning假设更充分。


meta learning假设: 1) 存在一个任务分布,2) 你的目标新任务也服从该分布,3) 可以获得一个(从任务分布)iid采样的元训练集用来训练你的模型,4) 以及一个iid采样(且与元训练集互斥)的元测试集来估计你的模型应用于目标任务的期望性能。

因此,在问题设定上,我们倾向于把meta-learning视为few-shot的一个典型框架,它假设外部知识是以元训练集和元测试集的形式引入的,在训练过程中使得模型以某种方式捕捉到任务的共享的结构(somehow capture task structure),从而使得目标新任务基于少样本上得到的最终模型仍然具备泛化能力。


我个人觉得,few-shot和meta learning不能说存在包含关系,因为他们目的不同,前者是只允许少样本,后者是multitask下能学出某种task meta knowledge。但是因为问题设定都要求了少样本训练所得的性能,这才产生了联系。


而为什么总是看到few-shot在用meta-learning的setting呢?因为确实巧妇难为无米之炊,新任务如果真的只有一两个样本可以训练,这个问题几乎无解。而meta-learning则提供了合理的假设: 虽然我没有目标任务上的大量训练样本,但是我有大量相似任务的少量训练样本作为代偿



作者:纳米酱
https://www.zhihu.com/question/291656490/answer/709940841


我觉得,关系是,思路有共同点。


简单来说,两者共同思路或多或少包含一个重过程和一个轻过程,重过程一般是做表征和记忆,模型通常比较复杂,其需要单独数据频繁训练,轻过程用于快速执行特定任务,其一般也需要单独数据流(一般是support集)去反映新样本和重过程记住的样本的某种差异,并给根据这个差异,反馈修正信号给重过程。放到 meta learning里头,就是如何靠轻过程自动设计loss,或者梯度,就是learning to learn。放到few shot 里头,这种思路,类似transfer learning中类似domain adaption之类的。


基本上很多fancy套路,就是设计两个分支来回怼,看最终优化平衡点是不是落到你要的地方。

我这么说,学术界可别喷我呀!

作者:胡小黑
https://www.zhihu.com/question/291656490/answer/710239307

不邀自来。个人对meta-learning的了解不多,相关的论文并没有深读下去。但对针对few-shot learning还是做了一些研究的。


感觉上 few-shot learning 主要是一个应用场景,一个普遍的问题。meta-learning是一种学习策略,一种框架。


针对 few-shot 的场景,meta-learning是一种有效的方式。但近几年一些domain adaptation的方法也可以解决某些 few-shot的问题。如果假设更严格一些,假定支撑集与few-shot的数据之间同分布,那么也可以用半监督学习的方法解决。甚至在工程上,良好的特征工程也是解决 few-shot 最简单直接的方式。


总之 few-shot带来的问题是,少量的信息并不足以估计P(x, y), 也难以用其以训练好一个复杂的,表征能力良好的模型去估计x--->y的映射。个人理解,针对这个问题的思路主要有一下几个方面。


1 让训练数据更鲁棒,少量样本可以支撑一个足够简单的模型被训练好。特征工程就是干这个的。


2 让数据更多。数据增强方法 (这个在大多数问题上都不太行,除非结合物理模型,否则纯粹用数据驱动的增强算法都难以产生新信息。增强/增多后的数据分布 P_aug(x, y),和few-shot下的P_erm(x, y)没啥区别,自然也学不出啥好模型)


3 有同分布的数据集支撑。半监督学习。比如有大量无标签数据,和few-shot中数据都采样自同一边缘分布P(x)


4 有不同分布,甚至不同特征空间的数据集作迁移支撑(任务相似)。domain adaptation。


5 有多个不同任务作为迁移支撑。(读书少,不概括就举例。。) 如网络参数(卷积层)迁移,如教师-学生模型,meta-learning等


作者:匿名用户
https://www.zhihu.com/question/291656490/answer/729120606

深度网络的目标是学习构造数据变换空间的一个变换T来完成特定的任务,深度网络就是构造这个目标变换T的一个近似连续的变换过程,所以深度网络就是数据变换空间一条曲线T(t)。所以,深度学习过程可以理解为通过给定数据,确定目标变换并且找到达到目标变换的曲线(深度网络的配置)。


下面好办了, few-shot learning,本质就是要弄插值,基本是通过类似预训练啦或者是其他相近任务,将这些信息迁移到新任务上,所以这就是一个从已知的一族相近的曲线(有不同的终点但是大家相似),以及少量的 few-shot 数据来估计目标变换以及实现目标变换的网络。实现这个任务,大概一种方法是直接nonparametric的基于已知点的插值,一种是parametric的插值。当然这个插值方法肯定有多种方案,要么对多个曲线直接插值,要么先求一个平均曲线,然后针对数据进行调整,都可以。但是这里好像不会对这些曲线的形式进行建模。而这一点恰恰是meta learning想做的。


如果是meta learning,理想情况应该是给定一组任务,他们可能来自一个分布,我们需要的目标是如何能更好的找到每个任务对应的目标变换。直观的说,就是找到到达每个任务目标点的最优曲线T(t)。如果以MAML为例,这其实就是在学习整个流形上的最优曲线方程的表达式(比如一个黎曼流形上的测地线方程),或者是距离度量( 如果采用nonparametric的方式)。这样,对于新任务,直接根据数据估计目标变换并直接给出相应的最优化曲线,所以meta learning学到了最优曲线的参数化的一般表达形式。


所以,个人理解,二者的主要差异,meta learning 更加偏重学习整个流形(的一个子集,因为我们实际任务的变化范围总是有限的)上的几何特征(度量或者测地线),few shot learning 可以同样被这种方案来解决,是meta learning的一个子集。但是few shot learnging不一定需要学习这种整体信息,单纯的就看几个已知点和其对应曲线的位置形状和相互间的距离,也可以完成任务。感觉上,meta learning其实是面向任务,few shot还是更多面向数据。当然数据不同,任务也算不同,但是few shot中从任务的角度来说,基本没有变化。


小小的吐个槽,真没必要弄的那么麻烦,图像处理中的longitudinal image analysis,比如儿童大脑发育啦, 古人类演化啦,这里什么few shot,meta learning这些问题,其实以前都有,而且人家直接画图,直观又清楚,完全可以借鉴一下。可以看看Durrleman的博士论文,里面有很多很好的思想,完全可以用于理解深度学习系统。‘Statistical models of currents for measuring the variability of anatomical curves, surfaces and their evolution‘,


—完—

为您推荐

如何学习SVM(支持向量机)以及改进实现SVM算法程序?
纯国产大佬周志华,如何扛起了智能学界大旗
Nature发文:避开机器学习三大「坑」
如何利用Python开发人工智能入门项目
【微软】AI-神经网络基本原理简明教程

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享