• Transfer Learning(迁移学习)
  • zero-shot learning(零样本学习)

三十四、Transfer Learning(迁移学习)

1、介绍
  假设你现在有一些跟你要进行的task没有直接相关的data,能不能利用这些没有直接相关的data帮助我们做什么事情?
  比如现在要做的是猫和狗的classifier,那所谓的没有直接相关的data有很多种可能。比如说input的distribution是类似的,都是动物的图片,但是task的label是无关的。similar domain,different tasks或者是different domain,same tasks。

  为什么要做Transfer Learning?要做的task的data太小,利用其它data来帮助实现这个task。

  
2、方法
  Transfer Learning有很多方法:现有有一个想做的task,然后有一些跟这个task有关的data这个叫做target data;有一些data是跟这个task无关的data,叫做source data。这两种data可能是有label的,有可能是unlabeled的。
  这里可以分四种可能来讨论:
(一)target data和source data同时有label:
  (1)最常见的就是Model Fine-tuning

注意:如果target data数量很少,只有几个example而已,这个叫做One-shot learning
  最典型的例子:(supervised)speaker adaption–target data:某一个人的声音;source data:有一大堆来自不同人的声音。做法:

  (fine-tuning:把在source data上train出的model当作是training的初始值,再用target data train下去)
  可能会遇到的challenge:

  所以在train的时候要很小心,有很多技巧:
  技巧1:Conservative Training–现在有大量的source data去train一个语音辨识的neural network,接下来你有target data,如果直接拿这个target data继续去train这个model就坏掉了。怎么办?(1)可以在training的时候下一个constraint,让train完的新的model和旧的model不要差太多。可以说,让train完的新的model和旧的model在input同样的data时它们的output越接近越好。(2)或者说要求新的model和旧的model它们的L2 Norm差距越小越好。以防止over fitting。

  
  技巧2:Layer Transfer–现在有个用source data train好的model,把这个model里面的某几个layer拿出来直接copy到新的model里面去。接下来你用你的source data只去train 没有copy的layer(好处是source data只需要考虑非常少的参数,就可以避免over fitting的情形)。如果data够多了就可以fine-tune整个network。

  问题:哪些layer应该被transfer?哪些layer不应该被transfer?
  在不同的task上需要被transfer的layer不同。例如:

  
  (2)Multitask Learning:两个task用的是同样的feature,learn一个neural network,input两个不同task上的feature,但是中间会分叉出来。这样做的好处是这两个task前面几个layer是共用的。前面几个layer是用比较多的layer train的(使用了task A和task B的data),做这件事之前要确定它们有没有共通性,是不是可以共用前面几个layer。
  还有一种情况是连input都是没办法学的,但是可以两种不同task的input使用不同的neural network把它们transform到一个domain上面。在同一个domain上再apply不同的neural network去分别完成两个task。中间可能有某几个layer是共用的。

  Multitask Learning一个很成功的例子就是多语言的语音辨识:

  前面几个layer共用参数,后面每个语言可能有自己的参数。
  
  Progressive Neural Network:
  现在有一个task1,train一个task1的neural network,train好以后task1的参数就fix住了,现在做task2,一样有一个neural network,但是task2的每一个hidden layer都会去接前面task1的某一个hidden layer的output,所以在training的时候它的好处是就算task1和task2非常不像,首先task2的data不会动task1的model,所以task1不会比原来更差,task2借用task1的参数,可以把这些参数直接设成0,这样也不会影响task2的performance;task3同时从task1和task2的hidden layer得到information。

  
(二)target data是unlabeled,source data有label:
  (1)Domain-adversarial training

  举例来说,我们可以说source data是MNIST的image,target data是MNIST-M的image,source data是有label的,target data没有label。这种情况下通常是把source data用作training data,target data作testing data,training data和testing data是mismatch(不匹配)的。

  怎么把在source data上learn出来的model也可以apply到target data上?
  如果今天直接learn一个model,它的input就是一张image,结果可能是会烂掉的。如果把一个neural network当作是feature extractor,前面几层可以当作是在抽feature,后面几层可以看作是在做classification。

  前面几层是在抽feature,会发现不同domain的data的feature完全不一样。就会导致后面的classifier可以把如下图蓝色部分做好,对红色部分无能无力:

  那怎么办呢?
  这边希望做到的事情是:前面的feature extractor可以把domain的特性去除掉,叫做Domain-adversarial training。后面接一个domain的classifier,把feature extractor的output丢给domain的classifier,判断这些feature是来自于哪个domain。

  光是train这个domain classifier是不够的,因为feature extractor可以轻易地骗过domain classifier,所以你要给feature extractor增加它任务的难度。feature extractor它output的feature不只要同时骗过domain classifier,还要同时让label predictor做的好(它的output就是手写数字的十个class)。

  怎么让feature extractor成功骗过domain classifier让它的结果越小越好?
  在它们之间加一个gradient reversal layer(梯度反转层)。

  (2)zero-shot learning:

  zero-shot learning的define更加严苛一点,今天在source data和target data的task是不一样的。
  比如说在影像上面,source data可能是分辨猫和狗,因此里面有猫和狗,但是你的target data里面是羊驼。并且在source data中是从来没有出现过羊驼的。

  在语音上有很多zero-shot learning的问题,source data中可能从没有出现过target data的词汇,那么怎么在语音上解决这个问题呢?–不要直接去辨识一段声音属于哪一个word,辨识一段声音属于哪一个音标。建立一个文字和音标之间的表,在辨识的时候只要辨识出音标就好。
  
  那在影像上是怎么做的呢?
  方法Representing each class by its attributes:我们可以把每一个class用它的attribute来表示,也就是说你有一个database,这个database里面会有所有不同可能的object和它的特性。假如现在要做的事情是辨识动物,但是你的training data的动物和testing data的动物是不一样的,但是你有一个database,这个database告诉你说每一种动物它们有什么样的特性:

  在training的时候不直接辨识说每一张image属于哪一个class,而是去辨识说每一张image里面具备什么样的attribute,所以neural network的target就是说看到猩猩的image就要说它是一个毛茸茸的动物,没有四只脚,没有尾巴。

  在testing的时候就算今天来了从来没有见过的image,neural network只要可以detect说input这张image,它有什么样的attribute,查表说哪一种动物的attribute跟你的output最接近。

  有时候你的attribute可能非常地复杂,dimension可能很大,甚至可以做attribute地embedding,现在有一个embedding的space,把每一张image都透过一个transform变成embedding space上的一个点,然后把所有的attribute也都变成embedding space上的一个点,training的时候就希望两个点越接近越好。在testing的时候如果有一张没有看过的image,就看这个image的attribute embedding跟哪个attribute最像,那就能知道它是什么样的image。

  
  意思是说我们要把image和attribute描述成vector,投影到同一个空间里面,也就是说可以想象成对image的vector进行降维,降到同一个dimension,通过两个function把它们投影到embedding space上面。这两个function可以说就是neural network,希望说它们两个投影到embedding space以后越接近越好。
  
  但是,如果根本没有database呢?根本不知道每一个动物的attribute是什么?–那你可以借用word vector,word vector的每一个dimension就代表现在的这个word的某种attribute,所以不一定需要database。

  稍微重新设计以下你的loss function(拉近同一个东西的距离,拉远不同东西的距离,而不是只有拉近这一个操作):

  
  还有一个更简单的zero-shot learning的方法叫做:Convex Combination of Semantic Embedding(语义嵌入的凸组合)。
  这个方法是说:假设off-the-shelf(现成)的语音辨识系统,和现成的word vector,把一张图丢到neural network里面去,它没有办法决定它是哪一个class,但是它有0.5的几率是lion,0.5的几率是tiger,接下来再去找lion和tiger的word vector,然后把它们两个用1比1的比例混合,得到另外一个新的vector,然后再看说哪一个word 的word vector和混合以后的结果最接近。

  
  以下是这个方法的结果:

  
  zero-shot learning在文字上的例子:

  更多:

  总结:

  

  
  
  


本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。

机器学习之二十一(读书笔记)相关推荐

  1. python第三章上机实践_《机器学习Python实践》读书笔记-第三章

    <机器学习Python实践>,第三章,第一个机器学习项目 以往目录:橘猫吃不胖:<机器学习Python实践>读书笔记-第一章​zhuanlan.zhihu.com 书中介绍了一 ...

  2. 《机器学习与实践》读书笔记及代码(二)

    基础篇:支持向量机(分类) #从sklearn.datasets里导入手写体数字加载器 from sklearn.datasets import load_digits #从通过数据加载器,获得手写体 ...

  3. python机器学习第二版(读书笔记)

    第一章 赋予计算机从数据中学习的能力 每一行:代表一个样本,行向量用上标表示:每一列:代表一个维度,列向量用下标表示. numpy:多维矩阵的存储和操作数据,pandas:基于numpy,提供更高级操 ...

  4. 机器学习(二十一)——Optimizer, 单分类SVM多分类SVM, 时间序列分析

    http://antkillerfarm.github.io/ Optimizer 在<机器学习(一)>中,我们已经指出梯度下降是解决凸优化问题的一般方法.而如何更有效率的梯度下降,就是本 ...

  5. 机器学习之九(读书笔记)

    Attack ML Models Deffense Adversarial Attack 十五.Attack and Defense Attack 1.什么是攻击   想做什么样的攻击?   举例:现 ...

  6. 文明之光二册-读书笔记

    最近读完了文明之光二册,记录一点感想. 吴军的<文明之光>系列图书给人最大的感受是吴军将人类文明历史长河中的典型进行分门别类,然后将其串联起来讲解,读者读起来更能把握书中的核心. 比如最近 ...

  7. 《机器学习》西瓜书读书笔记

    数学公式 Ⅱ ( ⋅ ) 是 指 示 函 数 , 若 ⋅ 为 真 则 取 1 , 否 则 取 0 Ⅱ(·)是指示函数,若·为真则取1,否则取0 Ⅱ(⋅)是指示函数,若⋅为真则取1,否则取0 #第一章: ...

  8. 西瓜书(机器学习 周志华)读书笔记--第一章 绪论

    1.1 引言 略 1.2 基本术语 1.2.1 数据集相关的基本概念 假定我们收集了一批关于西瓜的数据,例如(色泽=青绿;根蒂=蜷缩;敲声=浊响), (色泽=乌黑;根蒂=稍蜷;敲声=沉闷), (色泽= ...

  9. 机器学习知识点(二十一)特征选择之岭回归和LASSO

    特征选择,也就是特征缩减,是通过对损失函数(即优化目标)加入惩罚项,使得训练求解参数过程中会考虑到系数的大小,通过设置缩减系数(惩罚系数),会使得影响较小的特征的系数衰减到0,只保留重要的特征.嵌入式 ...

最新文章

  1. Task03:青少年软件编程(Scratch)等级考试模拟卷(一级)
  2. linux网络批量安装上限,linux基于网络的批量安装
  3. Seata RPC 模块的重构之路
  4. IDEA添加模块时,插件报错:java.util.NoSuchElementException Collection is empty
  5. python 安装echarts
  6. 4.4.5 清除变量内容
  7. Camera 初始化(Preview) 二(HAL3的流程)
  8. 通过企业微信Api向企业微信用户发送消息的实现
  9. 【转】【信息学奥赛一本通】题解目录
  10. 用例图之参与者、用例间的四种关系
  11. Cesium中获取坐标点地形高程的方法
  12. mysql 内置函数大全 mysql内置函数大全
  13. 【转】为什么SPSS的日期要以1582年10月14日为基准
  14. 通用样式 -表格的每行的复选框选中打印,清除已勾选
  15. 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......
  16. 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
  17. wincc按钮控制的vb脚本_VB操作wincc脚本心得
  18. Python—SVD分解压缩图片
  19. 计算机学院早操规定,数学和计算机学院学生会体育部早操管理制度.doc
  20. PHP生成一个不重复的会员号,php生成一个不重复的会员号

热门文章

  1. Win32控制台应用程序如何调用另一个.exe
  2. android 图片裁剪库,(译)uCrop介绍 —— 我们自己的Android图片裁剪库
  3. 日常生活收缩毛孔几个小妙招 - 生活至上,美容至尚!
  4. 关于GCC属性中的弱符号(weak symbol)
  5. 【历史上的今天】3 月 29 日:“机器人三定律”问世;电脑动画首次获得奥斯卡;Caldera Linux 沉浮史
  6. C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园
  7. 安装TypeScript
  8. 2018年8月27日英语学习
  9. 与rasp的初次心动
  10. 基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程