通俗讲解元学习(Meta-Learning)
元学习通俗的来说,就是去学习如何学习(Learning to learn),掌握学习的方法,有时候掌握学习的方法比刻苦学习更重要!
下面我们进行详细讲解
1. 从传统机器学习到元学习
传统的机器学中,我们选择一个算法�F,把数据放进去,学出来一组参数�θ,在测试数据上用,得出结果。如图:

基于这种思想,我们能不能学�F呢?
当然可以了!现在 我们的目标就是去学习�F

如上图,A就是元学习算法,�ω就是算法中可学的参数,称为元知识,得到最适用的�F之后,再把数据放进去,得到�f,最终输出结果.
那现在有个问题了
上述图中只有一个任务,就是分清楚猫还是狗,那遇到多任务时,该怎么办?就是让算法不仅仅可以分猫狗,还能分苹果橘子,自行车和汽车等。如下图所示:

如果让�F都能做,这时,�ω就是对所有分类任务都比较好的算法,得到后,可以让他做新的任务,分手机和电脑,得到模型��fθ,这时该模型就有分辨手机和电脑的能力了。
单任务元学习目标是找到一个最适合该任务的算法,而多任务元学习是找到最适合所有任务的算法,并且这个算法能够处理新的任务。
1.1 怎么学算法参数�ω 呢?
传统的机器学习如何学习参数�θ呢?
如下图,先建立一个模型,把“猫”输入,不断进行反馈;

第二步定义损失函数,如下图,用交叉熵来定义,也就是说通过预测的概率和真实的标签对比,预测的概率越低,分类越错,惩罚就越高,惩罚越高的话,下一次分错的概率就越低,通过这样的方式学习。

最后把损失加起来得到总的损失,求梯度,目的是让他下一次不要犯错了,根据不断的优化迭代,得到�∗θ∗,这就是学出来的模型参数。

上述步骤是求模型的参数,那么算法的参数怎么学呢?
其实和求模型的参数一模一样,本质没有区别
因为模型的参数是想要让它在数据上更通用更一般化,在元学习里,只不过是把上述的数据换成了任务,使其在没见过的任务上也做的好,怎么做呢?如下图

给出task1,task2,得到初始化算法��Fω,根据��Fω测试,得到损失,然后加起来,得到最终损失�(�)L(ϕ) 。
与传统就机器学习相比,传统的机器学习损失是在训练样本上做的,而元学习是在测试样本做的。但是机器学习中不可以用测试数据用于训练,怎么办?
将训练数据分为支撑集(Support set)(优化模型参数�θ)和查询集(Query set)(优化算法参数�ω,如果�ω不好,那�θ也一定不好)。对于测试数据,也同样分为支撑集和查询集,但是测试数据的查询集不参与学习

那么它的流程是什么样的呢?如下:
先有一个元学习算法,元学习算法给你一个支撑集之后,会得到一个通用的模型,这个模型在查询集上评估一下,看看好不好,最后得到一个�ω,再用这个算法在测试集上的支撑集上更新,得到一个模型,再用这个模型,在查询集上做最终的预测。
训练和测试集在元学习中称为元训练和元测试。公式表示如下:

元训练:
如上图,它分为内层和外层优化,外层用于学算法参数,内层用于学模型参数,内层是给出�ω学出�∗θ∗,把�∗θ∗拿到查询集中,验证学的怎么样,如果不好,说明�ω不好,通过loss去更新�∗ω∗,不断迭代。
元测试:
已经学到最好的算法后,在测试集的支撑集上去学一个模型,最终,�∗θ∗就是测试模型。
这个元知识可以是什么呢? 可以使非常多的东西,例如:超参数,初始化的模型参数,embeddings,模型架构,损失函数等等。
2.元学习的分类
从方法论角度,元学习分为三类:基于优化,基于模型,基于度量。
展开讲讲
2.1 基于优化的元学习
�ω在优化的过程中起作用,它指导你去优化,告诉你当前该用什么优化器,相关的一篇论文如下:
[1606.04474] Learning to learn by gradient descent by gradient descent (arxiv.org)
论文题目为:用梯度下降的方式去学习如何用梯度下降学习
在元学习中,通过元知识�ω学习合适的优化函数,公式如下:

一个典型的基于优化的方法是MAML(Model-Agnostic Meta-Learning):
我们定义初始化参数为�θ,定义在第n个测试任务上训练之后的模型参数为�^�θ^n,于是总的损失函数为�(�)=∑�=1���(�^�)L(ϕ)=∑n=1Nln(θ^n),pre-training的损失函数是�(�)=∑�=1���(�)L(ϕ)=∑n=1Nln(ϕ),直观上理解是MAML所评测的损失是在任务训练之后的测试loss,而pre-training是直接在原有基础上求损失没有经过训练。

李宏毅老师举了一个非常形象的例子,假设模型参数的�ϕ和�θ向量都是一维的,MAML的初衷是找到一个不偏不倚的�ϕ,使得不管是在任务1的loss曲线�1l1还是任务2的loss曲线�2l2上,都能下降到分别的全局最优。

而model pre-training的初衷是寻找一个从一开始就让所有任务的损失之和处于最小状态�ϕ,它并不保证所有任务都能训练到最好的�^�θ^n,如上图所示,�2l2即收敛到局部最优。接下来李老师还做了一个很现实的比喻,他把MAML比作选择读博,意味着在意的是以后的表现如何,即潜力;而model pre-training就相当于选择毕业直接去互联网大厂工作,马上就把所学技能兑现金钱,在意的是当下表现如何。
总结起来,MAML算法的框架其实很简单,值得注意的是两个学习率�ϵ和�η所用的地方不同:
- 对于采样出来的所有任务��θi ,在support set上计算梯度并更新参数��=��−�▽��(�)θi=θi−ϵ▽ϕl(ϕ)
- 计算所有任务在query set上的损失之和�(�)=∑�=1���(��)L(ϕ)=∑n=1Nln(θn)
- 更新初始化参数�⟵�−�▽��(�)ϕ⟵ϕ−η▽ϕL(ϕ)
这是训练过程的流程,所有的更新参数步骤都被限制在了一次,即one-step,但在用这个算法时,即测试新任务的表现时可以更新更多次

任何模型都可以应用MAML
伪代码如下:

应用:小样本学习
计算损失函数的方式不一样,MAML不要求初始化的模型做的好,要求迭代一步后的模型做得好,预训练模型要求�θ本身好
2.2基于模型的元学习
学一个模型,通过元知识,直接生成一个模型
有如下模型:
- 记忆增强神经网络(MANN,Memory-Augmented Neural Network)
- 元网络(MetaNet)
- 任务无关网络(TAML)
- 简单神经注意元学习(SNAIL,Simple Neural Attentive Meta-Learner)
优点:
系统内部动态的灵活性,比基于度量的有更广泛的适用性
缺点:
- 数据量大,效果差
- 监督任务,不如基于度量的元学习
- 任务间距离大,不如基于优化的元学习
对网络结构依赖性强,而网络结构的设计取决于解决任务的特性,面对差异大的任务需要重新设计网络结构。
2.3 基于度量的元学习
学习有效的度量空间表示两个集合样本的相似性,然后基于度量空间快速更新适应新任务中。
有如下模型:
- 孪生网络(SiamenseNet)
- 匹配网络(MatchingNet)
- 注意循环比较(ARC,Attentive Recurrent Comparator)
优点:
任务量少时,网络不需要进行特定任务的调整,预测速度快;基于相似性的预测,思想简单
缺点:
- 当训练和测试任务距离远,方法无法把新任务信息吸收到网络权值中,需要重新训练编码过程
- 任务量大时,成对比较计算昂贵,且标签依赖强,只适用于监督环境
- 编码后的样本无法解释其意义
- 简单地使用距离来表达相似性存在不合理的可能
相关文章:
通俗讲解元学习(Meta-Learning)
元学习通俗的来说,就是去学习如何学习(Learning to learn),掌握学习的方法,有时候掌握学习的方法比刻苦学习更重要! 下面我们进行详细讲解 1. 从传统机器学习到元学习 传统的机器学中,我们选择一个算法&…...
生成全球定位系统、伽利略和北斗二号的Matlab代码及实际数据捕获文件,为测试功能提供完整信号与频谱
使用Matlab生成和分析GNSS信号(第一部分) 全球导航卫星系统(Global Navigation Satellite System, GNSS)是一个提供全球覆盖的,定位、导航、时间传递服务的系统。由全球定位系统(GPS),俄罗斯的格洛纳斯(GLONASS),欧洲…...
Android 14 版本变更总览
Android 14 版本 Android 14 总览Android 14 功能和变更列表行为变更:所有应用行为变更:以 Android 14 或更高版本为目标平台的应用功能和 API 概览 Android 14 总览 https://developer.android.google.cn/about/versions/14?hlzh-cn 文章基于官方资料…...
内网安全:Cobalt Strike 工具 渗透多层内网主机.(正向 || 反向)
内网安全:Cobalt Strike 工具 渗透多层内网主机. Cobalt Strike 是一款以 metasploit 为基础的 GUI 的框架式渗透工具,又被业界人称为 CS。拥有多种协议主机上线方式,集成了端口转发,服务扫描,自动化溢出,…...
ChatGPT 五个写论文的神技巧,让你的老师对你刮目相看!
导读:ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。我们向您展示如何使用ChatGPT进行写作辅助,以及其他一些有用的写作技巧。 本文字数:2000,阅读时长大约:12分钟 ChatGPT这款AI工具在推出两个月内就累积了超…...
模型服务文档自动生成,要素追溯关联、结构规范易读|ModelWhale 版本更新
整装待发的初夏,ModelWhale 持续聚焦 AI for Science,针对大模型等前沿带来了新一轮的版本更新,期待为你提供更好的使用体验。 本次更新中,ModelWhale 主要进行了以下功能迭代: • 新增 模型服务文档自动生成…...
《微服务实战》 第三十一章 ShardingSphere - ShardingSphere-JDBC
前言 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的…...
【论文阅读】Twin neural network regression is a semi- supervised regression algorithm
论文下载 GitHub bib: ARTICLE{,title {Twin neural network regression is a semi- supervised regression algorithm},author {Sebastian J Wetzel and Roger G Melko and Isaac Tamblyn},journal {Machine Learning: Science and Technology},year {2022},volum…...
java之反射机制和注解(更新中......)
Reflect在文档中的位置: 文档链接:https://docs.oracle.com/javase/8/docs/api/index.html 用于获取类或对象的反射信息。 常用的反射机制重要的类: java.lang.Class:整个字节码,代表一个类型。包含了以下三块内容&a…...
【Unity入门】25.入门结课Demo--神鸟大战怪兽
【Unity入门】入门结课Demo--神鸟大战怪兽 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习,我们也顺利的完成了入门课程,最后就用一个Demo作为我们的结课句号吧&am…...
HTTP协议基本格式
HTTP即HyperText Transfer Protocol(超文本传输协议),HTTP基于TCP/IP协议传输数据。 目录 Chrome抓包Fiddler代理抓包HTTP协议格式HTTP请求首行URL方法Get方法Post方法Get与Post的区别 请求报头中的属性Cookie和SessionCookie与Session的区别…...
在 ubuntu 22.04 上配置界面服务器 xrdp
文章目录 图形界面解决方案VNCXRDP XRDP 实例安装和配置使用 XRDP 使用原理谁更快 : X11转发 > XRDP > VNC 图形界面解决方案 1. VNC 2. XRDP 3. X11 ssh : // https://blog.csdn.net/u011011827/article/details/131065690VNC 外部开放端口 用的 是 5901-5910 桌面用…...
53、基于51单片机蓄电池充电器过充过放保护LCD液晶屏显示系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)
方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&…...
【C/C++】详解 函数重载和应用
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...
WPF开发txt阅读器4:字体控件绑定
文章目录 控件折叠字体尺寸绑定选择字体字体的中文名称 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录 控件折叠 作为一个txt阅读器,至少能够设置文字字体、尺寸,段落行间距等,还得有护眼模式等一系…...
CoreDX DDS应用开发指南(8)开发订阅应用程序
11 应用数据类型Application Data Types 11.1 概述 每个DDS主题都包含一个且仅包含一个数据类型,这是在主题上进行通信时使用的用户定义的数据类型。在大多数情况下,应用程序开发人员以数据定义语言(DDL)格式定义这些DDS数据类型。编译器用于将这些DDL类型定义转换为适当的…...
基于Python的接口自动化-读写配置文件
目录 引言 configparser模块功能介绍 引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值。为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这…...
useEffect的基础知识和底层机制
useEffect 是 React 中一个重要的 Hook,用来处理组件的副作用操作。它的基础知识包括两个方面:执行时机和参数。 执行时机: useEff ect 的执行时机包括两种情况: 组件挂载时,即第一次渲染之后。组件更新时ÿ…...
chatgpt赋能python:Python中如何加空格
Python中如何加空格 Python是一门广泛应用于科学计算、数据分析、人工智能、Web开发等领域的高级编程语言。在Python编程过程中,经常需要使用到空格,以实现程序的格式化和美观,同时也有助于提高代码的可读性和可维护性。本文主要介绍Python中…...
软件测试之路已不再是坦途
去年下半年才跳了槽,过程非常顺利,没有经历大家所说的工作荒的境地,所以一直没有直观地感受到软件测试就业形势到底有多严峻。 近来看到一些机构频频发出某某测试员在糟糕的就业形势下逆袭拿下XXW的某厂offer,然后推荐测试进阶课…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...
