模型不可知元学习(Model-Agnostic Meta-Learning, MAML)的目标是使模型每次的梯度更新更有效、提升模型的学习效率、泛化能力等,它可以被看做一种对模型进行预训练的方法,适用于小样本学习。

  原文:http://proceedings.mlr.press/v70/finn17a/finn17a.pdf

  其它理解可以看:https://zhuanlan.zhihu.com/p/57864886

主旨

  论文的主旨主要就概括为以下损失函数(元目标)。其中$f_\theta$表示某个参数为$\theta$的模型;$p(\mathcal{T})$表示适用于模型$f_\theta$的各种任务的分布,它的一个抽样$\mathcal{T}_i$就表示模型的某个任务,任务包含数据集和损失函数;模型在任务$\mathcal{T}_i$上进行一次训练后所得到的模型为$f_{\theta_i'}$ 。

$\min\limits_\theta\sum\limits_{\mathcal{T}_i\sim p(\mathcal{T})}\mathcal{L}_{\mathcal{T}_i}(f_{\theta_i'})=\sum\limits_{\mathcal{T}_i\sim p(\mathcal{T})}\mathcal{L}_{\mathcal{T}_i}(f_{\theta-\alpha\nabla_\theta\mathcal{L}_{\mathcal{T}_i}(f_{\theta})})$

  以上目标表示,优化模型参数$\theta$,使得模型在某个任务上进行一次梯度更新之后,在这个任务上的表现就要好。惩罚的是模型对数据参数的不敏感性:我不要通过多次训练才能达到比较好的效果,我只要一次训练,就达到!

  当然,其中的一次梯度更新也可以修改为多次更新。解释就是:让模型能在某个任务的数次梯度更新内,达到好的效果。当然,由于这个目标的元更新需要计算二阶梯度,每次元更新所需的显存会因前面梯度更新次数增加而过大。感觉一次就够了,多次没有意义。

思考

  根据以上目标,我们可以在此基础上思考各种用法的可能性。

  1、小样本学习,文中介绍的就是这个。目标函数就是上面的式子,梯度更新和元更新阶段用的同一个任务数据集的不同数据抽样。具体做法看算法2。

  2、任务分布$p(\mathcal{T})$中的任务类型不一定是要接近的。比如有的模型的通过替换输出层,既可以适应分类任务,又可以适用于缺陷检测任务。那么同时用这些任务进行MAML训练,能让模型对多种类型任务的适用性更强。也就是通过MAML的参数初始化,模型能同时在多类任务上实现快速学习。

  3、前后梯度更新与元更新用不同的任务类型,前一次用数据充足的,后一次用数据不充足的。比如让模型经过一次的缺陷检测任务训练,能解决分类任务问题。暂时还没想到什么好的应用。

$\min_\theta\sum\limits_{\mathcal{T}_i\sim p_1(\mathcal{T}),\mathcal{T}_j\sim p_2(\mathcal{T})}\mathcal{L}_{\mathcal{T}_j}(f_{\theta_i'})=\sum\limits_{\mathcal{T}_i\sim p_1(\mathcal{T}),\mathcal{T}_j\sim p_2(\mathcal{T})}\mathcal{L}_{\mathcal{T}_j}(f_{\theta-\alpha\nabla_\theta\mathcal{L}_{\mathcal{T}_i}(f_{\theta})})$

实验部分

优势

  图2展示了MAML相较于预训练的优势:

  1、左边2张图可以看出,用MAML在类似的正弦函数上进行元训练后,在未见过的正弦函数上,用5个抽样进行一次梯度更新就能回归出比较好的结果,而用10个抽样则几乎拟合出了整个曲线。而且可以看出梯度更新的次数对结果影响很小,说明一次更新就能得到比较理想的结果。

  2、右边2张图看出,用普通预训练模型微调,在小样本数据上作用很小。

二阶梯度的省略

  文章做了实验忽略元更新中的二阶导数(Hessian矩阵),仅保留元更新中的一阶部分。发现性能几乎没有损失,表明MAML的大部分改进来自更新后参数值处目标的梯度,而不是二阶梯度。过去的工作已经观察到ReLU神经网络的局部几乎线性的(ReLU的二阶导数为0),也就是大多数情况下二阶导数接近于零,部分解释了一阶近似的良好性能。这种近似使模型训练加速33%。

Model-Agnostic Meta-Learning (MAML) 理解的更多相关文章

  1. 深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning)

    深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning) 2018-08-09 12:21:33 The video tutorial can ...

  2. [转载]Meta Learning单排小教学

    原文链接:Meta Learning单排小教学 虽然Meta Learning现在已经非常火了,但是还有很多小伙伴对于Meta Learning不是特别理解.考虑到我的这个AI游乐场将充斥着Meta ...

  3. The Rise of Meta Learning

    The Rise of Meta Learning 2019-10-18 06:48:37 This blog is from: https://towardsdatascience.com/the- ...

  4. 论文笔记:Visual Question Answering as a Meta Learning Task

    Visual Question Answering as a Meta Learning Task ECCV 2018 2018-09-13 19:58:08 Paper: http://openac ...

  5. (转)Paper list of Meta Learning/ Learning to Learn/ One Shot Learning/ Lifelong Learning

    Meta Learning/ Learning to Learn/ One Shot Learning/ Lifelong Learning 2018-08-03 19:16:56 本文转自:http ...

  6. 什么是 Meta Learning / Learning to Learn ?

    Learning to Learn Chelsea Finn    Jul 18, 2017 A key aspect of intelligence is versatility – the cap ...

  7. 【MetaPruning】2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning-论文阅读

    MetaPruning 2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning Zechun ...

  8. 论文阅读之:Deep Meta Learning for Real-Time Visual Tracking based on Target-Specific Feature Space

    Deep Meta Learning for Real-Time Visual Tracking based on Target-Specific Feature Space  2018-01-04  ...

  9. MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning

    MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning 2019-08-11 19:48:17 Paper: h ...

  10. Django笔记八之model中Meta参数的使用

    前面介绍了 model 的字段属性,字段类型,这篇笔记介绍一下 model 的 Meta 选项. 这个选项提供了一些参数,比如排序(ordering),表名(db_table)等. 但这都不是必需的, ...

随机推荐

  1. FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP

    ​对各高校即将毕业的学子来说,毕业设计算是在大学里的最后一个大作业.特别是软件.计算机.电子等相关专业,毕业设计非常讲究实操,往往要求实现一个实用的.可用的.易用的软件系统或手机APP. 不管是软件还 ...

  2. mysql bit(1) 字段insert 报错 Data too long

    insert数据时,给bit(1)字段赋值 '1' 报错 将字符串'1',修改为数字1即可

  3. C#设计模式入门实战教程

    什么是设计模式 设计模式是对面向对象设计中反复出现的问题的解决方案.它们提供了被反复使用.多数人知晓的.经过分类编目的代码设计经验总结. 设计模式的作用 提高代码的可重用性:通过定义一套标准的解决方案 ...

  4. 【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks

    问题现象 客户将一个100G的表的数据插入到另一个表中,使用insert into select插入数据.从第一天下午2点开始执行,到第二天上午10点,一直未执行完毕. 由于需要实施下一步操作,客户k ...

  5. Ansible 知识

    Ref: guru99.com/ansible-tutorial.html https://www.digitalocean.com/community/tutorials/how-to-use-an ...

  6. c程序设计语言 by K&R(一)一些c语言基础知识

    出自<c程序设计语言> by K&R: 一.导言 二.类型.运算符与表达式 三.控制流 1. 字符输入与输出 getchar() 和 putchar(),输入一个字符.输出一个字符 ...

  7. EF Core – Many to Many

    前言 Many to many 是 EF Core 5.0 才开始有的, 以前都用 2 个 1-n 来实现的. 由于它比 1-n 复杂, 所以有必要写一遍来记入一下. 参考: Relationship ...

  8. IOI2000 邮局 加强版 题解

    [IOI2000] 邮局 加强版 题解 考虑动态规划,设 \(f_{i,j}\) 为经过了 \(i\) 个村庄,正在建第 \(j\)​ 个邮局的最优距离. 以及 \(w_{i,j}\) 表示区间 \( ...

  9. MyBatis——简介

    MyBatis MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 官网:https://mybatis.net.cn/ 持久层 负责将数据保存到数据库的那一层代码 javaEE 三层架 ...

  10. python08_05day

    #!/usr/bin/python# -*- coding: UTF-8 -*-from _ast import Param #查询数据库'''import MySQLdb conn = MySQLd ...