迁移学习 – 李沐

1、什么是迁移学习

可以在一项任务上学习模型,然后用于解决其他相关任务。
迁移学习的方法
a.做好一个模型将其做成一个特征提取的模块

  • Word2Vec-在文本上做训练一个单层神经网络,在训练好之后,每一个词对应一个特征,然后用这个特征去别的事情;
  • ResNet-对图片做特征,然后用这个特征来对作为另一个模型的输入,这样假设效果非常好,那么就可以代替人工去抽取特征;
  • I3D-用来对视频做特征
    b、在一个相关的任务上训练一个模型,然后在另一个任务上直接用它
    c、训练好一个模型,然后在一个新的任务上对其做微调,使模型能更好的适应新的任务;

2、在计算机视觉中应用

  • 训练一个模型,然后在新任务上对其进行微调,使模型更好地适应新任务;
  • 在CV的迁移学习,我们是希望存在很多数据的一些应用上比较好的模型,能将它的知识拓展到我们自己的任务上去;
  • 通常任务数据集会比大的数据集(ImageNet)要小很多(一开始不会花太多钱去标注很多的数据,标好了一些看看模型效果怎么样,好的话再继续投入进去,这样是一个迭代的过程),想要快速的迭代,看看能不能用比较大的数据集来将一些学到的东西迁移到我们自己的任务上面去。

3、预训练模型

  • 神经网络分为两部分,一是编码器,用于特征提取,主要目的是将原始像素转换为语义空间中一些线性可分的特征;另一个是解码器,主要是线性分类器,将编码器表示映射到想要的符号,或者做一些决策;
  • 预训练模型:在比较大的数据集上训练模型,模型会有一定的泛化能力(在新模型或新数据集上,模型仍然有效)。该模型目前主要用于图像分类,但也可用于物体检测

4、微调

  • 将预训练好的模型用于新的任务上叫做fine-tuning(微调),通常在深度学习中,微调可以带来最好的效果,但是也有一定的开销。
    微调如何做的(how)
  • 在新任务上构建新模型,新模型架构与预训练模型的架构相同;
  • 找到合适的预训练模型后,我们需要初始化我们的模型,将预训练模型(最后一层除外)的权重复制到新模型中,**即预训练模型可以作为特征提取器; ** 最后一层解码器仍然是随机权重(标签与预训练模型的标签不同)
  • 初始化后,开始学习
  • 小技巧,微调后限制学习率,限制学习率可以让我们不至于走得太远,并且可以达到限制搜索空间的目的;

5、限制搜索空间的其他方法-固定最底层

  • 神经网络是一种层次结构。底层一般学习底层的特征,上层与语义相关;底层和上层关系不大。
  • 最后一层是随机初始化学习,只对某一些层进行改动,最下面的层在微调时候就不改动,学习率为0;
  • 固定层数根据应用进行分析。如果应用程序和预训练模型的差异比较大,可以多训练一层。

6、如何去找微调模型

  • 首先,我们需要找到我们想要的预训练模型,然后看看它是在什么样的数据集上训练的
  • 大大地
  • Tensorflow Hub—–https://tfhub.dev/ 允许用户去提交模型
  • TIMM ——把pytorch上能找到的各种代码实现弄过来

7、微调的一些应用

  • 在大的数据集上训练好模型在微调到自己应用的CV领域上广泛的应用;
  • 新任务包括对象检测、语义分割
  • 目前的观点是fine-tuning加速收敛,**fine-tuning让初始点不再是随机点而是更接近最终目标的点,使得loss更平滑,**但不一定能提高准确率,因为微调只是改变初始值。从机的初始化没有区别。只要走得够远,就可以摆脱初始值的影响。

8、总结

  • 通常我们在大数据上训练预训练模型,而这个任务通常是图像分类;
  • 将模型的权重初始化为预训练模型在求解任务上的权重,最后一层(解码器)随机初始化;
  • Fine-tuning一般使用比较小的学习率来做小的调整,通常会加速收敛,提高准确率但不会变差。

参考内容

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年3月18日
下一篇 2022年3月18日

相关推荐