大语言模型是怎么训练出来的?一篇入门指南

ChatGPT、Claude这些大模型到底是怎么训练出来的?看着它们能写文章、写代码、回答问题,背后的训练过程其实也没那么神秘。今天就用最直白的方式聊聊这个流程。

整体流程长啥样

大模型训练可以分成四个主要阶段,每个阶段解决不同的问题。

graph TD A[海量文本数据] --> B[预训练 Pre-training] B --> C[基座模型 Base Model] C --> D[监督微调 SFT] D --> E[指令微调模型] E --> F[训练奖励模型 RM] F --> G[强化学习 RLHF] G --> H[最终产品模型] style B fill:#667eea,color:#fff style D fill:#764ba2,color:#fff style F fill:#f093fb,color:#fff style G fill:#4facfe,color:#fff

简单来说就是:

  1. 预训练 - 让模型学会"说话"
  2. 微调 - 教它怎么做事
  3. 奖励建模 - 告诉它什么是好的回答
  4. 强化学习 - 让它自己优化

听起来挺清楚的对吧?但每个阶段都有不少门道。

第一步:预训练(Pre-training)

预训练就是让模型看海量的文本,自己学习语言规律。这个阶段模型会学习词汇、语法、常识,甚至一些推理能力。

数据规模有多大?

看看几个主流模型的训练数据量:

graph LR A[GPT-3
300B tokens] --> B[LLaMA
1.4T tokens] B --> C[LLaMA 2
2T tokens] C --> D[LLaMA 3
15T tokens] style A fill:#e8f4f8 style B fill:#d1e7f0 style C fill:#b8dae8 style D fill:#9fcde0

15万亿个token是什么概念?大概相当于7500万本书。数据量越大,模型学到的知识就越丰富。

训练目标:预测下一个词

预训练的核心思想很简单:给模型一句话的前半部分,让它预测下一个词是什么。

python 复制代码
# 预训练的本质
input_text = "今天天气真"
# 模型要预测:好 / 差 / 冷 / 热 ...

def next_token_prediction(context):
    # 计算每个可能词的概率
    probabilities = model(context)
    next_token = argmax(probabilities)
    return next_token

通过不断预测下一个词,模型逐渐学会了语言的规律。这个过程不需要人工标注,完全是自监督学习。

训练成本

预训练的成本是整个训练过程中最高的。LLaMA 3训练花了几亿人民币,用了几千张GPU跑了几个月。

第二步:监督微调(SFT)

预训练完之后,模型虽然学会了语言,但还不知道怎么正确回答问题。这时候就需要微调。

微调在做什么?

给模型准备一些标准的问答对,教它怎么回答各种问题。

python 复制代码
# SFT的训练数据格式
training_data = [
    {
        "instruction": "请解释什么是机器学习",
        "response": "机器学习是一种让计算机从数据中学习模式的技术..."
    },
    {
        "instruction": "用Python写一个冒泡排序",
        "response": "def bubble_sort(arr):\n    n = len(arr)\n    ..."
    }
]

# 训练时的目标
def sft_loss(model, instruction, response):
    predicted = model(instruction)
    # 让模型输出尽可能接近标准答案
    loss = cross_entropy(predicted, response)
    return loss

数据量对比

预训练用了万亿级别的数据,但微调只需要几十万条高质量的问答对。

pie title 训练数据量对比 "预训练数据" : 99.9 "微调数据" : 0.1

为什么差这么多?因为预训练学的是语言的通用能力,而微调学的是具体任务的格式。就像学会了中文,再学怎么写文章就快多了。

几个要注意的地方

  1. 数据质量很重要:100条高质量数据比1000条低质量数据效果好得多。高质量意味着回答准确、完整、有结构。

  2. 任务多样性:要覆盖问答、总结、代码、翻译各种场景,不能只训练一种任务。

  3. 格式统一:最好有清晰的模板,比如统一用"问题+回答"的格式。

第三步:训练奖励模型(RM)

这一步是训练流程中比较巧妙的设计。

为什么需要奖励模型?

同一个问题可能有多个好答案,也有很多不好的答案。怎么让模型知道哪个答案更好?

直接打分太主观了,所以就训练一个专门的奖励模型来评判答案的质量。

graph LR A[同一个问题] --> B[答案A] A --> C[答案B] A --> D[答案C] B --> E[人类标注:
A > C > B] C --> E D --> E E --> F[训练奖励模型] F --> G[可以给任何答案打分] style E fill:#f093fb,color:#fff style F fill:#667eea,color:#fff

怎么训练奖励模型?

核心是收集人类的偏好数据。给标注员看两个答案,让他选哪个更好。

python 复制代码
# 奖励模型的训练
def train_reward_model(question, answer_a, answer_b, human_preference):
    score_a = reward_model(question, answer_a)
    score_b = reward_model(question, answer_b)
    
    if human_preference == "A":
        # A应该得分更高
        loss = max(0, score_b - score_a + margin)
    else:
        loss = max(0, score_a - score_b + margin)
    
    return loss

这个设计很聪明:不需要给答案打绝对分数,只需要比较相对好坏。标注起来简单多了。

人类偏好数据

这部分数据量不大,一般就几万条。但质量要求很高,因为这直接决定了模型的价值观和回答风格。

第四步:强化学习(RLHF)

最后一步是用强化学习来优化模型。RLHF就是"从人类反馈中强化学习"。

RLHF的核心思想

让模型不断尝试生成答案,用奖励模型打分,然后调整策略,追求更高的分数。

graph TD A[用户问题] --> B[模型生成回答] B --> C[奖励模型打分] C --> D{分数高吗?} D -->|高| E[增强这种回答方式] D -->|低| F[抑制这种回答方式] E --> B F --> B style C fill:#667eea,color:#fff style E fill:#27ae60,color:#fff style F fill:#e74c3c,color:#fff

这个过程类似训练。回答好了就鼓励,回答不好就纠正。模型逐渐学会什么样的回答能获得高分。

PPO算法

RLHF用的是PPO(近端策略优化)算法。核心思想是:每次更新策略的时候,不要改得太猛,保持稳定。

python 复制代码
# PPO的简化版本
def ppo_update(model, question, old_answer, reward):
    new_answer = model(question)
    
    # 计算策略比值
    ratio = prob(new_answer) / prob(old_answer)
    
    # Clip防止变化太大
    clipped_ratio = clip(ratio, 1-epsilon, 1+epsilon)
    
    # 选较小的那个
    loss = -min(ratio * reward, clipped_ratio * reward)
    
    return loss

Clip机制是为了防止策略突变,导致模型性能下降。

RLHF的迭代循环

RLHF不是一次性的,而是持续进行的:

graph LR A[当前模型] --> B[生成回答] B --> C[奖励模型评分] C --> D[PPO更新] D --> A E[收集新的人类反馈] --> F[更新奖励模型] F --> C style A fill:#667eea,color:#fff style D fill:#764ba2,color:#fff style F fill:#f093fb,color:#fff

ChatGPT就是这样不断迭代优化的。用户的每个反馈最终都会用来改进模型。

数据和成本

数据和成本

训练大模型需要多少钱?看看不同规模模型的成本对比:

graph TB subgraph 小模型7B A1[硬件: 8卡A100] --> B1[时间: 1-2周] B1 --> C1[成本: 几万人民币] end subgraph 中模型70B A2[硬件: 64卡A100] --> B2[时间: 1-2个月] B2 --> C2[成本: 几百万] end subgraph 大模型175B+ A3[硬件: 几千卡A100] --> B3[时间: 3-6个月] B3 --> C3[成本: 数亿人民币] end style C1 fill:#27ae60,color:#fff style C2 fill:#f39c12,color:#fff style C3 fill:#e74c3c,color:#fff

LLaMA 3.1的训练成本估计在5-10亿人民币,GPT-4可能更贵。这就是为什么只有大公司才能训练顶级模型。

数据准备的挑战

数据准备是最耗时的环节:

  1. 预训练数据:要去重、过滤低质量内容、去除有害信息
  2. 微调数据:需要人工编写或筛选,质量控制很难
  3. 偏好数据:标注员要理解任务,还要保持一致性

主流模型对比

现在开源和闭源的大模型越来越多,看看几个主流的:

模型 参数量 训练数据 特点
GPT-3.5 175B 未公开 最早流行的对话模型
GPT-4 未公开 未公开 多模态,性能最强
LLaMA 3 8B/70B/405B 15T tokens 开源,性能接近GPT-4
Claude 未公开 未公开 长上下文,安全性好
Qwen 7B/14B/72B 3T tokens 中文友好

选择建议:

  • 追求性能:GPT-4或Claude 3.5
  • 中文场景:Qwen或ChatGLM
  • 私有部署:LLaMA 3
  • 资源受限:7B小模型 + 微调

几点理解

1. 数据是核心资产

预训练用了15万亿token,但微调可能只要几十万条。奖励模型的人类偏好数据更是只有几万条。

高质量的人类反馈数据是核心竞争力。 这也是为什么大公司能保持领先的重要原因。

2. 训练是持续的过程

RLHF不是训练完就结束了。ChatGPT每周都在更新,不断收集用户反馈,优化模型。

模型部署后的运营维护,可能比初始训练还重要。

3. 对齐是个大挑战

最难的不是让AI变聪明,而是让AI的目标和人类一致。RLHF是目前最好的对齐方案,但还不完美。

有时候模型会过度迎合,有时候又会产生不当输出。这个平衡一直在探索。

实践建议

根据不同角色,给一些实际应用的建议:

如果你是研究者

  • 从小模型(7B)开始实验,成本可控
  • 重点研究RLHF和对齐问题,这是核心难点
  • 关注DPO等新范式

如果你是企业

  • 优先用API(GPT-4/Claude),成本和效果最优
  • 数据敏感的话,考虑私有部署LLaMA
  • 积累自己的标注数据,这是长期资产

如果你是开发者

  • 学习Prompt Engineering,这是最快上手的方式
  • 掌握微调技术,能解决很多定制化问题
  • 了解RAG(检索增强生成),补充模型知识

写在最后

大模型训练是个系统工程,涉及数据、算法、工程、成本等多个方面。从预训练到RLHF,每个阶段都有自己的挑战。

现在开源模型越来越多,个人开发者也有机会参与到这个领域。无论是研究、应用还是创业,都有很多机会。

你在用大模型做什么项目?训练或微调过程中遇到过什么问题?对文章里的内容有什么看法?欢迎在评论区交流讨论,一起学习进步。

相关推荐
松岛雾奈.2301 小时前
机器学习--数据集的标准化和归一化算法;随机森林
人工智能·算法·机器学习
落羽的落羽2 小时前
【Linux系统】解明进程优先级与切换调度O(1)算法
linux·服务器·c++·人工智能·学习·算法·机器学习
LO嘉嘉VE2 小时前
学习笔记十七:神经网络基础概念
笔记·神经网络·学习·机器学习
斯文~3 小时前
【AI论文速递】SymAgent:知识图谱复杂推理的agent框架
人工智能·深度学习·llm·nlp·知识图谱
t***L2664 小时前
JavaScript在机器学习中的库
开发语言·javascript·机器学习
明月照山海-4 小时前
机器学习周报二十三
人工智能·机器学习
qq_17082750 CNC注塑机数采4 小时前
【Python TensorFlow】 CNN-GRU卷积神经网络-门控循环神经网络时序预测算法(附代码)
python·rnn·机器学习·cnn·gru·tensorflow
科研面壁者5 小时前
SPSS——独立样本T检验
数据库·人工智能·机器学习·信息可视化·数据分析·spss·数据处理
云栈开源日记5 小时前
Python 开发技术栈梳理:从数据库、爬虫到 Django 与机器学习
数据库·爬虫·python·学习·机器学习·django