趋近智
训练一个基础 AI 偏好模型是一项实际任务,它为后续强化学习 (reinforcement learning)阶段的奖励信号生成提供依据。目标是开发一个模型,能够预测在给定提示 下, 或 这两个回复中哪一个更受青睐。这种预测基于可能由另一个 AI 生成的标签。监督训练过程的主要机制会在此处详细阐述。
第一步是组织数据。RLAIF 偏好建模需要一个数据集,其中每个样本包含:
对于本次练习,我们假设您有一个三元组 的数据集,其中 是根据您的 AI 标注器判定的“获胜”(更受青睐)回复, 是“失败”(不受青睐)回复。
一种常见表示方式是使用 Python 字典或 pandas DataFrames:
# 单个数据点的示例结构
preference_data_point = {
"prompt": "Explain the concept of quantum entanglement in simple terms.",
"response_chosen": "Imagine two coins that are linked. If you flip one and it lands heads, you instantly know the other is tails, no matter how far apart they are. Quantum entanglement is like that for tiny particles.", # 获胜回复
"response_rejected": "Quantum entanglement involves the superposition principle and wave function collapse correlating particle states. It's a complex Hilbert space phenomenon described by Bell's theorem.", # 失败回复
}
# 一个小型数据集可能看起来像:
dataset = [
{"prompt": "P1", "response_chosen": "PC1", "response_rejected": "PR1"},
{"prompt": "P2", "response_chosen": "PC2", "response_rejected": "PR2"},
# ... 更多数据点
]
尽管我们在此使用合成 AI 标签,但请记住,提示的质量和多样性以及 AI 标注器的一致性会明显影响最终偏好模型的有效性。确保您的提示涵盖广泛的预期用例和可能的失败情况。
标准方法是使用预训练 (pre-training)语言模型作为骨干。偏好模型需要接收提示 和两个回复 来预测偏好分数。典型的架构会为每个回复单独计算一个标量分数 ,然后比较这些分数。
该架构通常包含:
prompt + response_chosen)连接起来并进行分词。对另一个回复重复此操作。偏好模型通常通过 LLM 骨干和标量头处理提示-回复对来生成分数,然后这些分数用于计算偏好损失。
训练偏好模型最常用的损失函数源自 Bradley-Terry 模型,该模型认为 比 更受青睐的概率可以使用它们基础分数的差异来建模。我们使用逻辑函数(sigmoid,)将分数差异映射到概率。训练目标是最大化在数据集中观察到的偏好的对数似然。最小化负对数似然得到损失:
这里, 是我们的偏好模型(参数 (parameter)为 )对提示 和回复 输出的标量分数。 代表偏好数据集。此损失函数促使模型为被选择的回复 () 分配比被拒绝的回复 () 更高的分数。
让我们使用类似 PyTorch 的伪代码结构来概述主要的训练循环,假设您有一个 PreferenceModel 类,它封装了一个预训练 (pre-training)的 transformer 和一个标量头,并且有一个提供 批次数据的 dataset。
import torch
import torch.nn.functional as F
from torch.optim import AdamW
from torch.utils.data import DataLoader, Dataset
from transformers import AutoModel, AutoTokenizer # 示例导入
# 假设 PreferenceModel 存在,接受骨干模型名称
# 假设 PreferenceDataset 已定义以处理分词和批处理
# 假设 dataset 是 PreferenceDataset 的一个实例
# 配置
model_name = "path/to/your/base_llm" # 或 Hugging Face 标识符
learning_rate = 1e-5
batch_size = 4
num_epochs = 1
# 初始化模型、分词器、优化器
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 如有必要,添加填充 token
if tokenizer.pad_token is None:
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
# 如有需要,调整模型嵌入层大小
preference_model = PreferenceModel(model_name)
preference_model.model.resize_token_embeddings(len(tokenizer)) # 根据添加的 token 进行调整
optimizer = AdamW(preference_model.parameters(), lr=learning_rate)
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
# 训练循环
preference_model.train()
for epoch in range(num_epochs):
total_loss = 0
for batch in dataloader:
# 批次包含分词后的提示、选择的回复、拒绝的回复
# 示例键:'prompt_ids', 'chosen_ids', 'chosen_mask', 'rejected_ids', 'rejected_mask'
# 确保张量在正确的设备上(例如,GPU)
chosen_ids = batch['chosen_ids'].to(device)
chosen_mask = batch['chosen_mask'].to(device)
rejected_ids = batch['rejected_ids'].to(device)
rejected_mask = batch['rejected_mask'].to(device)
# 从偏好模型获取分数
# 模型应在内部处理提示和回复的连接
# 或者接收预先连接的输入
# 假设模型返回所选和被拒绝回复的分数
scores_chosen = preference_model(input_ids=chosen_ids, attention_mask=chosen_mask)
scores_rejected = preference_model(input_ids=rejected_ids, attention_mask=rejected_mask)
# 计算损失
# 损失 = -log_sigmoid(选择的分数 - 拒绝的分数)
loss = -F.logsigmoid(scores_chosen - scores_rejected).mean()
# 优化步骤
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
avg_loss = total_loss / len(dataloader)
print(f"Epoch {epoch+1}, Average Loss: {avg_loss:.4f}")
# 保存训练好的偏好模型权重
# torch.save(preference_model.state_dict(), "preference_model_basic.pth")
实现要点:
PreferenceModel 需要被构建为计算标量分数 。这通常意味着将 transformer 输出的相关状态(例如,最后一个 token 的隐藏状态)通过线性头进行处理。torch.cuda.amp)可以显著提高速度并节省内存,这对于大型骨干模型尤其重要。在部署偏好模型为强化学习 (reinforcement learning)生成奖励之前,请使用预留的偏好对测试集评估其性能。主要衡量标准是准确率:模型正确预测偏好回复(即,为 分配比 更高的分数)的配对百分比。
其中 是指示函数。
高准确率(例如,>75-80%,取决于任务难度和标注器质量)表明模型已经学会了 AI 标注数据中存在的偏好模式。同时监控损失曲线以查看收敛情况并检查过拟合 (overfitting)。定性分析,即检查模型与标签不一致的情况,可以提供关于标注器潜在偏差或模型可能正在学习的不一致之处的见解。
本次实践课为您提供了训练 AI 偏好模型的基本步骤。您准备了数据,定义了架构,使用适当的损失函数实现了训练循环,并考虑了评估指标。所得模型,捕捉了 AI 标注数据集中包含的偏好,现已准备好在 RLAIF PPO 训练阶段作为奖励函数提供者,这将在下一节介绍。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•