训练范式的下一个拐点:预训练、SFT、RLHF 之后是什么

训练范式的下一个拐点:预训练、SFT、RLHF 之后是什么

一、个性化深度引言

2023年,预训练+微调是标准答案。2024年,RLHF成为标配。2025年,我们开始怀疑这一套还能走多远。

不是这些方法不好用,而是它们的边际收益在递减。预训练数据快见底了——互联网上高质量的文本就那么多。SFT数据标注成本居高不下。RLHF的奖励模型训练像走钢丝,一不小心就过拟合。业界需要一个新答案。

这个问题的紧迫性在于:如果我们找不到更高效的训练范式,大模型的能力天花板会在接下来两年内触碰。Scaling Law不是无限有效的——当数据增长跟不上模型规模增长时,单纯堆算力就变成了浪费。

见证奇迹的时刻不在于训练出一个更大的模型,而在于发现一条更聪明的路。本文分析当前训练范式的瓶颈,并推演下一个拐点可能的方向。

二、个性化原理剖析

当前主流训练范式的问题可以用以下流程描述:

合成数据驱动训练。核心逻辑:用已有模型生成高质量训练数据,再用这些数据训练更强的模型。争议点在于"模型吃自己的输出"是否会放大偏差。但实践证明,配合严格的过滤和质量评估,合成数据可以显著提升模型能力。Phi系列模型的成功已经验证了这条路。

Weak-to-Strong泛化。OpenAI提出的方向:用弱模型的输出训练强模型。反常之处在于,强模型可以超越弱模型的标注质量。原理是强模型在预训练阶段已经学到了正确的表征,弱模型的标注只提供了"方向信号",强模型本能地修正了其中的错误。

Constitutional AI。Anthropic的方案:用一套明确的原则(宪法)替代RLHF中的人类偏好标注。模型通过自我批评和自我修正来对齐规则。优势是可扩展性强,不需要大量人工标注;劣势是规则设计本身就是一门艺术。

三、个性化代码实践

下面演示合成数据训练和Weak-to-Strong的基本实现思路:

import torch import torch.nn as nn from transformers import AutoModelForCausalLM, AutoTokenizer from dataclasses import dataclass from typing import List @dataclass class SyntheticDataConfig: """合成数据生成配置""" # 设计原因:temperature控制多样性, # 过高产生噪声,过低产生重复,0.8是经验平衡点 temperature: float = 0.8 # 设计原因:top_p过滤低概率token, # 在保持流畅性的同时引入更多样化的表达 top_p: float = 0.95 # 设计原因:生成数量与质量成反比, # 盲目增加num_samples会引入噪声 num_samples: int = 1000 class SyntheticDataGenerator: """合成数据生成器——用强模型为弱模型生成训练数据""" def __init__(self, teacher_model_name: str, student_model_name: str): self.teacher = AutoModelForCausalLM.from_pretrained( teacher_model_name, torch_dtype=torch.bfloat16 ) self.tokenizer = AutoTokenizer.from_pretrained(teacher_model_name) self.student_model_name = student_model_name def generate_training_pairs( self, prompts: List[str], config: SyntheticDataConfig ): """生成指令-回答对""" pairs = [] for prompt in prompts: # 设计原因:用chat_template而非手动拼接, # 确保格式与模型训练时的格式一致 messages = [{"role": "user", "content": prompt}] inputs = self.tokenizer.apply_chat_template( messages, return_tensors="pt", add_generation_prompt=True ) # 设计原因:do_sample=True启用随机采样, # 教师模型的多条采样提供"正确答案的分布" outputs = self.teacher.generate( inputs, max_new_tokens=512, temperature=config.temperature, top_p=config.top_p, do_sample=True, num_return_sequences=3 # 每题生成3个候选 ) for output in outputs: response = self.tokenizer.decode( output[inputs.shape[1]:], skip_special_tokens=True ) pairs.append({"prompt": prompt, "response": response}) return pairs @staticmethod def weak_to_strong_loss( strong_logits: torch.Tensor, weak_predictions: torch.Tensor, auxiliary_confidence: torch.Tensor ) -> torch.Tensor: """ Weak-to-Strong训练的核心损失函数 设计原因:不是简单模仿弱模型的输出, 而是用auxiliary_confidence(辅助置信度)加权, 让模型在高置信度区域相信弱模型, 在低置信度区域依赖自己的预训练知识。 """ # 设计原因:当弱模型置信度低时,权重接近0, # 强模型更多地依赖自己的判断 weights = torch.sigmoid(auxiliary_confidence * 5 - 2.5) # 设计原因:KL散度衡量强模型预测与弱模型标注的差异, # 加权后实现"选择性学习" kl_loss = nn.KLDivLoss(reduction='none')( nn.functional.log_softmax(strong_logits, dim=-1), nn.functional.softmax(weak_predictions, dim=-1) ).sum(dim=-1) # 设计原因:最终损失 = 加权KL + 正则化项, # 正则化防止模型完全忽略弱模型信号 return (weights * kl_loss).mean() + 0.1 * kl_loss.mean()

四、个性化边界权衡

合成数据 vs 真实数据。合成数据成本低、规模可控,但存在"同分布偏差"——模型生成的数据天然偏向模型的已有能力。真实数据覆盖面更广,但成本高、噪声大。最佳实践:用真实数据做"种子",用合成数据做"扩展"。

Weak-to-Strong vs 传统SFT。Weak-to-Strong的优势在于不需要高质量的human annotation,只需要弱模型(甚至规则系统)提供粗粒度的信号。但它在复杂推理任务上的效果不稳定,因为弱模型可能给出"看似合理但实际错误"的标注。

Constitutional AI vs RLHF。Constitutional AI的可扩展性显著优于RLHF——写规则比标数据快得多。但规则的质量难以保证,一套规则可能在某些场景下互相矛盾。RLHF虽然贵,但人类偏好更灵活、更符合真实需求。

持续学习 vs 定期重训。持续学习让模型保持"与时俱进",但灾难性遗忘是核心挑战。定期重训能彻底刷新模型知识,但周期长、成本高。折中方案是"增量微调+定期知识蒸馏"。

五、总结

预训练+SFT+RLHF的三阶段范式正在接近天花板。下阶段的候选方向包括:合成数据驱动训练、Weak-to-Strong泛化、Constitutional AI、持续学习。单一方向都难以取代现有范式,组合使用是更现实的路径。拐点不是某一个时刻,而是一个渐进的过程——当这些新方法的组合效果稳定超过传统范式时,拐点就到来了。在此之前,理解每个方法的设计原理比追逐具体实现更重要。

资料说明

本文中的协议、版本、性能、成本和行业趋势应以可核验的一手资料为准。未标注统计口径的比例、时间表和预测仅作工程讨论,不应视为行业事实。可参考 0730 资料来源索引,并在发布前将具体来源贴到对应断言之后。