L3 · 专题文章

预训练

预训练模型训练基础模型

本页只讲 4 条最关键判断,不写百科

4核心点
先记住预训练不是万能起点,而是高成本的基础能力构建过程

不掌握数据质量与训练稳定性的判断,极易浪费算力且产出不可用模型。

LIVE
CORE 预训练
01 WHAT

是什么

预训练是在大规模无标注或弱标注数据上训练模型,使其学习通用语言或领域表征的过程。

02 WHY

为什么

为后续微调或推理提供基础能力,减少从零训练成本,提升模型泛化性。

03 HOW

怎么做

准备高质量语料,选择合适架构与优化器,按批次迭代训练并监控损失曲线。

04 WHEN

什么时候

需要构建基础模型或领域模型时使用;已有成熟基础模型且只需适配特定任务时,应跳过预训练直接微调。

FOCUS

先记住这些

只留最重要的判断,细节见下方实践
01 数据质量决定上限

语料质量比模型规模更重要

去重、过滤低质内容、控制领域分布是预训练成功的前提,否则模型会学习噪声或偏见。

02 训练稳定性是核心挑战

学习率与梯度控制决定能否收敛

预热、余弦衰减、梯度裁剪与混合精度是标配,否则易出现损失震荡或梯度爆炸。

03 验证指标需可迁移

仅看训练损失无法判断模型可用性

必须通过下游任务或零样本基准验证表征质量,否则可能产出过拟合或退化模型。

04 算力与成本需前置评估

预训练是高投入任务,需明确ROI

若已有开源基础模型且只需领域适配,应优先选择微调而非预训练。

PROBLEM / POSITION / INTERFACE

先弄清它为什么存在,以及谁在使用

不从历史开始,从真实工作关系开始。
  1. 01 解决的问题

    需要从头构建具备通用理解或生成能力的模型,或现有模型在目标领域表现不足。

    从零训练成本高、数据需求大、调参复杂,且容易陷入局部最优或过拟合。

    成功标准
    模型在验证集上损失稳定下降,具备可迁移的表征能力,且能顺利衔接后续微调。
  2. 02 AI 生态位

    位于模型训练流程的起点,为微调、量化、部署等下游环节提供基础权重。

    上游
    依赖高质量语料库、计算集群、分布式训练框架与优化算法。
    下游
    为指令微调、对齐训练、领域适配、量化压缩等提供初始模型。
  3. 03 人的生态位

    负责数据筛选、训练目标设定、资源规划与效果验收。

    适合使用
    需构建基础模型、领域模型或现有开源模型无法满足任务需求时。
    不必使用
    已有高质量基础模型且只需轻量适配,或数据量不足、算力受限时。
  4. 04 独特价值

    通过自监督学习捕获数据内在结构,形成可迁移的通用表征,避免任务特定标注成本。

    数据质量与分布偏差直接影响效果,训练不稳定、算力消耗大、调参经验要求高。

    复杂度判断
    复杂度不是功能数量,而是控制与验证成本。

INTERFACE FLOW

谁在操作,信息怎样流动

  1. WHO OPERATES

    HUMAN负责语料清洗、训练目标设计、超参选择与训练监控

    SYSTEM执行数据加载、前向传播、梯度计算与权重更新

  2. INPUT

    大规模无标注或弱标注文本、代码或多模态数据

  3. CONTROL

    学习率、批次大小、优化器、正则化策略、训练步数与早停条件

  4. OUTPUT

    训练完成的模型权重文件,附带训练日志、损失曲线与验证指标

FLOW

预训练最小流程

01语料准备收集目标领域数据,执行去重、质量过滤与分词,构建训练集与验证集。
02配置训练设定模型规模、学习率调度、批次大小、优化器与混合精度策略。
03执行训练启动训练循环,监控损失与梯度,按需调整学习率或早停。
04验证与保存在验证集评估损失与下游任务表现,保存最优权重与训练日志。
CODE / PYTHON最小 Python 调用(示意)
import os
from transformers import AutoModelForCausalLM, Trainer, TrainingArguments, DataCollatorForLanguageModeling
from datasets import load_dataset

# 加载预训练模型与分词器
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")

# 加载语料
dataset = load_dataset("text", data_files={"train": "corpus.txt"})

def tokenize(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)

tokenized_dataset = dataset.map(tokenize, batched=True, remove_columns=["text"])

# 训练配置
training_args = TrainingArguments(
    output_dir="./pretrained",
    per_device_train_batch_size=8,
    learning_rate=5e-5,
    num_train_epochs=3,
    fp16=True,
    save_steps=500,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset["train"],
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

trainer.train()

最短闭环:加载模型与语料 → 配置训练参数 → 启动训练。真实场景需分布式与更大语料。

JSON / RESPONSE典型训练输出(示意)
{
  "train_runtime": 3600.5,
  "train_samples_per_second": 1200.3,
  "train_steps_per_second": 1.2,
  "total_flos": 1.5e+16,
  "train_loss": 2.15,
  "epoch": 3,
  "global_step": 10000,
  "best_model_checkpoint": "./pretrained/checkpoint-9500",
  "metrics": {
    "eval_loss": 2.08,
    "eval_perplexity": 8.0,
    "eval_runtime": 120.5
  }
}

FAQ

常见问题

选型、用法与失败,不复述定义。
01预训练和微调有什么区别?

预训练在大规模无标注数据上学习通用表征,微调在少量标注数据上适配特定任务。

避免混淆训练阶段,错误选择会导致算力浪费或效果不佳。
02最小可用方式是什么?

使用开源框架加载基础模型,配置小规模语料与基础训练参数,执行少量 epoch 验证流程。

帮助快速验证数据与训练管线,避免盲目投入大规模算力。
03什么时候不需要预训练?

当已有成熟基础模型且只需领域适配或任务微调时,应跳过预训练。

控制系统成本,避免重复造轮子。
04预训练失败的主要信号是什么?

训练损失不下降、梯度爆炸、验证集指标恶化或生成内容退化。

及时识别问题,调整学习率、数据质量或训练策略。