[[熵计算]] # 步骤21:强化学习对齐(RLHF) 理论:基于人类反馈的强化学习 (RLHF) 是近年用来对齐 (Align) 大型语言模型行为的关键技术。它通过引入人类偏好来优化模型,使模型输出更符合人意图、安全可靠。RLHF流程通常:先有一个预训练语言模型,通过人类标注一些模型输出的质量,训练一个奖励模型打分,然后使用强化学习(如PPO算法)让语言模型尽量生成高分输出,同时不偏离原先语言能力太远。OpenAI 的 InstructGPT、ChatGPT 都应用了RLHF,使得模型愿意遵循指令、减少不良行为。 由于完整RLHF实现复杂,这里用一个极简模拟说明其原理。我们假设一个策略要输出动作,我们通过奖励函数指引其学习目标行为。 编程任务:模拟一个简单环境:策略每回合从 {A, B} 两个动作中选择一个,动作 'A' 的奖励为 +1,'B' 的奖励为 -1。我们的目标是通过强化学习使策略最终总是选 'A'。用概率表示策略,对其进行多轮更新(类似policy gradient),观察概率趋向。 ```python import random import math # 初始化策略: 概率p_A(选A的概率)初始为0.5 logit_A = 0.0 logit_B = 0.0 def get_prob_A(): # 由logit计算softmax概率 pA = math.exp(logit_A) / (math.exp(logit_A) + math.exp(logit_B)) return pA print("初始选择A的概率:", get_prob_A()) # 强化学习迭代 for episode in range(1000): # 根据当前策略概率选择动作 pA = get_prob_A() action = 'A' if random.random() < pA else 'B' # 获得奖励 reward = 1 if action == 'A' else -1 # Policy Gradient 简单更新: 增大选择的动作对应logit按 reward 大小 if action == 'A': logit_A += 0.01 reward # reward=+1, 增加logit_A else: logit_B += 0.01 reward # reward=-1, 增加(因为是负负得正) logit_B?实际这里reward=-1,加上会减少logit_B # 简化: 未考虑baseline和严格梯度公式,只做比例更新 final_pA = get_prob_A() print("训练后选择A的概率:", final_pA) ``` 结果验证:初始时 `p(A)=0.5`。经过强化学习迭代,我们期望策略越来越偏向动作A。输出可能: ```Java 初始选择A的概率: 0.5 训练后选择A的概率: 0.99 ``` 最终概率应非常接近1,表示策略几乎总是选 'A'。这就模拟了RLHF中模型学会选择人类偏好的行为。在实际RLHF中: - 动作 = 模型生成的完整回答; - 奖励 = 人类反馈训练的奖励模型打分(高分表示人类喜欢的回答); - 更新策略 = 用PPO等算法微调模型参数,使其输出分布朝着高奖励方向移动。 通过RLHF,大模型可以纠正一些不符合人意的倾向。例如原模型可能喜欢用复杂术语回答,现在人类偏好简单解释,那奖励模型就会对简单答案给高分,于是强化学习让模型学会给出简单回答。 提示:上述策略更新我们使用一个非常简单的“增加所选动作logit”的规则,并未严格遵循RL理论(只是直观演示)。但结果仍有效,因为动作A正向奖励,算法会不断提高A概率。现实用PPO需要维护旧策略、裁剪更新、防止梯度爆炸等,复杂许多。不过核心思想就是引导模型朝人类偏好的方向自我调整。