预训练(Pretraining)和监督微调(Supervised Fine-Tuning, SFT)是大语言模型开发中两个核心但目标迥异的阶段。它们在数据形式、优化目标、能力贡献和资源消耗等方面存在显著差异,同时也存在紧密的依赖关系。
相同点在于二者都属于有监督或自监督的学习过程,均通过梯度下降更新模型参数,并且都依赖大规模数据驱动。更重要的是,SFT 必须建立在预训练模型的基础上——没有预训练提供的语言理解与生成能力,SFT 无法有效工作;而预训练模型若不经 SFT,往往难以在实际任务中可靠使用。
不同点则体现在多个维度:
首先是训练目标。预训练的核心目标是学习语言的通用表示能力,通过自监督任务(如预测被掩码的词或下一个词)迫使模型掌握词汇、语法、世界知识、逻辑关联等底层能力。它不关心具体任务,只关注对语言分布的建模。而 SFT 的目标明确指向“指令遵循”:教会模型在接收到人类指令后,生成有用、安全、格式正确的响应。它不增加新知识,而是将预训练阶段已有的能力“引导”到特定行为模式上。
其次是数据形式与来源。预训练使用海量无标注文本,来源包括网页、书籍、代码、论坛等,强调规模与多样性,通常达万亿 token 级别。SFT 则依赖小规模(数千至数十万条)、高质量的人工标注数据,形式为“指令-理想回答”对,强调准确性、任务覆盖和行为规范。前者是“读万卷书”,后者是“拜师学礼”。
第三是参数更新范围与资源消耗。预训练需从零开始训练整个模型,计算成本极高,占整个训练流程90%以上的算力开销。SFT 通常只进行少量 epoch 的全参数微调,或结合 LoRA 等高效方法仅更新部分参数,资源需求大幅降低。即便如此,SFT 对数据质量极为敏感——低质量标注会直接污染模型行为。
第四是能力贡献的性质。预训练赋予模型“能做什么”的潜力:它知道事实、能推理、会写作,但不一定愿意按用户要求输出。SFT 赋予模型“愿意做什么”的意愿:它学会响应指令、拒绝有害请求、保持格式一致。例如,一个预训练模型可能知道圆周率前100位,但不会主动输出;SFT 后,当被问“请给出圆周率前10位”,它会准确回应。
最后是失败模式的差异。预训练失败通常表现为语言不通顺、知识缺失或逻辑混乱;SFT 失败则表现为指令忽略、格式错误、过度冗长或安全漏洞。前者是“能力不足”,后者是“行为失控”。
预训练与 SFT 是互补而非替代的关系:预训练构建能力底座,SFT 塑造交互行为。现代大模型的成功,正是源于这种“先广博后精准”的两阶段范式。理解二者的异同,有助于在工程实践中合理分配资源、设计数据 pipeline,并诊断模型在不同阶段可能出现的问题。