知乎同名账号同步发布

目录

  • 一、初步了解
  • 二、和ML的差异
  • 三、应用了解

一、初步了解


我们以分类问题为例,以前,学习的目的是学习一个二元分类器 f ∗ f^* f∗;现在,学习的目的是学习一个学习算法F,这个学习算法F能够学习一个二元分类器 f ∗ f^* f∗。
既然要直接学习一个学习算法F,那么就要考虑它的参数。以往的学习,是为了学习一个具体的二分类器 f ∗ f^* f∗,假设人为指定的学习算法是感知机,那么学习的过程需要改进的参数就是 w w w和 b b b。现在进行meta learning,目的是直接去学习学习算法F,那么需要关注的参数(上图中以“component”表示)就是网络架构、初始化参数、学习率等等,我们用 Φ \Phi Φ来表示这些参数, Φ \Phi Φ也被称为learnable components。

meta learning的训练过程,就是不断调整 Φ \Phi Φ,从而获得一个很好的学习算法F,然后在使用阶段中,用户就能用F去在给定的数据集上训练出一个二分类器 f ∗ f^* f∗,这个二分类器应该就是一个好的二分类器。


上图就是meta learning的一个总流程架构。具体而言,在以往的学习中,我们有一个训练集,有一个测试集,我们在训练集上利用感知机算法训练出一个loss比较低的二分类器,然后再在测试集上测试这个二分类器究竟好不好;而现在有了meta learning,情况就变了,我们有一个训练任务集(里面有一堆训练任务),有一个测试任务,每个训练任务中都有训练资料和测试资料,每个测试任务中都有训练资料和测试资料,我们利用这个训练任务集或者说这一堆训练任务来训练出一个很好的学习算法 F Φ ∗ F_{\Phi^*} FΦ∗​,然后在测试阶段,用这个学习算法 F Φ ∗ F_{\Phi^*} FΦ∗​在测试任务中的训练资料上来训练出一个二分类器 f θ ∗ f_{\theta^*} fθ∗​,然后在测试任务中的测试资料上测试这个二分类器 f θ ∗ f_{\theta^*} fθ∗​究竟好不好。


(当然,很显然的事情是,正如以往的学习中,测试数据不能在训练过程中出现一样,在meta learning中,训练过程不能使用测试任务。)

看到这你可能会有疑问,meta learning这样做,会不会有点画蛇添足了?为什么一定要先学习学习算法F,再用学习算法F来学习二分类器f呢?直接学习二分类器f不好吗?

实际上,在现实中,我们可能会面临一个问题,那就是数据的匮乏。还拿上述二分类问题作为例子,如果你要对猫和狗进行分类,那么labeled training data是非常多的,但是如果你要对长相别致的奇珍异兽——比如非洲穿山甲和鬃狼进行分类,而你只有少量的labeled training data,那么此时要怎么做呢?先说答案:此时你的做法可以是,找一大堆训练任务,这些任务中可以有猫狗二分类任务、苹果橘子二分类任务、汽车自行车二分类任务等等,总之这些任务的labeled data非常充裕,然后你把这些二分类任务作为meta learning的训练任务,去训练一个二分类学习算法F,然后再将非洲穿山甲和鬃狼的二分类任务作为测试任务,你可能只能为这个测试任务收集到少量的labeled data,即这个训练任务的训练资料和测试资料都比较少,但是由于你已经有了一个不错的F,那么你就可以用F在这少量的训练资料上训练出一个非洲穿山甲和鬃狼的二分类器(然后再在测试资料上去测试这个二分类器)。

接下来,我进一步来阐述一下上面这个过程的合理性,即我们用容易搜集的数据去训练F,然后用F在不容易搜集的数据上训练f,为什么这个f就可能是有效的?我们从人自身的成长来入手分析这个问题,试想一下,在你能够分辨电脑和手机的区别前,你大概率只见过几部手机、几部电脑,但是你就能够成功分辨出电脑和手机的区别。似乎,你把自己训练成“电脑手机二分类器”前,也并没有接触多少训练资料,那么为什么你就能够获得成功呢?实际上,那是因为你在之前的生活中就积累了大量的经验,可能在你上小学中学的时候,你见过白板和黑板的区别,于是你明白了物体可以用颜色来区分;可能你吃过汤圆和雪汤圆(一种雪糕),虽然两者长得很像,但你明白了物体可以用温度来区分;可能你在生活中遇到过无数种圆形和方形的物体,所以你明白了形状也是区分物体的重要参考信息…总之在你接触到手机和电脑之前,你可能已经在无数的二分类问题上训练过自己,换句话说,你已经接触到了巨量的二分类训练任务的训练资料,学习出了一个二分类问题的学习算法F。那么现在,当你第一次接触到电脑和手机,思考它们之间的区别的时候,你就启动了用F在少量的电脑、手机训练资料上训练电脑-手机二分类器的过程,从而轻而易举地获得了一个不错的电脑-手机二分类器f。

形象的说法就说到这里,接下来还是回到meta learning这项技术本身。

再看一遍上面图片中的流程架构,我们说过,F是依靠一堆训练任务训练出来的,但是没有讲训练过程要怎么做。我们知道每个训练任务中都有训练资料和测试资料,你可能会问,刚才提到了测试任务中的训练资料和测试资料应该如何使用,但是还没有讲训练任务中的训练资料和测试资料如何使用,那么应该如何使用呢?如何利用这一堆训练任务中的训练资料训练出这个学习算法 F Φ ∗ F_{\Phi^*} FΦ∗​呢?这一堆训练任务中的测试资料是干什么用的呢?我们要怎么像往常一样去计算这个loss呢?即便是有了loss,如何去优化learnable components Φ \Phi Φ呢?

接下来回答这个问题:

上图给出了一个训练过程。假设,训练任务集中有两个任务,任务一是苹果橘子二分类任务,任务二是自行车汽车二分类任务。任务一有一些苹果橘子照片当做训练资料,有一些苹果橘子照片当做测试资料;任务二有一些自行车汽车照片当做训练资料,有一些自行车汽车照片当做测试资料。


和传统的学习一样,一开始我们要初始化learnable component Φ \Phi Φ,从而我们有一个初始的学习算法 F Φ F_\Phi FΦ​。

我们先针对任务一做一些事情,要做的事情就是使用 F Φ F_\Phi FΦ​在其中的训练资料(一部分苹果橘子照片)上来训练一个二分类器 f θ 1 ∗ f_{\theta^{1*}} fθ1∗​,这个 θ 1 ∗ \theta^{1*} θ1∗就特指利用 F Φ F_\Phi FΦ​在任务一上学习的二分类器 f θ 1 ∗ f_{\theta^{1*}} fθ1∗​的参数。

然后,用这个二分类器去对任务一的测试资料进行测试,从而计算出一个loss l 1 l^1 l1;

同样地,我们也可以对任务二把上述流程重复一遍,从而得到loss l 2 l^2 l2:

最终的loss自然就等于 l 1 + l 2 l^1+l^2 l1+l2

当然,如果训练任务集中有N个任务,那么最终的loss就如下图中所示那样:

现在有了loss,自然就可以进行优化了,如下图:

上图的过程就和传统的学习过程非常相像了。但是还有个问题,我们知道在感知机算法中,你可以直接让loss对 w w w和 b b b算梯度,然后使用梯度下降,但是在meta learning中我们的参数是learnable component Φ \Phi Φ,它包含了网络的架构等等离散的、在loss中不可微的元素,那要怎么优化呢?李宏毅表示,如果你能够计算loss对 Φ \Phi Φ的微分,那么就可以使用梯度下降,如果不能,则可以使用Reinforcement Learning或者Evolutionary Algorithm。

二、和ML的差异

到这里,meta learning的基本思想流程都清楚了,接下来比较一下meta learning和machine learning之间的差异:

首先,是上图,一个是找f,一个是找F,F是用来找f的。

其次,ML对应一个任务,meta learning对应多个任务。注意任务中的训练资料也被称为Support set,测试资料也被称为Query set。meta learning的学习过程被称为Across-task Training。


上图有Within-task和Across-task的对比,意义自明。

当然两者之间的loss也是有区别的。


ML中的技术或者事情,也都可以用在或者发生在meta learning上。其中上述development task对应的是“验证任务”,它介于训练任务和测试任务之间,可以视为对应ML中的验证集。

三、应用了解

接下来说说不同种类的meta learning。

meta learning是怎么分类的呢?我们最早提过, Φ \Phi Φ代表的是meta learning中的参数,它叫learnable components,它里面有很多component,可能包含网络架构、参数初始化、学习率等等。当然这些component可能有、也可能没有,所以我们将不同的 Φ \Phi Φ对应到不同种类的meta learning上:

比如说,如果 Φ \Phi Φ指的就是网络架构,那么meta learning就变成了很多人耳熟能详的NAS:

那么此时loss对 Φ \Phi Φ肯定就是不可微的,就可以使用强化学习等技术:


当然除了强化学习,也可以使用进化算法,上图给出了一些相关的paper。

meta learning还有一些应用,比如Few-shot Image Classification:

先记这么多,李宏毅还有一节课,那节课讲的就是更具体的算法细节了,今天先了解meta learning基本思想,需要的时候再看吧。

深度学习基础——简单了解meta learning(来自李宏毅课程笔记)相关推荐

  1. [深度学习基础] 斯坦福CS231n李飞飞计算机视觉Lecture 7笔记

    内容列表 Lecture 7 Convolutional Neural Networks 卷积神经网络历史 卷积神经网络具体结构 卷积层 池化层 全连接层 神经网络架构发展 LeNet AlexNet ...

  2. [深度学习基础] 斯坦福CS231n李飞飞计算机视觉Lecture 1笔记

    前言:目前做深度学习也有一段时间了,系统的知识也学了很多,但是大多数都是自己在网上所获得的零散的知识,最近看了李飞飞的斯坦福网上公开课,觉得可以好好的巩固一下基础,对每个Lecture做一下笔记,De ...

  3. [深度学习基础] 斯坦福CS231n李飞飞计算机视觉Lecture 5笔记

    内容列表 Lecture 5 Training Neural Networks,Part I 神经网络的历史 训练神经网络 激活函数 数据预处理 权重初始化 批量归一化 检查学习过程 超参数优化 小结 ...

  4. 【YOLO】深度学习-物体检测-YOLO系列(网易云课程笔记)

    第一章 YOLO系列概述 1.深度学习经典检测方法 (1) tow-stage(两阶段):Faster-rcnn Mask-rcnn系列:增加了区域建议网络(RPN),即预选框 特点 速度通常较慢(5 ...

  5. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  6. 深度学习基础实例与总结

    一.神经网络 1 深度学习 1 什么是深度学习? 简单来说,深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机.它通过组合低层特征,形成更为抽象的高层表示,用以描述被识别对象的高级属性类别或 ...

  7. Python深度学习(一)深度学习基础

    翻译自Deep Learning With Python(2018) 第一章 深度学习基础:https://www.jianshu.com/p/6c08f4ceab4c 第二章 深度学习的数学构建模块 ...

  8. 第一门课 神经网络和深度学习(Neural Networks and Deep Learning)

    第一门课 神经网络和深度学习(Neural Networks and Deep Learning) 文章目录 第一门课 神经网络和深度学习(Neural Networks and Deep Learn ...

  9. 独家思维导图!让你秒懂李宏毅2020深度学习(三)——深度学习基础(神经网络和反向传播部分)

    独家思维导图!让你秒懂李宏毅2020深度学习(三)--深度学习基础(神经网络和反向传播部分) 长文预警!!!前面两篇文章主要介绍了李宏毅视频中的机器学习部分,从这篇文章开始,我将介绍李宏毅视频中的深度 ...

最新文章

  1. ASA与PIX的区别
  2. Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
  3. 年薪25万只是白菜价,这几个专业的毕业生正被疯抢
  4. 用YACC/LEX 设计计算机语言
  5. 学习笔记——ArrayList总结
  6. 搭建App主流框架_纯代码搭建(OC)
  7. ifix如何设画面大小_ifix5.1环境下的ifix服务器、客户端配置
  8. Halcon —— 边缘检测算子详解
  9. 抽象类中不能有private的成员_【java基础】-- java接口和抽象类的异同分析
  10. 目标追踪-背景差算法
  11. Know more about Oracle Latches
  12. 谈谈深浅拷贝的问题(1)
  13. 苹果照片库的照片,直接拖到桌面上
  14. 并查集(UnionFind)算法
  15. [转]KSN报告:2014 - 2016年的PC勒索软件
  16. 数字图像处理技术在智能交通中的应用
  17. 几组数据的相关性python_几的笔顺 笔画数:2 拼音:jī,jǐ 部首:几 - 智慧山
  18. 计算机毕业设计基于Android二手车交易网站系统app
  19. /deep/ 在谷歌浏览器89+版本失效问题解决
  20. python按字典顺序输出单词频率_用python编写一段程序,输入若干单词,按照单词长短进行排序,并统计所有单词中每个字母(a-z)出现的次数...

热门文章

  1. 又一个程序员被判刑了!运维违规操作被判5年半,IT从业需要懂法律!
  2. Docker系列七: 使用Humpback管理工具管理容器(一款UI管理工具)
  3. 一看就会,效率翻倍!在线设计必会技能(基础篇)
  4. 杰理之关 MIC 处理方法。处理后对于减少喊话底噪 和啸叫有明显效果【篇】
  5. PHP初级教程------------------(3)
  6. PO、VO、BO、DTO 和 POJO的概念和用处
  7. 线程池是什么?什么情况下使用线程池?使用线程的好处是什么?
  8. ntp的用法详解(转载)
  9. 一键安装zabbix脚本
  10. 论文解读:MDETR - Modulated Detection for End-to-End Multi-Modal Understanding