11.1 迁移学习【斯坦福21秋季:实用机器学习中文版】

本节课程课件: 课件 自己做的思维导图: 导图

迁移学习的出发点

2022-07-23T170422 - 在一个任务上学习到的知识,可以在另外一个地方用到

  • 因为训练要花钱,还要搞数据集

途径

  • 训练好的模型做成特征抽取的模块,得到特征干别的事情,比如作为另外一个模型的输入

  • 在相关的任务上训练一个模型,在另外一个任务上直接用,例如GPT系列

  • 在训练好的模型上,针对新的任务进行微调(本节内容)

相关领域

  • 半监督学习

  • 极端情况下,新的任务,不给标记;或者只给几张有标记

  • 多任务学习,每一个任务都有自己的数据但不是很够,但任务之间又有相关性

转移知识

2022-07-23T170442 - 有很多大规模的标好的数据集,尤其是图片分类任务上(因为标记很容易)

  • 计算机视觉的迁移学习里面,存在很多效果比较好的模型,希望把这些模型的知识拓展到自己的任务上去

    • 刚开始进行任务的时候可能不会投入太多,看能不能利用别人在标记好的、比自己的数据集大10倍,100倍的数据集上面学到的一些东西迁移过来,试试效果

预训练模型

2022-07-23T170457 - 用的最多的迁移学习的方法

  • 一般来说,一个神经网络大概分为两块

    • 编码器

      • 可以认为是特征提取器
      • 将像素转化为在语义空间里面线性可分的一些特征(浅表示)
    • 解码器

      • 可能就是个线性层
      • 把编码器的输出映射为最终结果,做决策
    • 例如

      • 给个猫的图片
      • 可以认为除了最后一层之外的,都是编码器
      • 最后一层把语义特征(如1024的特征向量),转化为语义空间内的表示
      • 也可以认为最后几层都是解码器,剩下的是编码器
  • 预训练模型

    • 在比较大的数据集上训练好的一个模型

    • 训练的数据集大,可以认为其有一定的泛化能力

      • 泛化能力指,放到别的任务或者数据集上,多多少少也是能帮点忙
      • 虽然目标任务可能不会对猫感兴趣,但是编码器部分多多少少学会了点怎么样去处理像素的信息
      • 在ImageNet上训练的模型,能对其他任务的图片做特征提取,总比从随机开始好

Fine-Tune技巧

2022-07-23T170538 - 通常认为,在深度学习中微调能够带来最好的效果

  • 在新的任务上面,构建一个新的模型,其架构要与预训练模型一样

    • 如一个在ImageNet上训练好的ResNet 50模型
    • 在新的任务上面,也要用一个ResNet 50模型(可以先找找在当前任务的特定架构上是不是有比较好的预训练模型)
  • 初始化模型

    • 新模型的特征提取器(编码器)的权重直接从预训练模型得到

    • 解码器的权重随机初始化

      • 不同任务的语义空间不同
    • 例如图中右侧的例子

  • 在限制搜索空间,进行训练

    • 因为之前效果已经比较好了,已经在最优解附近了

    • 要把学习率调的小

      • 例如正常是0.1,现在要用1e-3
    • epoch数要小

    • 例如

      • 不做特别的限制的话,不管是fine-tune还是随机初始化整个网络,在足够长的时间下,网络都会达到一个特定的程度,但这个程度并非是最佳状态
      • 泛化误差和训练误差是不一样的
      • 在数据集不大且网络足够复杂的情况下,网络是可以记住整个数据集的
      • 训练误差最低的时候,泛化误差不一定更好
      • 在完全拟合自己的数据和保留在大数据集上的泛化能力之间,做一个权衡

冻结底层网络

2022-07-23T170546 - 限制搜索空间的另一种方法

  • 因为神经网络有个比较层次化的学习过程

    • 在最底层学到一些底层的特征的表示,像素底层特征,学习到的纹理是什么形状、颜色的知识

      • 如一个圆圈,图形的边
    • 层数越来越高的时候,多多少少会学到一些更大,更全局的东西,更加跟语义相关

  • 最下面的层在微调的时候不动

    • 例如第0层学习率为0,第1层为1e-8,第二层为1e-7
    • 通常做法,固定住最下面一些层,往上面一些层学习率为1e-3,再往上是1e-1
  • 需要固定多少层是需要调的

    • 若目标任务和预训练模型之间差比较大的话,需要多训练一些层
    • 差异小的话,可以固定更多层,极端情况下甚至可以只允许最后一层进行训练

在哪儿找与训练模型

2022-07-23T170558 - 在微调的时候怎么样找到一个与训练模型,很重要

  • 首先有没有

    • 例如要注重latency的话,找个训练好的MobileNet
  • 其次是考虑在什么样的大数据集上

    • 例如是在ImageNet上训练好的
  • 各种各样的Hub

  • Timm的Hub

Fine-Tune应用

2022-07-23T170622 - 使用在大数据集预训练好的模型,Fine-Tune到自己的任务上,是过去七八年至现在,在CV方面都是一个主流方法

- 目标检测/分割----图片相似但目标不同
- 医学/卫星图像识别----任务相同但图像不同
  • 微调加速了收敛

    • 开始的点不是随机初始化的点,而是比较靠近目标的点
  • 不一定提升精度

    • 预训练的数据集和目标数据集比较像的时候,一般结果会比只在目标数据集上训练好
    • 有时候直接在目标数据集上训练时也会得到一个相似的结果,特别是在目标数据集比较大的情况下
    • 通常不会让精度变得更低,So why not?

总结

2022-07-23T170700 - 通常会在比较大的数据集上训练预训练好的模型

  • 在新的任务上,初始化一个编码器部分的权重和预训练模型权重一样的模型,解码器权重随机初始化

  • 微调通常来说加速收敛,有时会提升精度,但不会使得精度变差

11.1 迁移学习【斯坦福21秋季:实用机器学习中文版】

http://wwg.xyz/cs329p-slides-transfer-learning/

作者

Giles

发布于

2022-07-23

更新于

2022-07-23

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×