当前位置: 首页 > news >正文

【机器学习300问】37、什么是迁移学习?

一、什么是迁移学习?

(1)它的出现是为了解决什么问题?

        迁移学习是为了解决深度学习中由于数据不足导致的学习效果受限以及跨领域知识的有效利用等问题而发展起来的一种重要技术手段。

① 缺少训练数据

        在许多实际应用中,获取大量标注数据的成本高、难度大。迁移学习允许模型利用在大规模相关任务上训练得到的知识,来应对那些只有有限或无标注数据的新任务。

② 计算资源受限

        预训练模型可以作为初始化权重,在此基础上进行微调,相比随机初始化参数,通常能更快地收敛至较好的结果。通过迁移学习,可以从已经学习到的特征表示和模式中受益,避免从头开始训练时可能陷入局部最优解的问题,从而提高新任务的学习效率和最终表现。

(2)迁移学习的定义

  • 例一:经验丰富的画家 

         比如,你是一名经验丰富的画家,已经掌握了如何细致地画出苹果的技巧——对苹果的形状、颜色、光影变化等细节了如指掌。有一天,你需要开始画梨子。虽然梨和苹果在形状和纹理上有一定差异,但它们都是水果,有类似的质地、光照下的表现以及基本的三维结构。

        迁移学习就像这个绘画过程:你在“画苹果”的任务上学到的知识(比如对色彩层次的理解、阴影处理方法)可以被“迁移”到“画梨子”的新任务上,这样你就无需从零开始学习所有的绘画原理,而是可以在已有的知识基础上快速适应并提高新任务的表现。

  • 例二:图像识别

         比如我想要训练一个手写数字识别模型,我手头只有5000张手写0到9的训练数据。但与此同时我可以从网上获得100万张猫、狗、人、车的训练集和训练好的模型参数来进行迁移学习。

        通过这样的迁移学习过程,即使只有有限的手写数字数据,也可以借助预训练模型强大的特征提取能力,快速构建出一个相对准确的手写数字识别模型。

  • 定义: 迁移学习是一种机器学习方法,它能把在一个问题上训练获得的信息和经验利用到解决另一个类似问题上,特别是当这两个问题有共同点时。

(3)预训练模型

        从迁移学习的定义中我们可以得到预训练模型的定义,它是指你想要迁移过来的带有已经训练好的参数的模型。

  • 在CV领域,预训练模型可能是经过ImageNet等大型图像数据集训练过的卷积神经网络(CNN)。这些模型学会了识别图片中的各种物体和它们的特征,如边缘、形状、颜色组合等。
  • 在NLP领域,预训练模型通过大量文本语料库(如维基百科、网页等)进行了自我监督学习,学习到了丰富的语言结构和上下文信息。

(4)模型微调

        迁移学习中的模型微调(Fine-Tuning)是指在预训练模型的基础上,针对特定任务或目标数据集进行进一步的训练过程。预训练模型是在大规模、标注好的源数据集上预先训练好的模型,其参数已经学习到了丰富的特征表示能力。

二、两种迁移学习的微调策略

(1)冻结预训练模型部分层并仅更新输出层

        这种情况下,我们通常会利用一个在大规模数据集上预训练好的深度学习模型。由于预训练模型的早期层已经学习到了非常通用且抽象的特征表示,例如图像识别中的边缘、纹理等信息,这些特征对于许多视觉任务都有用。

        因此,在新任务中,我们会将模型的大部分或所有前期层参数“冻结”,即保持不变不再进行训练,只对输出层或者最后几层进行重新训练或微调。

        这样做的好处:是让模型利用已有的高质量特征提取能力,针对新任务的特定分类或回归需求调整最终决策层。

(2)使用全部可用数据更新所有层参数

        当手头的数据集相对较大,尽管可能不如预训练模型使用的原始数据集那么大,但仍具有一定的规模时,可以考虑采用此策略。此时,我们可以基于预训练模型初始化整个网络的权重,然后在整个模型的所有层上进行训练或微调。

        这样做的好处:是可以使模型更充分地适应新数据集的特点,同时保留预训练模型的部分知识。当然,在实际操作中,可能会选择逐步解冻之前冻结的层,以平衡学习新任务特性和保留预训练知识之间的关系。

 

 

相关文章:

  • 冒泡排序,详详解解
  • CesiumJS 沙盒
  • solana 入门 1
  • AJAX 03 XMLHttpRequest、Promise、封装简易版 axios
  • WPS 相较于其他办公软件有哪些优势?
  • 【Node.js从基础到高级运用】十二、身份验证与授权:JWT
  • 操作系统(多线程)
  • 基于单片机的车载酒精含量自检系统设计与实现
  • Selenium 学习(0.20)——软件测试之单元测试
  • 综合知识篇02-UML统一建模语言(2024年软考高级系统架构设计师冲刺知识点总结系列文章)
  • ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)
  • UE4案例记录
  • 二 centos 7.9 磁盘挂载
  • Unreal发布Android在刘海屏手机上不能全屏显示问题
  • CompletableFuture原理与实践-外卖商家端API的异步化
  • JavaScript-如何实现克隆(clone)函数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • centos安装java运行环境jdk+tomcat
  • conda常用的命令
  • extract-text-webpack-plugin用法
  • go append函数以及写入
  • golang中接口赋值与方法集
  • JavaScript 基础知识 - 入门篇(一)
  • Just for fun——迅速写完快速排序
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • windows下如何用phpstorm同步测试服务器
  • 飞驰在Mesos的涡轮引擎上
  • 关于Java中分层中遇到的一些问题
  • 记录一下第一次使用npm
  • 前端技术周刊 2019-02-11 Serverless
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 树莓派 - 使用须知
  • 提醒我喝水chrome插件开发指南
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​ArcGIS Pro 如何批量删除字段
  • ​TypeScript都不会用,也敢说会前端?
  • ​ubuntu下安装kvm虚拟机
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)bark-ml
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C)一些题4
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (转) Android中ViewStub组件使用
  • . Flume面试题
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET delegate 委托 、 Event 事件
  • .NET 反射的使用
  • .net连接MySQL的方法
  • .net流程开发平台的一些难点(1)
  • .NET性能优化(文摘)