共计 1664 个字符,预计需要花费 5 分钟才能阅读完成。
Transformer 基础架构
自注意力机制
Transformer 的核心是自注意力机制(Self-Attention),它允许模型在处理每个词时,动态地关注输入序列中的其他相关词。自注意力的计算过程可以分为以下步骤:

- 将输入词向量分别与三个权重矩阵相乘,得到查询(Q)、键(K)和值(V)向量
- 计算 Q 和 K 的点积,然后除以√d_k(d_k 是键向量的维度)进行缩放
- 对缩放后的分数应用 softmax 函数,得到注意力权重
- 将注意力权重与 V 相乘,得到最终的输出
数学表达式为:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
位置编码
由于 Transformer 不包含循环或卷积结构,需要额外添加位置信息。位置编码(Positional Encoding)通过以下公式为每个位置生成唯一的向量:
PE(pos,2i) = sin(pos/10000^(2i/d_model))
PE(pos,2i+1) = cos(pos/10000^(2i/d_model))
其中 pos 是位置,i 是维度索引。这些编码与词向量相加,使模型能够利用序列的顺序信息。
RLHF 训练流程
监督微调(SFT)
在 RLHF 流程中,首先使用高质量的对话数据对预训练模型进行监督微调:
- 收集人工编写的问答对数据集
- 使用标准交叉熵损失函数微调模型
- 目标是让模型学会生成符合人类偏好的响应
奖励建模(RM)
接下来训练一个奖励模型来评估响应质量:
- 收集人类对不同模型输出的偏好数据
- 训练一个神经网络来预测人类偏好
- 使用 Bradley-Terry 模型构建损失函数:
L(θ) = -E[log(σ(rθ(x,y_w) - rθ(x,y_l)))]其中 y_w 是优选响应,y_l 是次选响应
PPO 优化
最后使用强化学习(PPO 算法)优化模型:
- 将 SFT 模型作为初始策略
- 使用 RM 模型提供奖励信号
- 添加 KL 散度约束防止策略偏离太远
- 目标函数包含奖励项和 KL 惩罚项:
L(θ) = E[min(rθA, clip(rθ,1-ε,1+ε)A)] - βKL(πθ||πSFT)
API 微调示例
以下是如何使用 OpenAI API 微调模型的 Python 示例:
import openai
# 准备训练数据
training_data = [{"prompt": "解释量子力学", "completion": "量子力学是研究微观粒子运动规律的物理学分支..."},
# 更多示例...
]
# 创建微调作业
response = openai.FineTuningJob.create(
training_file=training_data,
model="gpt-3.5-turbo",
hyperparameters={
"n_epochs": 3,
"batch_size": 4,
"learning_rate_multiplier": 0.1
}
)
print(f"微调作业 ID: {response['id']}")
性能优化建议
减少 Token 消耗
- 精简提示词,删除不必要的上下文
- 设置合理的 max_tokens 参数
- 使用更简洁的响应格式(如 JSON)
提升响应速度
- 启用流式响应(stream=True)
- 合理设置 temperature 参数(通常 0.7-1.0)
- 使用缓存机制存储常见问题的响应
安全注意事项
内容过滤
- 实现后处理过滤机制
- 使用 Moderation API 检查有害内容
- 设置内容安全等级(如设置 safety_level=”strict”)
隐私保护
- 避免在提示中包含敏感信息
- 对用户数据进行匿名化处理
- 定期审核 API 使用日志
最佳实践
提示工程技巧
- 使用系统消息设定角色(” 你是一个有帮助的 AI 助手 ”)
- 提供清晰的指令和示例
- 分步骤引导模型思考(” 让我们一步步分析这个问题 ”)
温度参数调节
- 创造性任务使用较高 temperature(0.8-1.2)
- 事实性回答使用较低 temperature(0.2-0.5)
- 对于确定性输出,可以设置 temperature=0
思考题
- 如何设计实验比较不同 temperature 设置对生成质量的影响?
- 在奖励建模阶段,如何处理不同标注者之间的偏好差异?
- 对于非英语语言的应用,RLHF 流程需要做哪些调整?
正文完
发表至: 人工智能
近一天内
