09-Pre-training/预训练:AI的"通识教育"

34 阅读7分钟

Pre-training/预训练:AI的"通识教育"

这篇文章带你理解大模型的第一课——预训练,明白AI是怎么"读万卷书"的。

前言

你一定听过这些说法:

"GPT-3预训练用了45TB的文本数据" "预训练成本高达1200万美元" "这个模型是预训练好的,可以直接微调"

什么是预训练?为什么AI要先"预训练"才能用?

今天,我们把"预训练"这个黑话翻译成人话。


一、黑话原文 vs 人话翻译

场景模拟

🎯 AI研究组会议:

研究员A:"我们的模型在预训练阶段收敛了"
研究员B:"用的什么预训练数据?"
研究员C:"Common Crawl加Wikipedia,大概2TB"
研究员A:"预训练loss稳定在2.5左右"
研究员B:"可以开始微调了"

人话翻译表

黑话人话翻译一句话理解
Pre-training预训练AI的"通识教育"
预训练数据训练用的文本AI读的"书"
Loss/损失错误程度考试分数的倒数
收敛学习稳定了成绩不再波动
Epoch轮次把书读几遍
Checkpoint检查点学习进度的存档

二、预训练是什么?

2.1 一句话定义

Pre-training = 让AI在海量文本上"自学",学会语言的基础知识

人话版:就像让一个学生把整个图书馆的书都读一遍,虽然不是专攻某一科,但什么都懂一点。

2.2 为什么叫"预"训练?

┌─────────────────────────────────────────────────────────────┐
│                    AI训练的两阶段                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  阶段1:预训练 (Pre-training)                               │
│  ────────────────────────────                               │
│  目标:学会语言的"通用知识"                                 │
│  内容:互联网上的所有文本                                   │
│  类比:读完整个图书馆,成为"通识生"                         │
│                                                             │
│  阶段2:微调 (Fine-tuning)                                  │
│  ────────────────────────                                   │
│  目标:学会特定任务                                         │
│  内容:特定领域的数据                                       │
│  类比:参加专业培训,成为"专家"                             │
│                                                             │
│  先"预"训练 → 再微调                                        │
│  所以叫"预"训练                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.3 生活类比

预训练就像:

📚 通识教育
- 小学+中学:学语文、数学、英语...
- 不是为了某个具体工作
- 而是为了"有文化"

🎓 专业培训(微调)
- 大学/职校:学编程、学设计...
- 针对具体职业
- 成为"专业人士"

AI也是一样:
- 先预训练:学会"说话"
- 再微调:学会"好好说话"

三、预训练学什么?

3.1 预训练的目标

┌─────────────────────────────────────────────────────────────┐
│                    预训练的核心任务                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  最常见的预训练任务:语言模型 (Language Modeling)           │
│                                                             │
│  简单说就是:猜下一个字                                     │
│                                                             │
│  输入:"今天天气真___"                                      │
│  预测:"好"(概率最高)                                     │
│                                                             │
│  通过大量"猜字游戏",AI学会:                              │
│  ├── 语法规则(怎么说话通顺)                               │
│  ├── 词汇关系(苹果和水果的关系)                           │
│  ├── 常识知识(下雨要打伞)                                 │
│  └── 世界知识(北京是中国的首都)                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.2 预训练数据从哪来?

常见的预训练数据来源:

┌─────────────────────────────────────────────────────────────┐
│                    预训练数据来源                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  🌐 互联网网页                                              │
│  ├── Common Crawl:网页快照,数千TB                         │
│  └── 问题:质量参差不齐,需要清洗                           │
│                                                             │
│  📚 知识类网站                                              │
│  ├── Wikipedia:维基百科                                    │
│  ├── 百度百科                                               │
│  └── 优点:质量高,知识丰富                                 │
│                                                             │
│  📖 书籍                                                    │
│  ├── 电子书库                                               │
│  └── 优点:文字质量高                                       │
│                                                             │
│  💻 代码                                                    │
│  ├── GitHub 公开代码                                        │
│  └── 让AI学会编程                                           │
│                                                             │
│  📰 新闻、论文                                              │
│  ├── 专业内容                                               │
│  └── 获取特定领域知识                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.3 数据量有多大?

GPT-3的预训练数据:

| 数据集 | Token数量 | 占比 |
|-------|----------|------|
| Common Crawl | 410B | 60% |
| WebText2 | 19B | 22% |
| Books | 12B | 8% |
| Wikipedia | 3B | 3% |
| 其他 | 45B | 7% |
| 总计 | ~500B | 100% |

500B Token ≈ 3750亿个汉字
≈ 读37.5万本《红楼梦》

四、预训练的过程

4.1 训练流程

┌─────────────────────────────────────────────────────────────┐
                    预训练流程                                
├─────────────────────────────────────────────────────────────┤
                                                             
  Step 1: 数据准备                                           
  ├── 收集海量文本                                           
  ├── 清洗数据(去重、去噪)                                 
  └── Tokenize(转成数字)                                   
                                                             
  Step 2: 模型初始化                                         
  └── 参数随机初始化                                         
                                                             
  Step 3: 训练循环                                           
  ┌─────────────────────────────────────────────────────┐   
   for epoch in epochs:                                    
       for batch in data:                                  
           prediction = model(batch)                       
           loss = calculate_loss(prediction, target)       
           update_parameters(loss)                         
  └─────────────────────────────────────────────────────┘   
                                                             
  Step 4: 保存Checkpoint                                     
  └── 定期保存模型参数                                       
                                                             
└─────────────────────────────────────────────────────────────┘

4.2 Loss是什么?

Loss(损失)= 预测错误程度

┌─────────────────────────────────────────────────────────────┐
│                    Loss变化示意                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Loss                                                       │
│   │                                                         │
│  10┤ ●                                                      │
│   │   ●●                                                    │
│   │     ●●●                                                 │
│   │        ●●●●                                             │
│   │            ●●●●●                                        │
│   │                 ●●●●●●●───────────── 收敛              │
│   └──────────────────────────────────────→ 训练步数        │
│                                                             │
│  Loss越低 = 预测越准 = 学得越好                             │
│  Loss稳定 = 收敛 = 学习完成                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.3 预训练有多贵?

┌─────────────────────────────────────────────────────────────┐
│                    预训练成本                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  GPT-3 预训练:                                             │
│  ├── 计算量:3640 PFLOP-days                               │
│  ├── 显卡:约10000张V100                                   │
│  ├── 时间:约1个月                                          │
│  ├── 电费:约500万美元                                      │
│  └── 总成本:约1200万美元                                   │
│                                                             │
│  GPT-4 预训练:                                             │
│  └── 估计超过1亿美元                                        │
│                                                             │
│  这就是为什么:                                              │
│  - 只有大公司能训练大模型                                   │
│  - 开源模型很珍贵                                           │
│  - 预训练好的模型很值钱                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

五、预训练 vs 微调

5.1 对比

维度预训练微调
数据量海量(TB级)少量(GB级)
数据类型通用文本特定任务数据
计算成本极高中等
时间数周到数月数小时到数天
目标学会语言基础学会特定任务

5.2 关系图

┌─────────────────────────────────────────────────────────────┐
│                    预训练 → 微调 → 部署                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  预训练模型                                                 │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 读完整个互联网的"通识生"                             │   │
│  │ 能力:会说人话,有常识                               │   │
│  └──────────────────────┬──────────────────────────────┘   │
│                         │                                   │
│                         ▼ 微调                              │
│  微调模型                                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 经过专业培训的"专家"                                 │   │
│  │ 能力:能做特定任务(对话、代码、翻译...)            │   │
│  └──────────────────────┬──────────────────────────────┘   │
│                         │                                   │
│                         ▼ 部署                              │
│  应用                                                      │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ ChatGPT、Claude等产品                                │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

六、预训练模型的价值

6.1 为什么预训练模型很值钱?

┌─────────────────────────────────────────────────────────────┐
│                    预训练模型的价值                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 省钱                                                   │
│     自己预训练:几百万到几亿美元                            │
│     用现成的:免费到几万美元                                │
│                                                             │
│  2. 省时                                                   │
│     自己预训练:几周到几个月                                │
│     用现成的:立即可用                                      │
│                                                             │
│  3. 效果好                                                 │
│     大公司有更好的数据、算力、技术                          │
│     开源模型效果往往不差                                    │
│                                                             │
│  4. 可定制                                                 │
│     预训练模型 + 自己的数据 → 专属模型                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

6.2 著名的预训练模型

模型公司特点
BERTGoogle理解能力强
GPT系列OpenAI生成能力强
LLaMAMeta开源,可商用
Qwen阿里中文能力强
GLM智谱国产开源

七、预训练的代码示例

7.1 简化的预训练过程

import torch
from torch.utils.data import DataLoader

def pretrain(model, data_loader, optimizer, epochs):
    """
    简化的预训练代码
    """
    for epoch in range(epochs):
        total_loss = 0

        for batch in data_loader:
            # batch: [batch_size, seq_len]
            input_ids = batch[:, :-1]   # 输入:去掉最后一个
            targets = batch[:, 1:]      # 目标:去掉第一个

            # 前向传播
            outputs = model(input_ids)
            logits = outputs.logits

            # 计算Loss
            loss = torch.nn.functional.cross_entropy(
                logits.view(-1, logits.size(-1)),
                targets.view(-1)
            )

            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            total_loss += loss.item()

        avg_loss = total_loss / len(data_loader)
        print(f"Epoch {epoch}: Loss = {avg_loss:.4f}")

        # 保存Checkpoint
        torch.save(model.state_dict(), f"checkpoint_epoch_{epoch}.pt")

7.2 使用预训练模型

from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载预训练模型(省去预训练的时间和成本)
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

# 直接使用
input_text = "今天天气"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
output = model.generate(input_ids, max_length=50)
print(tokenizer.decode(output[0]))

小结

黑话人话记忆口诀
Pre-training预训练AI的通识教育
预训练数据训练文本AI读的书
Loss损失/错误程度越低越好
收敛学习稳定成绩不波动
Epoch轮次读几遍
Checkpoint存档保存进度

关键认知

  • 预训练是AI的"通识教育"
  • 通过海量数据学会语言基础
  • 成本极高,所以预训练模型很值钱
  • 预训练后还需要微调才能做特定任务

黑话等级

⭐⭐⭐ 进阶级
├── 理解预训练是什么
├── 知道预训练数据的来源
└── 明白预训练和微调的关系

下一期预告:Fine-tuning/微调 - 给AI上专业课

思考与练习

  1. 思考题

    • 为什么预训练能学到知识?
    • 预训练数据的质量重要还是数量重要?
  2. 动手练习

    • 下载一个开源预训练模型,试试效果
    • 对比不同预训练模型的能力
  3. 延伸探索

    • 了解预训练数据清洗的方法
    • 研究Scaling Law(缩放定律)

下期预告

下一篇文章,我们来聊:Fine-tuning/微调 - 给AI上"专业课"

会解答这些问题:

  • 微调是怎么让AI变专业的?
  • 全量微调 vs LoRA有什么区别?
  • 怎么用自己的数据微调模型?

关注专栏,不错过后续更新!


作者:ECH00O00 本文首发于掘金专栏《AI黑话翻译官》 欢迎评论区交流讨论,点赞收藏就是最大的鼓励