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

预训练到微调:深入理解AI的上下游任务

笔者在2022年开始做目标检测时,了解过上游任务和上游任务的区别,在这里举例进行初步的解释。本文以目标检测为例子来解释概念。

一、简单说说:上下游任务的协同关系

上下游任务是前后关系,上游任务先让模型学习到通用的特征表示,下游任务再让模型学习到特定的特征表示来解决特定问题。可以先理解成下图1所示:

预训练
微调训练
微调训练
微调训练
微调训练
上游任务
通用的预训练模型
下游任务
目标检测模型
语义分割模型
机器翻译模型
...
图1. 上下游任务的流程

如上图所示,通过这种分工,上游任务提供"基础能力",下游任务专注"业务落地",形成完整的pipeline。



二、具体讲讲:上游任务(Upstream Tasks)

#1. 核心目标

上游任务的核心是通过大规模预训练让模型学习通用特征表示,得到「预训练模型」,以此为后续下游任务提供强大的迁移能力

通用特征比如COCO数据集中80个类别的330K张图片,部分数据样本如下图2所示:

COCO数据集的示例图片

图2. COCO数据集的示例图片

注:本图引子论文《Microsoft COCO: Common Objects in Context》

#2. 关键特点

1️⃣数据规模大

  • 通常使用海量数据(如目标检测数据集COOC、图片分类数据集ImageNet等)。
  • 例如:YOLO系列在COCO上预训练、BERT在Wikipedia+BookCorpus(16GB文本)上预训练,ViT在JFT-300M(3亿张图片)上训练。

2️⃣学习通用特征

  • 图像领域的颜色、纹理、边缘等特征;
  • 文本领域的词向量、语法结构等特征。

3️⃣迁移能力强大

  • 因为数据集庞大且类别庞大,所以得到的预训练模型通常能适应绝大多数的现实场景。


三、具体讲讲:下游任务(Downstream Tasks)

#1. 核心目标

基于「预训练模型」进行微调训练(Fine-tuning)应用到实际落地场景,解决实际问题。

微调数据集的数据量通常比预训练数据集少几十倍。

#2. 举几个栗子

任务类型输入-输出实际应用
目标检测图片 => 定位+分类工业瑕疵检测、自动驾驶(检测行人、车辆)
语义分割图片 => 分类(像素级别)医学图像(肿瘤区域分割)
机器翻译文本 => 文本Google Translate|有道翻译

#3. 实现方式——微调(Fine-tuning)

1️⃣微调(Fine-tuning)

  • 对整个网络进行微调训练在预训练模型顶部添加任务特定层(如分类头),端到端训练。
  • 适用场景:微调数据集量很大,如几万的数据样本。

2️⃣冻结核心部分并进行微调训练

  • 冻结骨干网络(Backbone),仅对部分网络(如Head)进行微调训练,或添加新模块并进行微调。
  • 适用场景:数据量较小,如只有几百的数据样本。

如果这篇文章对您有些许帮助,请帮忙点个赞👍或收个藏📃。您的支持是我继续创作的动力💪!


不要害怕,不要着急。保持每日的前进☀️与积极的内心❤️,命运总在曲折中馈赠最好的礼物。

相关文章:

  • 访问计划(C++)
  • 【SpringBoot篇】详解短信验证码登录功能实现
  • 学习黑客Nmap 命令法诀
  • GD32F103C8T6多串口DMA空闲中断通信程序
  • 小刚说C语言刷题—1038编程求解数学中的分段函数
  • java学习之数据结构:四、树
  • 可视化大屏开发全攻略:技术与实践指南
  • 高并发内存池------threadcache
  • 蓝桥杯15届国赛 最小字符串
  • 豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理
  • Matlab实现CNN-BiLSTM时间序列预测未来
  • 开关电源原理
  • Leetcode:回文链表
  • 为什么round(5.445,2)是5.44,如何改成5.45?
  • Python内置函数
  • JavaScript 笔记 --- part8 --- JS进阶 (part3)
  • springboot应用大批量导出excel产生oom处理措施实践(适用于poieasyexcel)
  • 面向对象与过程介绍
  • 【FreeRTOS-时间管理】
  • **集合**实验**
  • 山大齐鲁医院护士论文现“男性确诊子宫肌瘤”,院方称将核实
  • 武契奇目前健康状况稳定,短期内将暂停日常工作
  • 传奇落幕!波波维奇卸任马刺队主教练,转型全职球队总裁
  • 人形机器人,最重要的还是“脑子”
  • 网红“丢那猩”丢石块闯祸,起哄游客难逃责任
  • 以色列消防部门:已控制住耶路撒冷山火