《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks 》论文总结

本文主要是介绍《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks 》论文总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:

我们提出了一种不依赖模型的元学习算法,它与任何梯度下降训练的模型兼容,适用于各种不同的学习问题,包括分类、回归和强化学习。元学习的目标是在各种学习任务上训练一个模型,这样它只需要少量的训练样本就可以解决新的学习任务。在我们的方法中,模型的参数被显式地训练,使得少量的梯度步骤和少量的来自新任务的训练数据能够在该任务上产生良好的泛化性能。实际上,我们的方法训练模型易于微调。结果表明,该方法在两个few-shot图像分类基准上都取得了最新的性能,在few-shot回归上取得了良好的效果,并加速了基于神经网络策略的策略梯度强化学习的微调。

关键词:模型无关  元学习  具有很好的泛化能力  模型易于微调 

1、Introduction

  提出了一个通用的和模型无关的元学习算法,可以直接应用于任何学习问题和模型的梯度下降训练过程。并且我们的方法运用最小的修改来轻松的处理不同的体系和不同的问题设置,包括分类,回归和policy gradient reinforcement learning策略梯度强化学习。我们方法的关键思想是训练模型的初始参数,使得经过参数通过一个或者多个梯度步骤更新以后模型在新任务上具有最大的性能,该梯度步骤由来自该新任务的少量数据计算。

2、Model-Agnostic Meta-Learning

2.1. Meta-Learning Problem Set-Up

     few-shot元学习的目标是训练一个模型,该模型仅使用少量数据点和训练迭代就能快速适应新任务。为了实现这一点,模型或学习者在元学习阶段接受一组任务的训练,这样训练后的模型只需使用少量的例子或试验就可以快速适应新的任务。实际上,元学习问题把整个任务当作训练的例子。

   我们考虑一个表示为f的模型,它将观测值x映射到输出a。在元学习过程中,该模型被训练成能够适应大量或无限数量的任务。每一个任务

包括一个损失函数,一个初始观测的分布,一个过渡分布,还有一个Episode的长度H。在i.i.d.监督学习问题中长度。模型可以通过选择第t次的输出来生成长度为H的样本。损失

提供特定于任务的反馈,其形式可能是错误分类损失或马尔可夫决策过程中的成本函数。

2.2. A Model-Agnostic Meta-Learning Algorithm

我们的目标是找到对任务变化敏感的模型参数,使得参数的微小变化将对从p(T)中提取的任何任务的损失函数产生很大的改善,当沿着损失梯度的方向改变时。我们不假设模型的形式,而是假设它是由某个参数向量θ参数化的,损失函数在θ中足够光滑以至于我们可以使用基于梯度的学习技术。

梯度更新方法:

元目标:

模型参数更新:

完整算法:

3、Species of MAML

3.1. Supervised Regression and Classifification

对于使用均方误差的回归任务,损失的形式为:

对于具有交叉熵损失的离散分类任务,损失采取以下形式:

具体算法:

3.2. Reinforcement Learning

在强化学习(RL)中,少量元学习的目标是使代理能够使用少量的测试设置经验快速获取新测试任务的策略。一项新的任务可能包括实现一个新的目标或者在一个新的环境中成功地完成一个先前训练过的目标。例如,一个代理可能学会快速找出如何导航迷宫,这样,当面对新迷宫时,它可以确定如何仅用少量样本可靠地到达出口。

每一个RL任务包括一个初始状态分布一个过渡分布,和一个对应于(负)奖励函数R的损失,因此,整个任务是一个水平H的Markov决策过程(MDP),学习者可以查询有限数量的样本轨迹进行few-shot学习。

损失的形式:

由于动态未知,expected reward通常是不可微的,因此我们使用策略梯度方法来估计模型梯度更新和元优化的梯度。由于策略梯度是一种on-policy算法,在自适应过程中,每个额外的梯度步骤都需要从当前策略中获取新的样本。

4、Related Work

一种流行的元学习方法是训练一个元学习者,学习如何更新学习者模型的参数。该方法已应用于学习优化深层网络,以及学习动态变化的递归网络。最近的一种方法是学习权值初始化和优化器。我们的方法不引入元学习的附加参数,也不需要特定的学习者架构。

元学习的另一种方法是在许多任务上训练记忆增强模型。

我们的方法也涉及到深层网络的初始化方法。

5、Experimental Evaluation

我们实验评估的目标是回答以下问题:

  • MAML能实现快速学习吗
  •  MAML是否可以用于多个不同领域的元学习,包括监督回归、分类和强化学习?
  • 使用MAML学习的模型是否可以通过额外的梯度更新和/或示例继续改进?

5.1 Regression

从一个简单的回归问题开始,它说明了MAML的基本原理。每个任务都涉及到从输入到输出的正弦波的回归,正弦波的振幅和相位在不同的任务之间是不同的。

我们在定性和定量结果(图3和附录B)中都观察到,使用MAML学习的模型在使用额外的梯度步骤时继续得到改进,尽管在一个梯度步骤之后进行了最大性能的训练。这一改进表明MAML优化了参数,使其位于一个易于快速适应且对p(T)的损失函数敏感的区域,

 

 

这篇关于《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks 》论文总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599564

相关文章

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres