Skip to content

大模型微调核心技术说明

预训练

大模型的预训练是指在大规模数据集上对模型进行初步训练的过程。这是构建大型语言模型或其他AI模型的关键步骤。

参数量巨大:

参数

数据:

  • 使用海量文本数据,如维基百科、书籍、网页等。
  • 数据量通常在数十亿到数万亿个词级别。

模型架构:

  • 通常使用Transformer架构。
  • 参数量从数亿到数千亿不等。

训练方法:

  • 监督学习。
  • 非监督学习。
  • 半监督学习。
  • 强化学习。

为什么需要微调大模型

尽管大模型功能强大,但在某些特定领域或任务上可能表现不够理想。通过微调,我们可以让模型在特定任务上表现得更好,同时保留原有的通用能力。

例子: 假设我们有一个预训练的大型语言模型,如GPT、BERT等。这个模型在大量通用文本上进行了训练,具有广泛的语言理解能力,但对金融市场分析缺乏专门的知识。

我们的目标是将这个模型微调成一个能够分析金融新闻和报告,并生成市场趋势预测的专业工具。

微调过程:

数据收集:

  • 收集大量金融新闻、公司财报、分析师报告等。
  • 同时收集相应时期的市场数据,如股票价格、指数变动等。

数据预处理:

  • 将文本数据与相应的市场表现数据配对。
  • 标注数据,如"利好"、"利空"、"中性"等。

微调设置:

  • 设置任务为文本分类和生成任务的组合。
  • 调整学习率和批次大小以适应金融数据的特性。

微调训练:

  • 模型学习理解金融术语和市场动态。
  • 训练模型识别新闻中的关键信息并与市场表现关联。

评估和迭代:

  • 使用历史数据测试模型的预测准确性。
  • 根据需要调整参数或增加更多特定类型的金融数据。

微调后的应用示例:

输入新闻: "科技巨头 XYZ 公司今日发布第二季度财报,营收达 100 亿美元,同比增长 25%,超出市场预期。公司同时宣布将在人工智能领域增加 50 亿美元投资。然而,由于全球芯片短缺,公司预警下季度可能面临供应链挑战。"

模型输出:

1. 关键信息提取:
   - XYZ 公司 Q2 营收: 100 亿美元
   - 同比增长: 25%
   - 新增 AI 投资: 50 亿美元
   - 潜在风险: 芯片短缺导致的供应链挑战

2. 市场情绪分析:
   整体情绪: 偏正面
   理由: 营收超预期,大额 AI 投资显示公司对未来发展有信心。但供应链风险为利空因素。

3. 短期市场影响预测:
   - XYZ 公司股价可能在短期内上涨 3-5%。
   - 可能带动相关 AI 概念股走强。
   - 科技股指数可能小幅上涨。

4. 中长期趋势分析:
   - AI 领域投资可能在未来 2-3 年内为公司带来新的增长点。
   - 需密切关注全球芯片供应情况,可能影响公司未来几个季度的表现。

5. 投资建议:
   - 对 XYZ 公司持谨慎乐观态度。
   - 建议关注公司在 AI 领域的具体布局和进展。
   - 同时密切监控供应链情况,评估对公司业绩的潜在影响。

6. 相关行业影响:
   - 半导体行业可能受益于持续的芯片需求。
   - AI 相关企业可能迎来新一轮投资热潮。

大模型微调的本质

本质

大模型微调其实就是调整大模型原有的参数。让它更适合特定任务。

我们可以把大模型想象成一个函数 y = ax + b,其中 ab 是模型的参数。大模型微调就是调整参数ab

当然,大模型的参数绝不是像ab这么简单。

它们通常以矩阵的形式存在。你可以把矩阵想象成一个巨大的电子表格,里面填满了数字。每个数字就代表一个参数。

举个简单的例子,假设我们有一个很小的3x3矩阵:

[0.1  0.2  -0.1]
[0.2  0.7  -1.1]
[0.5  0.1  0.6]

现在我们通过微调将矩阵参数调整成下面的矩阵参数:

[0.1  0.2  -0.1]        [0.1  -0.1  0.8]         [0.2  0.1  0.7] 
[0.2  0.7  -1.1]   +    [0.8  -0.8  0.9]   =     [1.0  -0.1 -0.2]
[0.5  0.1  0.6]         [0.2  0.1  0.2]          [0.7  0.2  0.8]

     原有参数                偏移量                      改动后的参数

微调的本质就是获取这个偏移量,学习偏移量的参数。

通过微调,我们可以让模型在特定任务上表现得更好,同时保留原有的通用能力。偏移量就是想去提升的在特定任务上的能力

我们不希望对原有参数调整太多,改动太多意味着大模型原有的具备的较强的能力消失了,这叫模型能力的遗忘。改动量(偏移量)提供有限的价值,仅仅提升在特定任务上的能力。

微调方法

全量微调

全量微调 Full Fine-tuning,顾名思义,就是对模型的所有参数进行调整。例如GPT-4170万亿个参数,需要对170万亿个参数全部进行调整。

高效微调(LoRA

高效微调 PEFT(Parameter-Efficient Fine-Tuning)

LoRA(Low-Rank Adaptation)的核心思想非常巧妙。它基于一个假设:在微调过程中,参数的变化实际上是低秩的。这听起来可能有点抽象,我们可以这样理解:尽管模型有海量参数,但真正需要调整的信息其实不多。

LoRA利用了矩阵分解的原理。假设我们有一个大矩阵WLoRA认为我们可以用两个小矩阵AB的乘积来近似表示W的变化。数学表达式是:W = A*B

这里引入了一个重要的概念:秩(Rank)。秩决定了AB矩阵的大小。比如,对于一个100x100的矩阵W,如果我们选择秩为2,那A就是100x2的矩阵,B2x100的矩阵。

LoRA如何降低参数量呢? 还是用刚才的例子,100x100的矩阵有10000个参数。但如果用秩为2LoRAAB加起来只有400个参数,仅为原来的4%!这就大大减少了需要训练的参数量。

秩的选择非常关键。秩越小,需要训练的参数就越少,但可能会损失一些精度;秩越大,精度越高,但参数量和计算量也会增加。在实践中,通常会选择一个平衡点,比如8、16或32

LoRA vs 全量微调 对比

让我们直观地比较一下LoRA全量微调:

参数量:

假设原模型有10亿参数,全量微调需要调整全部10亿参数。而使用秩为16的LoRA,可能只需要调整几百万个参数,大约是原来的0.1%到1%。

资源需求:

全量微调可能需要8块或更多高端GPU,而LoRA通常只需要1-2块GPU就能完成训练。这大大降低了硬件门槛。

适用场景:

全量微调适合有充足算力、需要极致性能的场景。LoRA则适合资源受限、需要快速适应新任务的情况。特别是对于一些小型团队或个人研究者,LoRA提供了一种可行的大模型定制方案。

微调数据

SFT

SFT (Supervised Fine-Tuning) 是大模型微调中的一种重要方法,主要用于通过有监督学习来改进预训练语言模型的性能。

SFT是有监督微调,有监督其实就是既给出问题,也给出期望的答案,SFT其实就是准备微调数据。

让我通过一个具体的例子来说明SFT、全量微调和高效微调在微调过程中的步骤和作用。

例子:将GPT-3模型微调成一个专门的医疗问答助手

背景:
我们有一个预训练的GPT-3模型,想要将其转化为一个能够准确回答医疗问题的AI助手。

步骤:

1. 定义目标(SFT的核心):
   - 目标是使模型能够准确回答各种医疗问题
   - 这属于SFT(Supervised Fine-Tuning)的范畴,因为我们将使用带标签的医疗问答数据来指导模型学习

2. 数据准备(SFT的关键部分):
   - 收集大量高质量的医疗问答对
   - 例如:问题:"什么是高血压?" 答案:"高血压是指动脉血压持续高于正常水平..."
   - 这些带标签的数据对是SFT的核心,用于指导模型学习

3. 选择微调策略:
   这里我们可以选择全量微调或高效微调

   A. 如果选择全量微调:
      - 步骤:
        a. 初始化:加载预训练的GPT-3模型
        b. 训练:使用准备好的医疗问答数据,更新模型的所有参数
        c. 验证:在验证集上测试模型性能
      - 作用:
        - 允许模型的所有部分都适应医疗领域的知识和语言
        - 可能获得最佳性能,但需要大量计算资源

   B. 如果选择高效微调(以LoRA为例):
      - 步骤:
        a. 初始化:加载预训练的GPT-3模型
        b. 添加LoRA层:在模型的某些层中添加小型的可训练矩阵
        c. 训练:仅更新LoRA层的参数,使用医疗问答数据
        d. 验证:在验证集上测试模型性能
      - 作用:
        - 大幅减少需要更新的参数数量,降低计算资源需求
        - 保持模型大部分预训练知识不变,只调整必要的部分

4. 训练过程(SFT的实施):
   - 无论选择全量微调还是高效微调,这个阶段都是在实施SFT
   - 模型学习将输入的医疗问题映射到相应的专业答案
   - 使用交叉熵损失等指标来衡量模型输出与标准答案的差距

5. 评估和迭代:
   - 在测试集上评估模型性能
   - 可能需要多次调整超参数或训练策略

6. 部署:
   - 将微调后的模型部署为医疗问答助手

在这个例子中:
- SFT定义了整个微调的目的和框架(将模型变成医疗问答专家)
- 全量微调或高效微调是实现这个目的的具体技术手段
- 无论选择哪种微调方法,整个过程都属于SFT的范畴,因为我们使用了有监督的方法(带标签的问答对)来指导模型学习

这个例子展示了SFT作为目的,全量微调和高效微调作为手段,如何在实际的微调过程中协同工作。

模型对齐(PPODPO

模型对齐(Model Alignment)是一个重要的概念,特别是在大型语言模型(LLMs)的开发中。它指的是让AI模型的行为和输出与人类的价值观、期望和意图保持一致的过程。让我详细解释一下模型对齐:

定义:

  • 模型对齐是指调整AI系统,使其行为符合人类的价值观、伦理标准和预期目标的过程。

主要方法:

1. PPO (Proximal Policy Optimization)

PPO是一种强化学习算法,在RLHF (Reinforcement Learning from Human Feedback)中广泛使用。

特点:

  • 属于策略梯度方法
  • 通过限制每次更新的幅度来提高训练稳定性
  • 在连续和离散动作空间都表现良好

工作原理:
a) 收集当前策略下的轨迹数据
b) 使用这些数据来估计优势函数
c) 通过优化目标函数来更新策略,同时限制新旧策略的差异

在模型对齐中的应用:

  • 用于优化语言模型,使其输出更符合人类偏好
  • 通常与奖励模型结合使用,奖励模型基于人类反馈训练

2. DPO (Direct Preference Optimization)

DPO是一种更新的方法,旨在简化和改进RLHF过程。

特点:

  • 直接从人类偏好数据学习
  • 不需要显式的奖励模型
  • 计算效率更高,实现更简单

工作原理:
a) 收集人类对模型输出的偏好数据(例如,偏好A而不是B
b) 直接优化模型参数,使其生成的输出更符合这些偏好
c) 使用特殊的损失函数,将偏好学习问题转化为分类问题

在模型对齐中的应用:

  • 用于直接从人类偏好数据中学习,避免了RLHF中的一些复杂步骤
  • 可以更快速、高效地调整模型行为

SFT给出了问题和标注的答案,经过SFT阶段上线后的大模型,可以收集用户对于输出的反馈,点赞或者点踩,对于问题,既有用户接受的答案,也有用户不接受的答案。利用用户的反馈、标记来训练大模型,这就是模型的对齐

RAG还是微调

RAG (Retrieval-Augmented Generation)微调是两种不同的方法,用于增强语言模型的能力和知识。让我们通过比较和举例来说明它们的区别,以及各自适用的场景。

RAG vs 微调

  1. 工作原理:

    • RAG: 结合了外部知识检索和语言生成。在生成回答时,先检索相关信息,然后将检索到的信息与查询一起输入模型。
    • 微调: 直接更新模型参数,使模型适应特定任务或领域。
  2. 知识更新:

    • RAG: 可以轻松更新外部知识库,而不需要重新训练模型。
    • 微调: 需要重新训练模型来整合新知识。
  3. 模型大小:

    • RAG: 模型大小保持不变,主要增加的是外部知识库。
    • 微调: 可能会略微增加模型大小,特别是在使用某些高效微调方法时。
  4. 灵活性:

    • RAG: 非常灵活,可以根据需要快速切换或更新知识库。
    • 微调: 一旦微调完成,模型的知识就相对固定。
  5. 计算资源:

    • RAG: 推理时可能需要更多计算资源(用于检索),但不需要大规模训练。
    • 微调: 需要较多的训练资源,但推理可能更快。

举例说明:

使用RAG的场景:

  1. 实时新闻问答系统

    需求:创建一个能回答最新新闻事件的AI助手。

    为什么选RAG:新闻信息每天都在更新,使用RAG可以轻松更新知识库,无需重新训练模型。

  2. 技术支持聊天机器人

    需求:为一家快速发展的科技公司创建产品支持聊天机器人。

    为什么选RAG:公司的产品和服务经常更新,RAG允许轻松添加新产品信息到知识库。

  3. 法律咨询系统

    需求:创建一个能处理各种法律问题的AI系统。

    为什么选RAG:法律信息庞大且经常变化,RAG可以访问大量最新法律文档。

使用微调的场景:

  1. 特定领域的文本生成

    需求:为一家生物技术公司创建一个能生成专业研究报告的AI

    为什么选微调:生物技术领域有特定的术语和写作风格,微调可以让模型深入学习这些特性。

  2. 情感分析系统

    需求:为社交媒体平台开发一个高精度的情感分析工具。

    为什么选微调:情感分析需要模型深入理解语言的细微差别,微调可以针对这个特定任务优化模型。

  3. 代码自动补全

    需求:为IDE开发一个智能代码补全功能。

    为什么选微调:编程语言有特定的语法和结构,微调可以让模型精确地学习这些模式。

  4. 特定风格的文学创作

    需求:创建一个能模仿特定作家风格的AI写作助手。

    为什么选微调:捕捉特定的写作风格需要模型在更深层次上学习语言特征,微调更适合这种任务。

  5. 多语言翻译系统

    需求:开发一个专门用于技术文档翻译的系统。

    为什么选微调:技术翻译需要精确理解专业术语和表达方式,微调可以针对这种特定类型的翻译进行优化。

总结:

  • 当需要处理经常更新的信息、大量外部知识,或需要高度灵活性时,RAG是更好的选择。
  • 当任务需要深度理解特定领域、风格或语言特征,并且知识相对稳定时,微调更为合适。

在实际应用中,有时也会结合使用这两种方法,以获得最佳效果。