实用机器学习笔记二十八:迁移学习
前言:
本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。
迁移学习:
动机:
在一个任务上训练好的模型用在另一个相关任务上
在深度学习领域比较受欢迎,因为训练深度神经网络需要大量的数据以及训练消耗,所以迁移学习可以降低这方面的开销
方法:
特征抽取。比如:Word2Vec, ResNet-50 特征,I3D 特征。使用这些模型进行特性抽取代替人工设计
在一个相关任务上训练一个模型,然后重复利用
在一个预训练好的模型上微调
相关的研究:
半监督学习
在极端情况下,zero-shot(无标签)学习,few-shot(极少标签)学习
多任务学习
预训练模型:
一个神经网络通常可以分为两个部分:
特征抽取器(编码器)把原生数据映射为线性可分的特征
线性分类器(解码器)做决策。比如:做图片分类
编码器和解码器只是抽象的概念,可以把一个神经网络任意划分
什么是预训练模型
在一个大的有足够泛化能力的数据集上训练好的模型。比如:在 ImageNet(基本上都是自然类的图片)训练好的模型
训练好的模型的特征抽取能力在其他方面也有好的泛化性能,比如:
其他数据集。比如:医学图像,卫星图像
其他任务。比如:目标检测等
微调技术:
一般情况下使用微调来做迁移学习,即把预训练好的模型来对新任务做特征抽取,并进一步训练微调来更好的解决新任务。
初始化一个新的模型:
首先要构建一个与预训练模型具有相同架构的神经网络模型。比如:预训练模型的网络架构是 resnet-50,那么针对新的任务构建的模型也应该是 resnet-50 架构。
使用预训练模型的特征抽取器的权重参数来初始化新的模型的特征抽取器的权重。即新的模型的特征抽取器不在随机初始化权重参数。
对新的模型的其他网络层的权重参数进行随机初始化。
进行参数优化,反向传播,更新新的模型的所有层的权重。
使用小的学习率,并且训练更少的轮数,对模型进行训练。
如下图:
Freeze Bottom Layers:
神经网络被认为是有一个层次化学习的过程:
低水平的特征是普遍存在的,泛化能力比较强,比如:线条,边,角,纹理等
高水平的特征是更加接近于标号空间和数据集的特点
可以固定住最底层的某些层使他们的学习率为 0。学习率随着层数的递增而变大,通常是平滑地设置。比如:最底层为 0,往上一点是 1e-8,再往上是 1e-6....
如图所示:
如何找到预训练模型:
Tensorflow Hub:https://tfhub.dev/
应用:
微调预训练模型(在 ImageNet)被广泛的应用于不同的 CV 领域:
检测、分割(相似的图像但是不同的任务)
医学、卫星图片(相同的任务但是是不同的图片)
微调加速了收敛。
但不一定可以提高精度。
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/51e3d1905be9de6b75b4166d6】。文章转载请联系作者。
评论