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

简介:  迁移学习就是能在一个任务上学习一个模型,然后用其来解决相关的别的任务,这样我们在一个地方花的时间,学习的一些知识,研究的一些看法可以在另外一个地方被使用到; 例如,如果你已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那些知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习。

11.1 迁移学习


1. 迁移学习是什么?


 迁移学习就是能在一个任务上学习一个模型,然后用其来解决相关的别的任务,这样我们在一个地方花的时间,学习的一些知识,研究的一些看法可以在另外一个地方被使用到; 例如,如果你已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那些知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习。假设你已经训练好一个图像识别神经网络,所以你首先用一个神经网络,并在(x,y)对上训练,其中x是图像,y是某些对象,图像是猫、狗、鸟或其他东西。如果你把这个神经网络拿来,然后让它适应或者说迁移,在不同任务中学到的知识,比如放射科诊断,就是说阅读X射线扫描图。你可以做的是把神经网络最后的输出层拿走,就把它删掉,还有进入到最后一层的权重删掉,然后为最后一层重新赋予随机权重,然后让它在放射诊断数据上训练。迁移学习在深度学习领域应用非常的广泛,因为在深度学习中需要训练很多的深层神经网络,需要很多的数据,代价也很高。


5f4b38c8d61b4f789c478b63714b8800.png


2. 迁移学习的途径:


1.做好一个模型将其做成一个特征提取的模块,例如Word2Vec在文本上做训练一个单层神经网络,在训练好之后,每一个词对应一个特征,然后用这个特征去别的事情。ResNet则是对图片做特征,然后用这个特征来对作为另一个模型的输入,这样假设效果非常好,那么就可以代替人工去抽取特征,而I3D则是用来对视频做特征。


2.在一个相关的任务上训练一个模型,然后在另一个任务上直接用它。


3.训练好一个模型,然后在一个新的任务上对其做微调,使模型能更好的适应新的任务;


3. 相关的领域:


1.半监督学习:利用没有标号的数据,让有标号的数据变得好


2.在极端的条件下,可以做zero-shot,即每一个任务有很多的类别,但是我任何样本都不告诉你,让你预测;或采用few-shot,一个任务就给你一些对应的样本。


3.Multi-task learning:每一个任务都有它自己的数据,但是数据不是很够,可是任务之间相关,那么可以将所有的数据放在一起,然后同时训练多个任务出来,这样我们希望能从别的任务之中获益


12bd19dcb2ed4db295e78bb793f1af4d.png


4.迁移学习在计算机视觉领域:


 不管是共有数据还是私有数据,在图片分类领域中存在了很多大规模标好的数据集。把迁移学习应用到CV领域,我们可以把存一些有很多数在应用上比较好的模型,让它的知识拓展到我们自己的对应的任务上去。因为我们自己任务的数据集会比大的数据集要小很多,然后我们想要快速的迭代,看看能不能用比较大的数据集来将一些学到的东西迁移到我们自己的任务上面去。经典规则是:“如果你有一个小数据集,就只训练输出层前的最后一层,或者也许是最后一两层。但是如果你有很多数据,那么也许你可以重新训练网络中的所有参数。


5.预训练(Pre-train):


 在一个比较大的数据上训练好的一个模型,会具有一定的泛化能力,也就是说把这个已经训练好的模型(权重)放到新模型上或新的数据集上,这个模型还是有效果的,比如在图片分类预训练好的模型也可以用来试试目标检测 。


aebbecf25f9f4c7abd29e36f9b3a9aff.png


6.微调(Fine-tuning):


 把预训练好的模型用在新任务上叫Fine-tuning(微调)。即在新的任务上构建一个新的模型,新的模型的架构要更预训练的模型的架构是一样的;在找到合适的预训练模型之后要初始化我们的模型,我们将预训练模型的除了最后一层(图中的Output layer)之外的权重(图中的Layer1~N)都复制给我们的模型,最后一层(图中的Output layer)的解码器用的还是随机的权重。


 在初始化之后,就可以开始学习了,但是有一个小tips:我们要限制Fine-tuning的学习率。因为我们初始的结果已经比较好了,已经在想要解的附近了,限制学习率可以使得我们可以不会走太远,一般是用1e-3(0.001);另外是说不要训练太长的时间,把数据扫个10/50遍,这些做法是为了缩小搜索空间。


87eb84967c5748e995800c1f6707289d.png


7.限制搜索空间(不要训练太多epoch):


 限制搜索空间方法—固定最底层:神经网络是层次化的,最底层一般是学习了底层的特征,上层的更与语义相关,一般来说底层与上面层没有太多的关系,在换了数据集之后泛化性都很好。最后一层(Output layer)还是随机初始化学习,然后只对某一些层进行改动,最下面那些层在微调时基本不在改动,即学习率为0。固定住多少层是要根据应用来看的,假设应用与预训练模型差别比较大的话,可以多训练一些层。


86a8f4e596704916a17a8655e393812f.png


8.寻找预训练模型:


 Tensorflow Hub: https://tfhub.dev/

TIMM(一位小哥把pytorch上能找到的各种代码实现弄过来):

 https://github.com/rwightman/pytorch-image-models

c8140ce46a9b449fb1e48dd885621414.png


9.Fine-tuning应用:


 在大的数据集上训练好模型再微调到自己的应用上在CV领域上广泛的应用。新的任务包含目标检测、语义分割等(图片类似但是目标不一样),在医疗领域等(同样的任务但是图片大相径庭),现在的观点是微调加速了收敛(微调让初始的点不再试一个随机的点而是一个离最终的目标比较近的点,使得损失比较平滑),但是不一定可以提升精度(一般不会让精度变低,因为它只是改变初始值而已,跟随机初始化没区别,只要走的足够远也能摆脱初始值的影响)。


 比如你用100张图训练图像识别系统,然后有100甚至1000张图用于训练X光片诊断系统,人们可能会想,为了提升X光片诊诊断的性能,假设你真的希望这个X光片诊诊断系统做得好,那么用X光片诊图像训练可能比使用猫和狗的图像更有价值,所以这里(100甚至1000张图用于训练X光片诊诊断系统)的每个样本价值比这里(100张图训练图像识别系统)要大得多,至少就建立性能良好的X光片诊系统而言是这样。所以,如果你的X光片诊断数据更多,那么你这100张猫猫狗狗或者随机物体的图片肯定不会有太大帮助,因为来自猫狗识别任务中,每一张图的价值肯定不如一张X射线扫描图有价值,对于建立良好的X光片诊诊断系统而言是这样。所以,这是其中一个例子,说明迁移学习可能不会有害,但也别指望这么做可以带来有意义的增益。


总结:


1.如果你想从任务A学习模型并迁移一些知识到任务B中,那么当任务A和任务B都有同样的输入x时,迁移学习是有意义的。比如,A和B的输入都是图像,或者两者输入都是音频。


2.此外,当任务A的数据远远大于任务B时,迁移学习才有帮助。如果你希望提高任务B的性能,但是任务B可以训练的数据有比较少,但是任务A的数据比任务B的大得多,因为任务A里单个样本的价值没有比任务B单个样本价值大。


3.其次如果任务A的一些低层次特征,可以帮助任务B的学习,那么迁移学习也是有意义的。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
87 1
|
3月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
67 7
|
3月前
|
机器学习/深度学习 运维 算法
【阿里天池-医学影像报告异常检测】3 机器学习模型训练及集成学习Baseline开源
本文介绍了一个基于XGBoost、LightGBM和逻辑回归的集成学习模型,用于医学影像报告异常检测任务,并公开了达到0.83+准确率的基线代码。
69 9
|
3月前
|
机器学习/深度学习
【机器学习】模型融合Ensemble和集成学习Stacking的实现
文章介绍了使用mlxtend和lightgbm库中的分类器,如EnsembleVoteClassifier和StackingClassifier,以及sklearn库中的SVC、KNeighborsClassifier等进行模型集成的方法。
55 1
|
5月前
|
机器学习/深度学习 人工智能 算法
GitHub星标破千!斯坦福大学的284个机器学习小抄(漫画中文版)
说到人工智能必然要了解机器学习,从信息化软件,到电子商务,然后到高速发展互联网时代,到至今的云计算、大数据等,渗透到我们的生活、工作之中,在互联网的驱动下,人们更清晰的认识和使用数据,不仅仅是数据统计、分析,我们还强调数据挖掘、预测。 机器学习就是对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。 机器学习的核心是”使用算法解析数据,从中学习,然后对新数据作出决定或预测”。也就是说计算机利用已获取的数据得出某一模型,然后利用此模型进行预测的一种方法,这个过程跟人的学习过程有些类似,比如人获取一定的经验,可以对新问题进行预测。
GitHub星标破千!斯坦福大学的284个机器学习小抄(漫画中文版)
|
3月前
|
机器学习/深度学习 人工智能 算法
AI人工智能(ArtificialIntelligence,AI)、 机器学习(MachineLearning,ML)、 深度学习(DeepLearning,DL) 学习路径及推荐书籍
AI人工智能(ArtificialIntelligence,AI)、 机器学习(MachineLearning,ML)、 深度学习(DeepLearning,DL) 学习路径及推荐书籍
129 0
|
4月前
|
机器学习/深度学习 算法 前端开发
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
|
4月前
|
机器学习/深度学习 人工智能 缓存
人工智能平台PAI使用问题之如何配置学习任务
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5月前
|
机器学习/深度学习 算法 前端开发
机器学习中的集成学习(二)
**集成学习概述** 集成学习通过结合多个弱学习器创建强学习器,如Bagging(Bootstrap Aggregating)和Boosting。Bagging通过随机采样产生训练集,训练多个弱模型,然后平均(回归)或投票(分类)得出结果,减少方差和过拟合。Boosting则是迭代过程,每个弱学习器专注于难分类样本,逐步调整样本权重,形成加权平均的强学习器。典型算法有AdaBoost、GBDT、XGBoost等。两者区别在于,Bagging模型并行训练且独立,而Boosting模型间有依赖,重视错误分类。