当前位置: 首页 > news >正文

元学习与机器学习

         如图1 所示,机器学习的目标是要找一个函数f,这个函数可以是一个分类器,把几百张图 片输入进去,分类器就告诉我们分类的结果。元学习一样是找一个函数,但它要找的是一个学 习算法Fϕ∗,这个学习算法可以接受训练数据,然后输出一个分类器f。这个Fϕ∗ 将训练数据 作为输入,它直接输出训练的分类结果f,这个f 就是我们想要的分类器。

图1 元学习和机器学习的目标

        从训练数据角度分析,在机器学习里面,我们是拿某一个任务里面的训练数据进行训练, 而在元学习中我们是拿训练的任务来进行训练。这个很容易搞混,所以在文献中,我们会把任 务里面的训练数据叫做支持(support),把测试数据叫做查询(query)。在元学习里面,我们 是拿查询来进行训练,而在机器学习里面,我们是拿支持来进行训练。 

        那在机器学习里面,我们需要手动设置一个学习算法,而在元学习里面,我们是有一系列 的训练任务,所以我们也将元学习中的学习算法部分的学习称为跨任务学习。而对应的机器 学习中的学习称为单一任务学习,因为我们是在一个任务里面进行学习。

        我们再看一下两者的完整框架,如图2所示。在机器学习中,完整的框架就是把训练 数据拿去产生一个分类器,接着再把测试数据输入到这个分类器里面得出分类的结果。而在 元学习中,我们是有一些训练的任务,把这些训练的任务拿来产生一个学出来的学习算法叫 做Fϕ∗。对于接下来的测试任务,测试任务里面有支持数据和查询数据,我们再把这个测试任务里面的训练数据输入到学习出来的学习算法里面,得到一个分类器后,再把测试数据输入 进去,得到分类的结果。我们把元学习里面的这个测试叫做跨任务测试,因为它不是一般的测 试。一般的机器学习,我们的这个测试叫做单一任务测试,因为我们是在一个任务里面进行测 试。在元学习里面,我们要测试的不是一个分类表现的好坏,而是一个学习算法的表现的好 坏,所以在元学习里面为跨任务的测试。那有时候我们也在一些论文中会看到整个流程中一 次单一任务的训练和一次跨任务的测试,我们把这个流程叫做一个回合。所以在元学习里面, 我们是在一个回合里面进行训练和测试,而在机器学习里面,我们是在一个任务里面进行训 练和测试。

图2 元学习和机器学习的框架对比

        对于损失,在机器学习中我们使用  L=\sum_{k=1}^{k=K}e^k 表示损失函数,其中e^k 表示第k 个 训练样本的损失,其中的加和为所有训练数据在一个任务中的损失总和。在元学习里面,我们 使用L=\sum_{n=1}^{n=N}l^n 表示损失函数,其中的 l^n 表示第n个测试样本中的损失,其中的加和 为在所有任务中的损失总和。

        对于训练的过程两者也有一些差异,元学习的训练需要算ln,也就是计算每一个小任务 的损失函数,在这个过程中,我们需要做一次单一任务的训练+测试,也就是一个回合。现在假设我们的优化算法中,要找一个ϕ让L(ϕ)最小,那做这件事情的时候,我们需要算这个 L 很多次,也就是跨任务的训练包含了很多次的单一任务的训练+测试。这个是非常复杂的 且耗时的。所以在文献中,学习如何去初始化整个过程的工作中,往往把跨任务训练叫做外循 环,把单一任务训练叫做内循环。这是因为在跨任务训练里要跑好几次单一任务训练,所以跨 任务训练是外循环,单一任务训练是内循环。不过,外循环和内循环这些称呼通常只有在学习 初始化的工作中才会有,其他时候通常也不会这样叫。

        刚才介绍的都是元学习和机器学习的差别,他们其实也有很多的共同之处,事实上很多 在机器学习那边学到的知识和基本概念都可以直接搬到元学习来。举例来说,在机器学习上 面你会害怕训练数据上可能会有过拟合的问题,那在元学习里面也有可能会有过拟合的问题, 比如机器学习到了一个学习算法,这个学习算法在训练任务上做得很好,面对一个新的测试 的任务反而会做得不好,所以元学习也有可能有过拟合的问题。如果遇到过拟合问题应该怎 么办呢?我们类比一下机器学习,在机器学习里面,最直观的方法就是收集更多的训练数据, 所以在元学习里面也可以做一样的事——收集更多的训练任务。也就是如果训练的任务越多, 就代表训练的数据样本越多,那学习算法就越有机会可以泛化并用到新的任务上面。

        另外,我们在机器学习上会做数据增强,也就是在训练的时候,我们会把训练数据做一些 变化,比如说把图片做一些旋转、平移、缩放等等,这样可以让训练数据更多。在元学习里面 我们同样也可以做数据增强,也可以想一些方法来增加训练任务,比如说我们可以把训练任 务做一些变化,比如说把训练任务的类别做一些变化,或者把训练任务的数据做一些变化等 等。此外,我们在做元学习的时候还是要做优化,我们还是要想办法去找一个ϕ让l(ϕ)越小 越好。假设我们最小化l(ϕ) 的方法是梯度下降法,那我们在做梯度下降法的时候,我们还是 要去调学习率,只不过与机器学习不同,我们需要调整的参数是可学习的学习算法的参数。有 人可能会问,既然都要调整参数,那我何必还要用元学习,直接讲每一个机器学习的问题调整 参数不就可以了吗?其实并不是,因为在元学习里面,我们只需要把学习算法的参数调整好, 其就可以一劳永逸的使用到其他的任务当中,而不需要每一个任务都去调整参数。这样的话, 我们就可以节省很多的时间,也可以让我们的学习算法更加的有效率。

        那既然说到要调参数就遇到另一个问题了,在机器学习中我们不仅仅有训练样本和测试 样本,同时还有验证集的样本,用验证集样本中的表现来选择你的模型。所以元学习中也应该 要有用于验证的任务,也就是说在元学习中,我们应该要有训练任务、验证任务和测试任务。 其中验证任务来决定训练学习算法的时候的一些超参数,然后才跑在测试的任务中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 精通推荐算法29:行为序列建模之MIMN— 记忆网络建模长周期行为序列
  • 视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线
  • ffmpeg音视频开发从入门到精通——ffmpeg日志及目录操作
  • 第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon
  • 探寻 IP 代理地址繁多之因
  • 【WPF】WPF学习之【二】布局学习
  • Spring Boot 部署(jar包)
  • 手机TF卡格式化后数据恢复:方法、挑战与预防措施
  • KRTS网络模块:UDP通信
  • MQ-7一氧化碳传感器详解(STM32)
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • PostgreSQL的repmgr工具介绍
  • java基础-线程实现
  • 自己实现一个分布式锁
  • 【自然语言处理】调用NLTK数据失败‘wordnet‘和‘punkt‘不存在[Errno 11004]问题解决
  • Angular4 模板式表单用法以及验证
  • Docker入门(二) - Dockerfile
  • jquery cookie
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Rancher如何对接Ceph-RBD块存储
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Tornado学习笔记(1)
  • VuePress 静态网站生成
  • 对超线程几个不同角度的解释
  • 计算机常识 - 收藏集 - 掘金
  • 记一次删除Git记录中的大文件的过程
  • 盘点那些不知名却常用的 Git 操作
  • 前端_面试
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 为什么要用IPython/Jupyter?
  • 项目实战-Api的解决方案
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​插件化DPI在商用WIFI中的价值
  • ​如何使用QGIS制作三维建筑
  • # 计算机视觉入门
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Oracle存储过程编写经验和优化措施
  • .net Stream篇(六)
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .net/c# memcached 获取所有缓存键(keys)
  • .net程序集学习心得
  • .net网站发布-允许更新此预编译站点
  • .php文件都打不开,打不开php文件怎么办
  • @property括号内属性讲解
  • [023-2].第2节:SpringBoot中接收参数相关注解