元学习之模型诊断元学习(model-agnosticmeta-learning,MAML)

        模型诊断元学习(model-agnosticmeta-learning,MAML), 另一个是Reptile。这两个算法都是在 2017 年提出来的,而且都是基于梯度下降法进行优化 的。那我们最常用的学习算法是梯度下降,在梯度下降中,我们要有一个网络架构,同时初始 化一下这个网络的参数θ0。我们也有一些训练数据,他们是从训练数据里面采样一个批次出 来,然后用这个批次来计算梯度,并用这个梯度来更新参数,从θ0到θ‘,接着再重新计算一 次梯度,再更新参数,就反复这样下去,直到次数够多,输出一个满意的θ∗出来。

        初始化的参数θ0 可以训练的,一般θ0 是随机初始化的,也就是从某一个固定的分布里 面采样出来的。同时θ0 对结果往往有一定程度的影响,好的初始化参数不好的初始化参数可 以天差地远,那我们能不能够透过一些训练的任务,来找出一个对训练特别有帮助的初始化参数呢?这个方法是模型诊断元学习。

        MAML 的基本思路是,算法要最大化模型对超参数的敏感性。也就是说,要让学习到的 超参数让模型的损失函数因为样本的微小变化而有较大的优化。因此,模型的超参数设置应 该能够让损失函数变化的速度最快,即损失函数此时有最大的梯度。因此,损失函数被定义 为每一个任务下该模型的损失函数的梯度的和。剩下要做的,就是根据这个定义的损失函数, 用梯度下降法进行求解。在训练的过程中算法会求取以下两次梯度。第一次求梯度:针对每个 任务,计算损失函数的梯度,进行梯度下降;第二次求梯度:对梯度下降后的参数求和,再求 梯度,进行梯度下降。当然,MAML有另外的变形就叫做Reptile,翻译过来叫爬虫,大家可 以自行了解。需要补充的是,虽然在MAML中,我们要去学习初始化参数的过程,但是在其 中我们也是有很多超参数需要自己决定的。

        这里做一个联想,我们在介绍自监督学习的时候,我们也有提到好的初始化参数的重要 性。在自监督学习中,我们就是有很多的没有标记的数据,可以用一些代理的任务去训练它, 比如说在Bert 里面就是用填空题来训练模型,在图像上也可以做自监督学习。比如把图片的 其中一块盖起来,让机器预测被盖起来的一块是什么东西,机器就可以从中学到一些特征,然 后再把这些特征用在其他的任务上。当然,现在在做图像的自监督学习的时候,可能这个掩码 的方法以及所谓的填空的方法不是最常用的,目前比较流行用对比学习的方法。总之,在自监 督学习中我们会先拿一大些的数据去做预训练,那预训练的结果我们也说它是好的初始化参 数,然后再把这些好的初始化参数用在测试的任务上。

        那这MAML和自监督学习有什么不同呢?其实它们的目的都是一样的,都是要找到好的 初始化参数,但是它们的方法不一样。自监督学习是用一大些的数据去做预训练,而MAML 是用一大些的任务去做预训练。另外过去在自监督学习还没有兴起的时候,也有一些方法是 用一大些的任务去做预训练,这个方法叫做多任务学习。具体来讲,我们一样有好几个任务的 数据,并且把这些好几个任务的数据通通放在一起,然后接下来我们同样可以找到一个好的 初始化参数,然后再把这个好的初始化参数用在测试的任务上,这就是多任务学习。现在我 们在做有关MAML研究的时候,通常会把这种多任务学习的训练方法来当做元学习的基线。 因为这两个方法他们用的数据都是一样的,一边只是我们会把不同的任务分开,另外一边把 所有的任务的数据倒在一起。

        其实MAML 很像是域适应或者迁移学习,也就是我们在某些任务上面学到的东西可以 被被迁移到另外一个域,我们可以说他们是基于分类问题的域适应或者迁移学习。所以我们 在研读文献的时候其实也不用太拘泥于这些词汇,我们要真正要在意的是这些词汇背后所代 表的含义是什么。

        我们下面解释一下MAML的优势。首先有两个假设,第一个假设是MAML找到的初始 参数是一个很厉害的初始参数。它可以让我们的例如梯度下降这种学习算法快速找到每一个 任务的参数。另外一个假设是这个初始化的参数它本来就和每一个任务上最终好的结果已经 非常接近了,所以我们直接应用很少几次的梯度下降就可以轻易的找到好的结果,这个也是 使得MAML有效的关键。当然MAML也有一些变形,比如ANIL(almostnoinner loop)、 First order MAML(FOMAML)以及 Reptile 等等,这里我们不做扩展。

        除了可以学习初始化的参数外,MAML还可以学习优化器,如图1所示。我们在更新 参数的时候,需要决定比如说学习率、动量等等的参数。像学习率这种超参数进行自动更新 的方法在很早以前就有了,NIPS2016 年就有一篇文章,叫做“Learning to learn by gradient descent by gradient descent”。在这篇文章里面呢,作者直接学习了优化器,一般我们的优化器都是人为规定的(比如ADAM等等),而这个文章中的参数是根据训练的任务自动学出来 的。

图1 MAML 中可学习的优化器

        当然我们还可以训练网络架构,这部分的研究被称为神经网络架构搜索(NeuralArchi tecture Search,NAS)。如果在元学习中我们学习的是网络的架构,讲网络架构当作ϕ的 话,那我们就是在做NAS。在NAS里面,ϕ是网络架构,我们要找一个ϕ去最小化L(ϕ)。 这其中我们做L(ϕ)的微分就有可能出问题了。当我们遇到优化问题时并且没办法上微分的时 候,强化学习也许是一个解决方法。具体做法是,我们可以把ϕ想成是一个智能体的参数,这 个智能体的输出是NAS中相关的超参数。举例来说,现在第一层的滤波器它的长是多少,宽 是多少,步长是多少,数目是多少等等。我们智能体的输出就是NAS中相关的参数,然后接 下来我们要训练智能体,让它去最大化一个回报,即−L(ϕ),让他去最大化这个回报,就等 于最小化L(ϕ),也就是我们要找的最优的ϕ。

        下面是从一篇文章中截取的一个NAS的例子,以此为例介绍NAS的过程,如图2所 示。具体来讲,我们有一个智能体是RNN架构。这个RNN架构每次会输出一个网络架构有 关的参数,比如它会输出滤波器的高是多少,再输出过滤器的宽是多少,接着再输出步长是 多少等等。第一层第二层输出完了以后,接下来输出n+1层,再输出n+2层,以此类推。有 了这些参数以后,就根据它们设计一个网络以后就去训练这个网络,这个过程其实就是之前 我们介绍的单一任务训练。然后接下来就去做强化学习,我们可以把这一个网络他在测试数 据上面的准确率当做回报来训练智能体,目标是最大化回报,这个过程其实就是跨任务训练。 那除了强化学习以外,其实用演变算法也是可以的。本质上其实就是硬要把网络架构改一下, 让它变得可以微分。其中有一个经典的做法叫做可微分架构搜索,这个方法的本质就是想办 法让问题变的是可以微分,从而可以直接用梯度下降来最小化这个损失函数。

        除了网络架构可以学习外,其实数据处理部分也有可能可以学习。我们在训练网络的时 候,通常要做数据增强。那在元学习中我们可以让机器自动进行数据增强。另一个角度,我们 在训练的时候,有时候会需要给不同样本不同的权重。具体操作的话就会有不同的策略,比如 有的策略就是如果有一些样例距离分类边界线特别近,那说明其很难被分类,这样类似的样 例也许就要给它们比较大的权重,这样网络就会聚焦在这些比较难分别的样例中,希望它们可以被学得比较好。但是也有文献有相反的结论,比如比较有干扰噪声的这些样本应该给它 比较小的权重,这些样例如果比较接近分类边界线,可能代表它比较有噪声干扰,代表它可能 标签本身就标错了,或者分类是不合理的等等,也许就应该给这些样本比较小的权重。那元学 习中如何决定这个采样权重的策略呢?我们可以用学习的方式把采样策略直接学出来,然后 根据采样数据的特性自动决定采样数据的权重如何设计。

图2 NAS 的实例

        到目前为止,我们看到的这些方法都是基于梯度下降再去做改进的,我们有没有可能完 全舍弃掉梯度下降呢?比如,我们有没有可能直接学习一个网络,这个网络的参数ϕ,网络直 接训练数据作为输入直接输出训练好的结果?如果真的有这样一个网络,它可以将训练数据 作为输入输出训练好的网络的参数,那我们就可以让机器发明了新的学习算法。这个是有可 能的,并且已经有了一些论文。不过到目前为止,我们还是把训练跟测试分成两个阶段,我们 有一个学习算法使用训练数据进行训练,然后输出训练好的结果,并把训练好的结果用在测 试数据上。我们想看看有没有可能更进一步,直接把整个回合,也就是一次训练加一次测试合 并在一起。有一些工作,它就是直接把训练数据和测试数据当做网络的输入,网络输入完训 练数据以后,机器也许学出了一个学习算法,也许找出一组参数等等,再它输入训练数据以 后再给他测试数据,它就可以直接输出这些测试数据的答案。这个时候我们不再有训练和测 试的分界,在一个回合里面不再分训练和测试,而是直接用个网络把训练和测试这件事情一 次搞定。目前这种系列的方法叫做“learning to compare”,它又叫做基于度量的方法,这一系 列的做法就可以看作是训练和测试没有分界,一个网络直接把训练数据和测试数据都读进去, 而直接输出测试数据的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421026.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李沐关于大模型应用及职业发展的分享

前几天看了 李沐 在上海交大做的一个 分享 , 主要分享了他对于大模型的一些看法和他个人的经历。 我很喜欢李沐,技术厉害,看起来比较接地气,录制的 课程 也比较容易看懂。 大模型的应用 下面这张图是他对当前大模型应用的看法。…

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西,你可以将它当作一个文字的“调库”行为,“调库”只需要知道库名就行了,这里实际也是如此。甚至你只需要知道你想问什么,将你的消息作为输入,就能从大模型得到输出。而这个“库…

【html】新建一个html并且在浏览器运行

以下是一个简单的 HTML 小项目&#xff0c;展示一个包含标题、按钮和点击按钮后弹出提示框的基本页面 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthde…

K8s的Pv和Pvc就是为了pod数据持久化

一、 1.pv&#xff08;persistent volume&#xff09;&#xff1a;是k8s虚拟化的存储资源&#xff0c;实际上就是存储&#xff0c;列如本地的硬盘、网络文件系统&#xff08;Nfs&#xff09;、lvm、RAID、云存储。 2.pvc&#xff1a;pod对存储资源的请求&#xff0c;定义了需…

Linux基础3-基础工具1(什么是工具,yum,vim基础)

目录 一.什么是工具 二.yum 2.1 yum基础 2.2 yum拓展 2.3 rzsz 三.vim基础 四.下章内容 1. vim 插入模式&#xff0c;底行模式&#xff0c;命令模式下详解。vim基础配置 2. gcc/g 基础 一.什么是工具 工具的本质是也是指令。通过工具我们能快速的实现某些功能 二.yum 2.1…

服装|基于Java+vue的服装定制系统(源码+数据库+文档)

服装定制系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布…

SONIC系统(1)编译与构建

1、环境 准备一个linux环境&#xff0c;我这里使用ubuntu20.04 安装所需依赖 sudo apt-get update sudo apt-get install -y build-essential fakeroot debhelper \autotools-dev quilt libssl-dev libncurses5-dev \python3-pip python3-setuptools python3-wheel python3-…

Vue3+TypeScript二次封装axios

安装如下 npm install axios 第一步&#xff1a;创建config配置文件&#xff0c;用于存放请求后端的ip地址&#xff0c;用于后期打包后便于修改ip地址。 注&#xff1a;typescript要求参数要有类型。&#xff08;ES6 定义对象 属性 类型 修改的是属性的值&#xff09; inte…

Java+vue的医药进出口交易系统(源码+数据库+文档)

外贸系统|医药进出口交易系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 仓储部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

解锁生活密码,AI答案之书解决复杂难题

本文由 ChatMoney团队出品 介绍说明 “答案之书智能体”是您贴心的智慧伙伴&#xff0c;随时准备为您解答生活中的种种困惑。无论您在工作中遭遇瓶颈&#xff0c;还是在情感世界里迷失方向&#xff0c;亦或是对个人成长感到迷茫&#xff0c;它都能倾听您的心声&#xff0c;并给…

大数据Flink(一百一十六):Flink SQL的时间属性

文章目录 Flink SQL的时间属性 一、Flink 三种时间属性简介 二、Flink 三种时间属性的应用场景 三、​​​​​​​SQL 指定时间属性的两种方式 四、​​​​​​​​​​​​​​SQL 处理时间DDL定义 五、​​​​​​​​​​​​​​SQL 事件时间DDL定义 Flink SQL的时…

深入理解Java虚拟机:Jvm总结-垃圾收集器与内存分配策略

第三章 垃圾收集器与内存分配策略 3.1 意义 Java堆和方法区具有不确定性&#xff1a;一个接口的多个实现类、一个方法的不同条件分支需要的内存可能不一样。程序运行起来才知道到底会创建什么对象&#xff0c;创建多少个对象。动态分配内存和垃圾回收排查内存泄漏和内存溢出时…

javascript柯里化

return a b c d; } //通常调用方式 var sum add(1, 2, 3, 4); //柯里化的调用方式 var curryAdd Curry(add); var sum curryAdd(1)(2)(3)(4); //或者很多奇怪的方式调用 var sum curryAdd(1, 2)(3, 4); var sum curryAdd(1, 2, 3)(4); var sum curryAdd(1)(…

5.第二阶段x86游戏实战2-认识内存

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

24/9/6算法笔记 kaggle 房屋价格

预测模型主要分为两大类&#xff1a; 回归模型&#xff1a;当你的目标变量是连续的数值时&#xff0c;你会使用回归模型进行预测。回归模型试图找到输入特征和连续输出之间的关联。一些常见的回归模型包括&#xff1a; 线性回归&#xff08;Linear Regression&#xff09;岭回归…

FFmpeg 7.0 版本 “Dijkstra”的特点概述

FFmpeg 7.0 FFmpeg 官网:https://ffmpeg.org/FFmpeg 官网更新日志,2024.4.5 号发布代号"Dijkstra"的 7.0 版本的 FFmpeg,如下截图: 为什么叫 Dijkstra“Dijkstra” 指的是艾兹格戴克斯特拉(Edsger Wybe Dijkstra),他是一位荷兰计算机科学家,对计算机科学领域…

C#使用TCP-S7协议读写西门子PLC(一)

之前本人发布西门子S7协议的报文 西门子PLC的S7协议报文解析说明_西门子报文详解-CSDN博客 西门子PLC的S7协议是西门子公司在ModbusTcp协议的基础上自定义的一种协议,仅支持西门子PLC,S7协议本质仍然属于TCP协议的一种自定义具体实现 第一步,准备工作。VS2022中新建窗体应…

Redis学习Day3——项目工程开发

扩展阅读推荐&#xff1a; 黑马程序员Redis入门到实战教程_哔哩哔哩_bilibili 一、项目介绍及其初始化 学习Redis的过程&#xff0c;我们还将遇到各种实际问题&#xff0c;例如缓存击穿、雪崩、热Key等问题&#xff0c;只有在实际的项目实践中解决这些问题&#xff0c;才能更好…

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…

域名证书,泛域名证书,sni

文章目录 前言一、证书1.全域名证书2.泛域名证书 二、域名证书的使用1、浏览器请求域名证书流程对全域名证书的请求流程对泛域名证书的请求流程ssl client-hello携带server name 报文 2、浏览器对证书的验证流程 三、域名证书和sni 前言 本文介绍了泛域名证书和全域名证书的区别…