了解“预训练-微调”,看这一篇就够了

博文视点 博文视点     2022-11-29     378

关键词:

预训练-微调方法指的是首先在大数据集上训练得到一个具有强泛化能力的模型(预训练模型),然后在下游任务上进行微调的过程。

预训练-微调方法属于基于模型的迁移方法(Parameter/Model-based TransferLearning)。

该大类方法旨在从源域和目标域中找到它们之间共享的参数信息以实现迁移。

此迁移方式要求的假设条件是:源域中的数据与目标域中的数据可以共享一些模型的参数。

下图形象地表示了基于模型的迁移学习方法的基本思想。

预训练-微调的模式为何重要

因为其他任务上训练好的模型可能并不完全适用于自己的任务:可能上游训练数据与下游数据不服从同一个分布;可能已有的预训练网络较复杂、而我们的任务比较简单,等等。

例如,对训练一个猫狗图像二分类的神经网络最有参考价值的便是在CIFAR-100上训练好的神经网络。

然而,CIFAR-100 有100个类别,此任务只需2个类别。此时便需要针对自己的任务固定原始网络的相关层且修改网络的输出层,以使结果更符合我们的需要。

综上,微调具有如下优势:

不需要针对新任务从头开始训练网络,节省了时间成本;

预训练好的模型通常都是在大数据集上进行的,无形中扩充了我们的训练数据,使得模型更鲁棒、泛化能力更好;

微调实现简单,使我们只关注自己的任务即可。

一些学者着眼于重新思考预训练模型的有效性。何恺明等人发表于ICCV2019 的工作就对计算机视觉领域的ImageNet 预训练进行了大量的实验。他们通过实验得到结论:在相同的任务上,预训练模型与从头开始训练(Train fromscratch)相比,大大缩短了训练时间且加快了训练的收敛速度。在结果的提升上,他们的结论是,预训练模型只会对最终的结果有着微小的提升。

另一项工作则深入思考了预训练模型对于迁移任务的作用并得出以下结论:

在大型数据集(如ImageNet)上,预训练的性能决定了下游迁移任务的下限,即预训练模型可以作为后续任务的基准模型;

在细粒度(Fine-grained)任务上,预训练模型无法显著提高最终的结果;

与随机初始化相比,当训练数据集显著增加时预训练带来的提升会越来越小。即当训练数据较少时预训练能够带来较为显著的性能提升。

另一些学者则在模型的鲁棒性等方面继续探索预训练模型带来的提升。Using pre-training can improve model robustness and uncertainty做了一系列预训练模型的实验,最终认为预训练模型可以在以下场景中提高模型的鲁棒性:

对于标签损坏(Label Corruption)的情况,即噪声数据,预训练模型可以提高最终结果的AUC(Area Under Curve);

对于类别不均衡任务,预训练模型提高了最终结果的准确性;

对于对抗扰动(Adversarial Perturbation)的情况,预训练模型可以提高最终结果的准确性;

对于不同分布的数据(Out-of-distribution),预训练模型带来了巨大的效果提升;

对于校准(Calibration)任务,预训练模型同样能提升结果置信度。

预训练-微调的应用

预训练模型已经在计算机视觉、自然语言处理和语音识别等任务上得到了广泛的应用。

预训练模型可以获得大量任务的通用表现特征,那么能否直接将预训练模型作为特征提取器,从新任务中提取特征从而可以进行后续的迁移学习呢?

这种方法类似于从一个强大的模型中提取特征表达嵌入(Embedding),继而利用这些特征开展进一步的工作。

例如,计算机视觉中著名的DeCAF方法就为视觉任务提供了一种从预训练模型中提取高级特征的通用方法。在小样本学习中,特征嵌入+ 模型构建的两阶段方法在近年来取得了不错的效果。

这促使我们重新思考预训练模型的使用方法:如果将从源域数据中学到的模型在目标域上直接提取特征,然后利用源域和目标域的特征构建模型,能否取得更好的效果?

令人惊奇的是,通过深度网络提取的特征配合传统机器学习方法在领域自适应任务上竟然可以取得比端到端的深度迁移学习更好的结果。

Wang等人提出了一种叫做EasyTL(Easy Transfer Learning)的迁移方法。该方法首先利用在有标记源域数据上微调的预训练模型分别在源域和目标域上提取有表现力的高阶特征,然后基于这些提取好的特征进行后续的特征变换和简单的分类器构建。

令人欣喜的是,尽管EasyTL 方法并未涉及相对重量级的深度迁移策略,却在当时取得了很好的效果。例如,EasyTL 方法采用基于ImageNet数据集预训练的ResNet-50 网络进行特征提取,取得了比绝大多数基于ResNet进行深度迁移的方法更好的效果,如下图所示。

我们给出深度学习中可能的预训练模型的应用方法:

用法1:预训练网络直接应用于新任务;

用法2:预训练-微调,此即使用最广泛的方法;

用法3:预训练网络充当新任务的特征提取器,例如DeCAF等;

用法4:预训练提取特征加分类器构建,以专注于利用高阶特征来构建后续的分类器。

以上内容出自《迁移学习导论(第2版)》,更多相关内容欢迎阅读此书。

本书第1版一经上市便引起极大反响,好评如潮。


在第2版中,作者们基于初版读者的反馈对初版进行了大刀阔斧的修改:添加了新的内容、调整了内容结构使其更易阅读、加入了新的应用实践代码使其更易上手、重新整理修改了所有代码从而保证了可复现性。

新版升级了哪些内容?

首先,第2版包含了第1版的所有内容。

其次,在此基础上,经过众多读者火眼金睛的审视,作者听取建议、不断修改,打磨出了更好的结构、更多的升级内容。

新增:“安全和鲁棒的迁移学习”一章,包括安全迁移学习、无需源数据的迁移学习等新主题和联邦学习等更丰富的内容,在新版第12 章;

新增:“复杂环境中的迁移学习”一章,包括类别非均衡的迁移学习、多源迁移学习等内容,在新版第13 章;

新增:“低资源学习”一章,包括新增的迁移学习模型压缩、半监督学习、自监督学习等主题,并修改了初版“元学习”一章的内容,在新版第14 章;

新增:迁移学习在计算机视觉、自然语言处理、语音识别、行为识别、医疗健康五个方面的代码实践,在新版第15 章至第19 章。

新增:迁移学习模型选择,在新版第7 章;

新增:迁移学习中的正则,在新版第8 章;

新增:基于最大分类器差异的对抗迁移方法,在新版第10章;

新增:更全面的领域泛化的方法,在新版第11 章;

新增:领域泛化的理论介绍,在新版第11 章;

调整:全新整理的每章代码和数据集仓库,更好地上手实践复现;

调整:将初版的第2 章、第3 章、第4 章部分内容合并为一章,在新版第2 章;

调整:将初版的第15 章调整到第1 章的应用部分;

调整:将初版第4 章“迁移学习理论”部分与第14 章“迁移学习模型选择”部分合并为一章,在新版第7 章;

调整:为方便参考,将每章的参考文献单独放在章节之后;

修改:修改了所有之前的内容表述和存在的错误。

因此,第2版可以完全取代第1版。

[转]关于深度学习,看这一篇就够了

关于深度学习,看这一篇就够了原文地址:http://www.dlworld.cn/XueXiSuanFa/13.html[日期:2016-04-26]来源:36氪 作者:[字体:大 中 小]    编者按:本文作者王川,投资人,中科大少年班校友,现居加州硅谷,个人微信号... 查看详情

elasticsearch入门,看这一篇就够了(代码片段)

Elasticsearch入门,看这一篇就够了前言可视化工具kibanakibana的安装kibana配置kibana的启动Elasticsearch入门操作操作index创建index索引别名有什么用删除索引查询索引exist索引操作document插入document查询document删除document更新document使用... 查看详情

json入门看这一篇就够了

什么是JSONJSON:JavaScriptObjectNotation【JavaScript对象表示法】JSON是存储和交换文本信息的语法。类似XML。JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言S为什么需要JSON提到JSON,我们就应该和XML来进行对... 查看详情

json格式对象该怎么传?看这一篇就够了!

一、List<Map>一般会使用在SQL语句的返回结果上代码如下:@Query(value="selectuser_name,user_agefromsys_userwheredept_id=?,nativeQuery=true)List<Map>findUserInfoById(LongdeptId);根据部门的ID查 查看详情

java中的多线程你只要看这一篇就够了

 https://www.cnblogs.com/wxd0108/p/5479442.html  查看详情

jetpackworkmanager看这一篇就够了~

前言最近有读者反馈,在我的新书​​《AndroidJetpack开发:原理解析与应用实战》​​中并没有提及到WorkManager,这是因为目前这个东西在国内并不是很好用。最近因为工作需要正好研究了下,也作为补充章节分享给读者。什么... 查看详情

[建议速看]学习python的小白了解python看这一篇就够了!

编程语言在国内已经快速发展几十年了,从最初的汇编,C语言到如今的python,无不印证着软件行业发展的一个大趋势,高度集成化的编程语言在未来将是一种大趋势,科技进步的基础都是基于前面大量的积累... 查看详情

架构整洁之道,看这一篇就够了!(代码片段)

...个人的独到见解,而且用一张详细的知识脉络图帮助大家了解整本书的精华。如果你读过这本书,可以将本文当做一次思想交流,如果你还没看过这本书,更要阅读这篇文章,相信你会得到不同于以往的 查看详情

handler看这一篇就够了(代码片段)

Handler使用首先来熟悉一下Handler的四种使用方式,如果比较熟悉可以直接跳过:通过sendMessage消息机制来发送sendEmptyMessage(int);//发送一个空的消息sendMessage(Message);//发送消息,消息中可以携带参数sendMessageAtTime(Message,long... 查看详情

javanio看这一篇就够了

原文链接:https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCeV9w?现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前篇文章... 查看详情

@override看这一篇就够了

一、是什么一句话:它是表示重写的注解@Override注解是伪代码,用于表示被标注的方法是一个重写方法。不写也完全可以,但强烈建议写上! 二、为什么用既然不写@Override也可以重写父类的方法,那为什么非要“多此一... 查看详情

java集合,看这一篇就够了

Java集合是java.util下特别有用的工具类,大致分为2个系列:Collection接;口和Map接口派生的。按体系分,则分为四种1. List:有序重复的集合;2.Set:无序不重复的集合3.Map:有映射关系的集合(key-value)4.Queue:代表队列集合的实现(JDK5... 查看详情

最全排序算法及优化,看这一篇就够了(代码片段)

最全排序算法总结看这一篇就够了没有经过总结的知识是沉重的,无用的瞧一瞧~博健的LeetCode题解:Gitbook版本传送门博健的LeetCode题解:CSDN传送门有趣的CSS:Gitbook传送门前端进阶笔记:Gitbook传送门目录... 查看详情

typescript与javascript的区别(typescript万字基础入门,了解ts,看这一篇就够了)(代码片段)

TypeScript是JavaScript的一个超集,支持ECMAScript6标准(ES6教程)。TypeScript由微软开发的自由和开源的编程语言。TypeScript设计目标是开发大型应用,它可以编译成纯JavaScript,编译出来的JavaScript可以运行在任何浏览... 查看详情

关于反爬虫,看这一篇就够了

编者:本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击视频回放,“现场”围观段子手攻城狮大崔,如何高智商&高情商地完美碾压爬虫。。。关... 查看详情

关于反爬虫,看这一篇就够了(转)

https://segmentfault.com/a/1190000005840672者:本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击视频回放,“现场”围观段子手攻城狮大崔,如何高智商&高情商地... 查看详情

java集合看这一篇就够了

大家好,这里是《齐姐聊数据结构》系列之大集合。话不多说,直接上图:Java集合,也称作容器,主要是由两大接口(Interface)派生出来的:Collection和Map顾名思义,容器就是用来存放数据的。那么这两大接口的不同之处在于:Colle... 查看详情

java注解看这一篇就够了

注解1.概念注解:说明程序的。给计算机看的注释:用文字描述程序的。给程序员看的注解的定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次... 查看详情