迁移学习广泛地应用于NLP、CV等各种领域,通过在源域数据上学习知识,再迁移到下游其他目标任务上,提升目标任务上的效果。其中,Pretrain-Finetune(预训练+精调)模式是最为常见的一种迁移学习方法。例如NLP中的预训练Bert模型,通过在下游任务上Finetune即可取得比直接使用下游数据任务从零训练的效果要好得多。

虽然在预训练模型上Finetune能取得非常好的效果,我们经常使用Finetune方法,但是你是否有想过这种Finetune方法有没有什么优化方法?如何Finetune对最终效果好坏有非常大的影响。例如,在Finetune时我们会考虑要迁移预训练网络的哪些层,哪些层需要冻结,哪些层需要随着模型一起Finetune。实际应用时,我们往往需要尝试不同的迁移方法和Finetune策略来达到最优效果。目前学术界也有很多创新性较强的花式Finetune方法研究。

1:使用Pretrain模型做约束

在Finetune阶段,如果我们可用于Finetune的目标任务数据量较少时,很有可能出现过拟合现象,严重影响模型效果;或者在Finetune过程中出现知识遗忘问题(catastrophic memory),把Pretrain阶段学到的有用知识遗忘,丢了西瓜捡了芝麻。为了解决这种问题,学术界提出利用Pretrain模型作为约束,指导Finetune的过程,让Finetune得到的模型更加鲁棒。具体包括:直接使用Pretrain模型的参数作为约束、使用Pretrain模型的中间层表示作为约束、使用Pretrain模型对不同特征注意力强度作为约束。

为了防止模型在Finetune阶段过拟合目标任务数据,或忘记了Pretrain阶段学到的有意义知识,Explicit inductive bias for transfer learning with convolutional networks(ICML 2018)这篇文章介绍了一种使用Pretrain模型参数约束Finetune过程的方法:通过添加Pretrain模型参数和Finetune模型参数之间的某种正则化损失,让Finetune后的模型参数和最开始的Pretrain模型参数更加相似。文章中尝试了多种正则化方法,通过最终的实验发现,一个简单的L2正则效果最好,即对于Pretrain模型和Finetune模型的对应层的参数计算L2距离,作为Finetune过程中损失函数的一部分,公式如下(w为Finetune参数,w0位Pretrain参数):

2:选择性地对Pretrain模型迁移

Pretrain模型中的参数不一定都是对下游任务有帮助的,因此一些研究提出,对Pretrain的模型进行有选择性的迁移,重点迁移那些对下游任务帮助大的信息。Learning What and Where to Transfer(ICML 2019)中提出一种基于meta-learning的迁移学习方法。这篇文章的核心思路建立在FITNETS: HINTS FOR THIN DEEP NETS(ICLR 2015)一文提出的迁移方法之上,让Target模型通过一个回归任务拟合Pretrain模型中间层的表示

3:在Finetune阶段调整网络结构

之前介绍的迁移学习方法,大多数都是通过Finetune对Pretrain模型的参数进行调整。然而,下游的Target任务可能需要和Source任务采用不同的模型结构来更好的进行学习。因此,TransTailor: Pruning the Pre-trained Model for Improved Transfer Learning(AAAI 2021)提出了一种在Finetune阶段动态剪枝的方法,实现Finetune阶段不仅能够调整模型参数,还能调整模型网络结构。该方法分为Target-aware Pruning和Importance-aware Finetuning两个阶段。在Target-aware Pruning阶段,对于网络中每一层的每一个filter,都对应一个可学习的权重,把Pretrain模型的参数Freeze住,使用Target任务的数据和优化目标进行训练,得到每组参数最终对应的权重

4:学习每组参数Transfer的方式

在利用Pretrain模型进行迁移学习时,我们往往需要决定哪些网络的参数要Freeze,哪些网络参数跟随Target任务Finetune。例如,在CV领域,一些研究表明底层网络能够提取出更一般的图像规律,而接近分类层的参数对于不同Task差异很大,因此为了不将Pretrain阶段学到的知识破坏,将底层参数Freeze,只Finetune上层参数,会最大限度保留Pretrain阶段在大量数据学到的知识,提升迁移学习效果。然而,不同任务需要Freeze的参数存在差异,人工调试不同的Transfer方式(哪些层Freeze、哪些层Finetune)效率很低。同时,一般的Finetune假设每个Target样本都应该使用相同的Finetune方式,这也是不合理的。

模型微调迁移学习Finetune方法大全相关推荐

  1. NLP(二)文本生成 --VAE与GAN模型和迁移学习

    NLP(二)文本生成 --VAE与GAN模型和迁移学习 VAE与GAN模型和迁移学习 1. Auto Encoder 自编码器 1.1 结构 1.2 核心思想 1.3 损失函数 1.4 Denoisi ...

  2. 平潭迁移库是什么意思_迁移学习》第四章总结---基于模型的迁移学习

    基于模型的迁移学习可以简单理解为就是基于模型参数的迁移学习,如何使我们构建的模型可以学习到域之间的通用知识. 1. 基于共享模型成分的迁移学习 在模型中添加先验知识. 1.1 利用高斯过程的迁移学习 ...

  3. 深度学习技巧应用6-神经网络中模型冻结-迁移学习技巧

    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用6-神经网络中模型冻结:迁移学习的技巧,迁移学习中的部分模型冻结是一种利用预训练模型来解决新问题的技巧,是计算机视觉,自然语言处理等任务里面最重 ...

  4. 迁移学习——Fine-tune

    迁移学习背景: 在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研 ...

  5. 深度学习常见名词概念:Sota、Benchmark、Baseline、端到端模型、迁移学习等的定义

    深度学习:Sota的定义 Sota The end to end(非端到端模型) End to end(端到端模型) Benchmark.Baseline 并发.并行.串行 迁移学习 微调 进程.线程 ...

  6. Pytorch实现CNN模型的迁移学习——蜜蜂和蚂蚁图片分类项目

    很多时候当训练一个新的图像分类任务时,一般不会完全从一个随机的模型开始训练,而是利用预训练的模型来加速训练的过程.经常使用在ImageNet上的预训练模型. 这是一种transfer learning ...

  7. 【Inception-v3模型】迁移学习 实战训练 花朵种类识别

    参考博客:[TensorFlow]迁移学习(使用Inception-v3),非常感谢这个博主的这篇博客,我这篇博客的框架来自于这位博主,然后我针对评论区的问题以及自己的实践增加了一些内容以及解答. g ...

  8. 基于ResNET50模型进行迁移学习构建中药饮片分类Web App

    本文主要介绍如何利用深度学习迁移方法进行中药分类的设计的过程 1.数据采集 大量有效的中药图片是宝贵的资源,采用自己拍照的方式收集非常耗时,可以从借助搜索引擎从网络抓取中药材图片,方法如下 (1)安装 ...

  9. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

最新文章

  1. 我是如何组织“算法刻意练习活动”的?
  2. 趋势科技全球首席安全官ED:人类迈向智能社会进程中不能失去掌控力
  3. OpenGL shader normals法线贴图的实例
  4. 结合Selenium 和 Requests完成动态数据爬取
  5. Asp.Net Core Docker镜像更新系统从wheezy改为stretch
  6. 云开发数据库VS传统数据库丨云开发101
  7. 图解算法学习笔记(七):狄克斯特拉算法
  8. 回文质数(洛谷-P1217)
  9. 贵阳学python_python学习类
  10. ElasticSearch使用学习
  11. CodeBlocks 20.3无法编译C++文件
  12. Flutter 最佳扫码插件
  13. mybatis 整合spring之mapperLocations配置的问题
  14. openwrt配置文件选项 /etc/config/wireless
  15. 网易云音乐.uc格式的缓存文件转.mp3
  16. FCM聚类与K-means聚类的分析比较
  17. 【简单】唯一摩尔斯密码词
  18. C++中关于DWORD
  19. 软考初级程序员上午单选题(15)
  20. C++57个入门知识点_50 菱形继承与虚继承(C++中语法允许多重继承造成菱形继承;会造成近亲结婚的问题;可以通过虚继承的方式解决;实际项目中不多用多重继承)

热门文章

  1. [转载] 张子阳 --- C# 中的委托和事件
  2. android+3d引擎,基于Android系统3D引擎的设计与实现
  3. 超越影像——RSNA 2016参展随感 (三.完结)
  4. 使用GIT提交代码流程
  5. java自定义findbugs规则_findbugs自定义规则并配置实现检测
  6. Android底层开发(1)
  7. 《厉害了,我的国》观后感
  8. 他放弃高薪工作做起村官,带领岫云村品牌扎根大都市
  9. 佛山考勤机 佛山考勤系统开发商
  10. 多线程基本----学而时习之