程序员转行学习 AI 大模型: 模型微调| 附清晰概念分类

0 阅读6分钟

本文是程序员转行学习AI大模型的第16个核心知识点笔记,附清晰业务流程示例。 当前阶段:还在学习知识点,由点及面,从 0 到 1 搭建 AI 大模型知识体系中。 系列更新,关注我,后续会持续记录分享转行经历~

在学习模型微调时,涉及的概念较多,学习过程中,也一直混淆,以此记录自己对模型微调中涉及词汇的理解。

模型微调概念

模型微调是指一个大概念,模型先进过预训练(Pre Train,PT),通过大量无监督数据学习,然后再经过特定数据继续训练的过程,就是模型微调。

可以这样理解:

预训练模型 = 大学毕业生(通识教育)
微调模型 = 专业培训(专业技能训练)

大学毕业生 → 微调 → 专业人才
预训练模型 → 微调 → 领域专家


1、预训练阶段
在大规模语料上训练
学习:通用知识(语言、常识、推理)

2、微调阶段
在特定数据上继续训练
学习:领域知识(医疗、法律、编程)

模型微调根据微调阶段,又可以分为监督微调(Supervised Fine-tuning,SFT)和偏好优化(Preference Optimization,PO)。

微调阶段划分(训练数据划分)

监督微调(SFT)

监督微调,是使用标注数据训练模型,每个输入都有正确的输出。

如下是监督微调的数据格式:

# 监督微调训练数据格式
[
    {
        "input": "什么是机器学习?",
        "output": "机器学习是人工智能的一个分支..."
    },
    {
        "input": "什么是深度学习?",
        "output": "深度学习是机器学习的子领域..."
    }
]

# 训练目标
给定输入,预测正确的输出

偏好优化(PO)

偏好优化,是基于人类偏好训练模型,让模型输出更符合人类期望。简单理解,就是输出符合人类价值观。

如下是偏好优化的示例:

# 偏好优化训练数据格式
[
    {
        "prompt": "写一首关于春天的诗",
        "chosen": "春风拂面绿柳枝,花香满园醉人心...",
        "rejected": "春天来了,花开了,很美..."
    }
]

# 训练目标
学习:人类更喜欢哪个输出


# 传统监督学习
输入 → 模型 → 输出
判断:输出是否正确?

# 偏好优化
输入 → 模型 → 多个输出
判断:哪个输出更符合人类偏好?

以上是根据微调阶段划分,也可以说是按照训练数据类型分类,监督微调是有标注数据,偏好优化是有偏好数据

如果根据微调参数划分,模型微调可以分为全量微调(Full Fine-tuning)、高效参数微调(Parameter-Efficient Fine-tuning,PEFT)。

微调参数效率划分(微调参数量划分)

全量微调

全量微调,训练模型的所有参数。

如下是全量微调的示例:

# 训练参数
model = GPT2Model()
for param in model.parameters():
    param.requires_grad = True  # 所有参数都可训练

# 参数量
总参数:82M
可训练参数:82M(100%)

全量微调效果最好,充分利用模型容量,表达能力也强,缺点是资源需求高,需要大量显存,训练参数多,更新慢,存储大,每个训练任务都要保存完整模型。

PEFT

PEFT,只训练模型的一小部分参数,大幅减少资源需求。

# 全量微调
W = W_original + ΔW  # 更新所有参数

# PEFT
W = W_frozen + ΔW_small  # 只更新少量参数

# 参数对比
全量微调:82M参数可训练
PEFT:0.82M参数可训练(1%)

PEFT 包括以下几种方法:

LoRA(Low-Rank Adaptation)

LoRA:低秩自适应微调。

# 核心思想
原始权重 W (d × d)
分解为:W = W_frozen + A × B
其中:A (d × r), B (r × d), r << d

# 参数量
原始:d × d = 768 × 768 = 589,824
LoRA:d × r + r × d = 768 × 4 + 4 × 768 = 6,144
减少:98.96%

LoRA 特点:

  • 参数最少:通常 < 1%
  • 效果最好:接近全量微调
  • 最流行:广泛使用

Prefix Tuning

# 核心思想
在每个Transformer层前面添加可训练的前缀
输入 → [前缀] + 输入 → Transformer层

# 前缀参数
每层添加:prefix_tokens (虚拟token)
参数量:n_layers × n_prefix × d_model

Prefix Tuning 特点:

  • 不修改模型:只添加前缀
  • 参数适中:比 LoRA 多,但比全量少
  • 影响推理速度:前缀增加序列长度

Prompt Tuning

# 核心思想
只在输入层添加可训练的提示词
输入 → [提示词] + 输入 → 模型

# 提示词参数
只添加:prompt_tokens (虚拟token)
参数量:n_prompt × d_model

Prompt Tuning 特点:

  • 参数最少:通常 < 0.1%
  • 最简单:实现最容易
  • 效果有限:表达能力较弱

上述 PEFT 三种方法对比:

偏好优化两种算法(DPO vs PPO)

DPO(Direct Preference Optimization,偏好优化算法)

DPO:直接基于偏好数据优化模型,不需要训练奖励模型。

# 传统RLHF方法
1. 训练奖励模型(基于人类反馈)
2. 使用PPO优化策略模型

# DPO方法
直接基于偏好数据优化策略模型
跳过奖励模型训练步骤


DPO训练数据格式
[
    {
        "prompt": "写一首关于春天的诗",
        "chosen": "春风拂面绿柳枝...",
        "rejected": "春天来了,花开了..."
    }
]

优点:

  • 简单直接:不需要奖励模型
  • 训练稳定:避免 RL 的不稳定性
  • 效果好:在偏好对齐上表现优秀

缺点:

  • 需要偏好数据:需要人类标注偏好
  • 可能过拟合:过度依赖偏好数据

PPO(Proximal Policy Optimization,强化学习算法)

PPO:一种强化学习算法,用于基于奖励信号优化策略。

# RLHF 流程
1. 策略模型生成多个输出
2. 奖励模型评估输出质量
3. PPO算法优化策略模型
4. 重复上述过程

# PPO 特点
- 策略梯度裁剪:避免更新过大
- 重要性采样:提高样本效率

# PPO 应用场景
1、RLHF:基于人类反馈强化学习
2、游戏AI:基于游戏奖励优化
3、机器人控制:基于环境反馈优化

优点:

  • 理论基础强:有坚实的数学基础
  • 训练稳定:策略梯度裁剪
  • 样本效率高:重要性采样

缺点:

  • 实现复杂:需要奖励模型
  • 训练不稳定:RL 固有的不稳定性
  • 超参数敏感:需要仔细调参

实际场景微调方案选择

问答系统

推荐:监督微调 + LoRA

原因:

  • 有标准答案 → 监督微调

  • 资源有限 → LoRA

  • 需要快速部署 → PEFT

实现:

  1. 准备问答对数据

  2. 使用LoRA配置

  3. 监督微调训练

对话助手

推荐:偏好优化 + DPO + LoRA

原因:

  • 需要符合人类偏好 → 偏好优化

  • 避免RL复杂性 → DPO

  • 资源有限 → LoRA

实现:

  1. 收集偏好数据

  2. 使用DPO算法

  3. 应用LoRA配置

创意写作

推荐:偏好优化 + PPO + 全量微调

原因:

  • 需要高表达力 → 全量微调

  • 需要人类反馈 → 偏好优化

  • 有充足资源 → 不需要PEFT

实现:

  1. 收集人类反馈

  2. 训练奖励模型

  3. 使用PPO优化

常见组合

  1. 监督微调 + LoRA(最常见)
  2. 偏好优化 + DPO(最新趋势)
  3. 偏好优化 + PPO(RLHF)
  4. 全量微调(资源充足时)
  5. PEFT(资源有限时)

学习资料:

大语言模型微调指引

大模型微调实战指南:从零开始定制你的专属 LLM-阿里云开发者社区