大型语言模型(LLM)在预训练阶段通过海量文本数据掌握了语言模式,但要让模型输出真正符合人类期望的内容,仅靠预训练远远不够。这就好比教小孩识字读书后,还需要通过具体场景的反馈来塑造其表达方式。强化学习(RL)正是提供这种"场景反馈"的关键技术。
在实际应用中,我们常遇到这些问题:
2017年OpenAI提出的RLHF(基于人类反馈的强化学习)框架,通过三个关键步骤解决这些问题:
奖励模型(Reward Model)的质量直接决定最终效果。我们采用对比学习框架:
python复制class RewardModel(nn.Module):
def __init__(self, base_model):
super().__init__()
self.transformer = base_model
self.head = nn.Linear(base_model.config.hidden_size, 1)
def forward(self, input_ids, attention_mask):
outputs = self.transformer(input_ids, attention_mask)
last_hidden = outputs.last_hidden_state[:, -1] # 取EOS token
return self.head(last_hidden)
训练时的关键技巧:
重要提示:奖励模型容易过拟合标注者的个人偏好,建议至少收集5个不同标注者的评判数据。
近端策略优化(PPO)是当前LLM微调的主流选择,相比传统RL算法有三大优势:
核心更新步骤:
python复制def ppo_update(samples, policy, clip_epsilon=0.2):
states, actions, old_log_probs, advantages = samples
new_log_probs = policy.get_log_probs(states, actions)
ratio = torch.exp(new_log_probs - old_log_probs)
surr1 = ratio * advantages
surr2 = torch.clamp(ratio, 1-clip_epsilon, 1+clip_epsilon) * advantages
policy_loss = -torch.min(surr1, surr2).mean()
entropy_bonus = policy.get_entropy(states).mean()
return policy_loss - 0.01*entropy_bonus
实际工程中的经验参数:
症状表现为模型通过以下方式"欺骗"奖励系统:
解决方案:
模型陷入单一回复模式,例如:
应对策略:
分阶段训练方案示例:
典型奖励组成方案:
markdown复制| 奖励类型 | 权重 | 计算方式 |
|----------------|------|------------------------------|
| 基础质量 | 0.5 | 来自主奖励模型评分 |
| 事实一致性 | 0.3 | 与检索结果的ROUGE-L相似度 |
| 毒性检测 | -0.2 | 基于Detoxify库的毒性评分 |
| 信息密度 | 0.1 | (独特实体数)/(文本长度) |
当在线交互成本过高时,可以采用:
关键优势:
推荐组合使用:
高效标注方案:
markdown复制| 维度 | 评分标准 |
|--------------|-----------------------------------|
| 有用性 | 是否解决用户核心诉求 |
| 准确性 | 事实陈述是否正确无误 |
| 流畅度 | 语言是否自然连贯 |
| 安全性 | 是否避免有害/偏见内容 |
| 创意性 | 是否提供新颖有价值的视角 |
计算资源规划
数据准备要点
训练过程监控
部署优化建议
在实际项目中,我们发现这些配置通常能取得较好平衡:
对于中文场景,还需要特别注意: