是什么
为什么
为后续微调或推理提供基础能力,减少从零训练成本,提升模型泛化性。
怎么做
准备高质量语料,选择合适架构与优化器,按批次迭代训练并监控损失曲线。
什么时候
需要构建基础模型或领域模型时使用;已有成熟基础模型且只需适配特定任务时,应跳过预训练直接微调。
FOCUS
先记住这些
语料质量比模型规模更重要
去重、过滤低质内容、控制领域分布是预训练成功的前提,否则模型会学习噪声或偏见。
学习率与梯度控制决定能否收敛
预热、余弦衰减、梯度裁剪与混合精度是标配,否则易出现损失震荡或梯度爆炸。
仅看训练损失无法判断模型可用性
必须通过下游任务或零样本基准验证表征质量,否则可能产出过拟合或退化模型。
预训练是高投入任务,需明确ROI
若已有开源基础模型且只需领域适配,应优先选择微调而非预训练。
PROBLEM / POSITION / INTERFACE
先弄清它为什么存在,以及谁在使用
-
01 解决的问题
需要从头构建具备通用理解或生成能力的模型,或现有模型在目标领域表现不足。
从零训练成本高、数据需求大、调参复杂,且容易陷入局部最优或过拟合。
- 成功标准
- 模型在验证集上损失稳定下降,具备可迁移的表征能力,且能顺利衔接后续微调。
-
02 AI 生态位
位于模型训练流程的起点,为微调、量化、部署等下游环节提供基础权重。
- 上游
- 依赖高质量语料库、计算集群、分布式训练框架与优化算法。
- 下游
- 为指令微调、对齐训练、领域适配、量化压缩等提供初始模型。
-
03 人的生态位
负责数据筛选、训练目标设定、资源规划与效果验收。
- 适合使用
- 需构建基础模型、领域模型或现有开源模型无法满足任务需求时。
- 不必使用
- 已有高质量基础模型且只需轻量适配,或数据量不足、算力受限时。
-
04 独特价值
通过自监督学习捕获数据内在结构,形成可迁移的通用表征,避免任务特定标注成本。
数据质量与分布偏差直接影响效果,训练不稳定、算力消耗大、调参经验要求高。
- 复杂度判断
- 复杂度不是功能数量,而是控制与验证成本。
INTERFACE FLOW
谁在操作,信息怎样流动
-
WHO OPERATES
HUMAN负责语料清洗、训练目标设计、超参选择与训练监控
SYSTEM执行数据加载、前向传播、梯度计算与权重更新
-
INPUT
大规模无标注或弱标注文本、代码或多模态数据
-
CONTROL
学习率、批次大小、优化器、正则化策略、训练步数与早停条件
-
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预训练失败的主要信号是什么?+
训练损失不下降、梯度爆炸、验证集指标恶化或生成内容退化。
及时识别问题,调整学习率、数据质量或训练策略。