强化学习驱动的AI Agent:优化LLM的决策策略
本文旨在为开发者和研究人员提供一套完整的强化学习优化LLM决策策略的方法论。如何将强化学习框架应用于LLM的决策过程不同强化学习算法在LLM优化中的适用性比较实际工程实现中的关键技术和挑战性能评估和优化的有效方法本文讨论的范围限于基于Transformer架构的大语言模型,不涉及其他类型的神经网络模型。背景介绍:建立基本概念和知识框架核心概念:深入分析强化学习与LLM的结合原理算法实现:详细讲解关
强化学习驱动的AI Agent:优化LLM的决策策略
关键词:强化学习、AI Agent、大语言模型(LLM)、决策策略、Q-Learning、策略梯度、深度强化学习
摘要:本文深入探讨如何利用强化学习技术优化大语言模型(LLM)的决策策略。我们将从基础概念出发,详细分析强化学习与LLM的结合原理,介绍核心算法实现,并通过实际案例展示如何构建一个强化学习驱动的AI Agent。文章还将探讨该技术在对话系统、游戏AI等领域的应用场景,最后展望未来发展趋势和面临的挑战。
1. 背景介绍
1.1 目的和范围
本文旨在为开发者和研究人员提供一套完整的强化学习优化LLM决策策略的方法论。我们将覆盖从基础理论到实践应用的完整知识体系,重点解决以下问题:
- 如何将强化学习框架应用于LLM的决策过程
- 不同强化学习算法在LLM优化中的适用性比较
- 实际工程实现中的关键技术和挑战
- 性能评估和优化的有效方法
本文讨论的范围限于基于Transformer架构的大语言模型,不涉及其他类型的神经网络模型。
1.2 预期读者
本文适合以下读者群体:
- AI研究人员:希望了解强化学习与LLM结合的前沿技术
- 机器学习工程师:需要实现强化学习优化LLM的实际系统
- 技术决策者:评估强化学习在AI产品中的应用价值
- 高级开发者:扩展AI系统的决策能力
读者应具备机器学习基础知识和Python编程能力,对Transformer架构有基本了解。
1.3 文档结构概述
本文采用循序渐进的结构:
- 背景介绍:建立基本概念和知识框架
- 核心概念:深入分析强化学习与LLM的结合原理
- 算法实现:详细讲解关键算法和数学原理
- 项目实战:通过完整案例展示实现过程
- 应用场景:探讨技术在实际中的多种应用
- 资源推荐:提供进一步学习的路径
- 未来展望:分析技术发展趋势和挑战
1.4 术语表
1.4.1 核心术语定义
- 强化学习(RL):一种通过试错学习最优策略的机器学习范式
- AI Agent:能够感知环境并采取行动实现目标的智能体
- 大语言模型(LLM):基于海量文本数据训练的大型神经网络模型
- 策略(Policy):Agent从状态到行动的映射函数
- 奖励函数(Reward Function):评估行动好坏的量化标准
1.4.2 相关概念解释
- 马尔可夫决策过程(MDP):强化学习的数学框架,包含状态、行动、转移概率和奖励
- Q-Learning:基于价值迭代的无模型强化学习算法
- 策略梯度(Policy Gradient):直接优化策略函数的强化学习方法
- PPO(Proximal Policy Optimization):一种稳定的策略梯度算法
- Transformer:基于自注意力机制的神经网络架构
1.4.3 缩略词列表
- RL - Reinforcement Learning
- LLM - Large Language Model
- MDP - Markov Decision Process
- PPO - Proximal Policy Optimization
- DRL - Deep Reinforcement Learning
- NLP - Natural Language Processing
- GPT - Generative Pre-trained Transformer
2. 核心概念与联系
2.1 强化学习与LLM的基本关系
强化学习为LLM提供了优化决策策略的框架,而LLM则为强化学习Agent提供了强大的状态表示和行动生成能力。两者的结合可以表示为:
2.2 强化学习优化LLM的三种模式
- 微调模式:使用RL对预训练LLM进行微调
- 插件模式:LLM作为RL Agent的组件
- 混合模式:LLM和RL模型协同工作
2.3 关键组件交互流程
- 状态表示:LLM将环境信息编码为向量表示
- 策略决策:RL模型基于状态选择最优行动
- 行动执行:Agent在环境中执行选定行动
- 奖励计算:环境返回行动效果的量化评估
- 策略更新:RL模型根据奖励调整决策策略
3. 核心算法原理 & 具体操作步骤
3.1 基于价值的方法:Deep Q-Learning
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
from collections import deque
import random
class DQN(nn.Module):
def __init__(self, state_dim, action_dim):
super(DQN, self).__init__()
self.fc1 = nn.Linear(state_dim, 128)
self.fc2 = nn.Linear(128, 128)
self.fc3 = nn.Linear(128, action_dim)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return self.fc3(x)
class DQNAgent:
def __init__(self, state_dim, action_dim):
self.state_dim = state_dim
self.action_dim = action_dim
self.memory = deque(maxlen=10000)
self.gamma = 0.95 # discount factor
self.epsilon = 1.0 # exploration rate
self.epsilon_min = 0.01
self.epsilon_decay = 0.995
self.model = DQN(state_dim, action_dim)
self.optimizer = optim.Adam(self.model.parameters(), lr=0.001)
def remember(self, state, action, reward, next_state, done):
self.memory.append((state, action, reward, next_state, done))
def act(self, state):
if np.random.rand() <= self.epsilon:
return random.randrange(self.action_dim)
state = torch.FloatTensor(state).unsqueeze(0)
act_values = self.model(state)
return torch.argmax(act_values).item()
def replay(self, batch_size):
if len(self.memory) < batch_size:
return
minibatch = random.sample(self.memory, batch_size)
states = torch.FloatTensor(np.array([t[0] for t in minibatch]))
actions = torch.LongTensor(np.array([t[1] for t in minibatch]))
rewards = torch.FloatTensor(np.array([t[2] for t in minibatch]))
next_states = torch.FloatTensor(np.array([t[3] for t in minibatch]))
dones = torch.FloatTensor(np.array([t[4] for t in minibatch]))
current_q = self.model(states).gather(1, actions.unsqueeze(1))
next_q = self.model(next_states).max(1)[0].detach()
target = rewards + (1 - dones) * self.gamma * next_q
loss = nn.MSELoss()(current_q.squeeze(), target)
self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
if self.epsilon > self.epsilon_min:
self.epsilon *= self.epsilon_decay
3.2 基于策略的方法:PPO算法
import torch
import torch.nn as nn
import torch.optim as optim
from torch.distributions import Categorical
import numpy as np
class PolicyNetwork(nn.Module):
def __init__(self, state_dim, action_dim):
super(PolicyNetwork, self).__init__()
self.fc1 = nn.Linear(state_dim, 128)
self.fc2 = nn.Linear(128, 128)
self.fc3 = nn.Linear(128, action_dim)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return torch.softmax(self.fc3(x), dim=-1)
class ValueNetwork(nn.Module):
def __init__(self, state_dim):
super(ValueNetwork, self).__init__()
self.fc1 = nn.Linear(state_dim, 128)
self.fc2 = nn.Linear(128, 128)
self.fc3 = nn.Linear(128, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return self.fc3(x)
class PPOAgent:
def __init__(self, state_dim, action_dim):
self.policy = PolicyNetwork(state_dim, action_dim)
self.value_net = ValueNetwork(state_dim)
self.optimizer_policy = optim.Adam(self.policy.parameters(), lr=3e-4)
self.optimizer_value = optim.Adam(self.value_net.parameters(), lr=1e-3)
self.gamma = 0.99
self.clip_epsilon = 0.2
self.n_epochs = 4
def get_action(self, state):
state = torch.FloatTensor(state)
probs = self.policy(state)
dist = Categorical(probs)
action = dist.sample()
log_prob = dist.log_prob(action)
return action.item(), log_prob.item()
def compute_returns(self, rewards, dones, last_value):
returns = np.zeros_like(rewards)
advantage = np.zeros_like(rewards)
R = last_value
for t in reversed(range(len(rewards))):
R = rewards[t] + self.gamma * R * (1 - dones[t])
returns[t] = R
return returns
def update(self, states, actions, old_log_probs, returns, advantages):
states = torch.FloatTensor(states)
actions = torch.LongTensor(actions)
old_log_probs = torch.FloatTensor(old_log_probs)
returns = torch.FloatTensor(returns)
advantages = torch.FloatTensor(advantages)
for _ in range(self.n_epochs):
# Update policy
current_probs = self.policy(states)
dist = Categorical(current_probs)
new_log_probs = dist.log_prob(actions)
ratio = (new_log_probs - old_log_probs).exp()
clipped_ratio = torch.clamp(ratio, 1-self.clip_epsilon, 1+self.clip_epsilon)
policy_loss = -torch.min(ratio * advantages, clipped_ratio * advantages).mean()
self.optimizer_policy.zero_grad()
policy_loss.backward()
self.optimizer_policy.step()
# Update value function
values = self.value_net(states).squeeze()
value_loss = (returns - values).pow(2).mean()
self.optimizer_value.zero_grad()
value_loss.backward()
self.optimizer_value.step()
3.3 算法选择与比较
| 算法特性 | Q-Learning | Policy Gradient | PPO |
|---|---|---|---|
| 学习方式 | 价值迭代 | 策略迭代 | 策略迭代 |
| 探索策略 | ε-贪心 | 随机采样 | 随机采样 |
| 稳定性 | 中等 | 较低 | 高 |
| 样本效率 | 较低 | 中等 | 较高 |
| 适用场景 | 离散动作空间 | 连续/离散动作空间 | 连续/离散动作空间 |
| 超参数敏感度 | 高 | 很高 | 中等 |
4. 数学模型和公式 & 详细讲解 & 举例说明
4.1 马尔可夫决策过程(MDP)基础
MDP由五元组 (S,A,P,R,γ)(S, A, P, R, \gamma)(S,A,P,R,γ) 构成:
- SSS: 状态空间
- AAA: 行动空间
- P(s′∣s,a)P(s'|s,a)P(s′∣s,a): 转移概率
- R(s,a,s′)R(s,a,s')R(s,a,s′): 奖励函数
- γ\gammaγ: 折扣因子(0≤γ≤1)
贝尔曼方程:
Vπ(s)=∑a∈Aπ(a∣s)∑s′∈SP(s′∣s,a)[R(s,a,s′)+γVπ(s′)]V^\pi(s) = \sum_{a \in A} \pi(a|s) \sum_{s' \in S} P(s'|s,a)[R(s,a,s') + \gamma V^\pi(s')]Vπ(s)=a∈A∑π(a∣s)s′∈S∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′)]
其中 Vπ(s)V^\pi(s)Vπ(s) 表示在策略 π\piπ 下状态 sss 的价值。
4.2 Q-Learning的数学原理
Q-Learning通过迭代更新Q值来学习最优策略:
Q(st,at)←Q(st,at)+α[rt+1+γmaxaQ(st+1,a)−Q(st,at)]Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha[r_{t+1} + \gamma \max_a Q(s_{t+1},a) - Q(s_t,a_t)]Q(st,at)←Q(st,at)+α[rt+1+γamaxQ(st+1,a)−Q(st,at)]
其中:
- α\alphaα 是学习率
- γ\gammaγ 是折扣因子
- rt+1r_{t+1}rt+1 是即时奖励
举例说明:
假设一个简单的网格世界:
- 状态:网格位置 (x,y)
- 行动:上、下、左、右
- 奖励:到达目标+10,碰到障碍-5,其他-1
初始Q值全为0,Agent从(0,0)出发,目标在(2,2)。经过几次探索后,Q值会逐渐收敛到最优路径的值。
4.3 策略梯度定理
策略梯度算法直接优化策略参数 θ\thetaθ:
∇θJ(θ)=Eπθ[∇θlogπθ(a∣s)Qπθ(s,a)]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(a|s) Q^{\pi_\theta}(s,a)]∇θJ(θ)=Eπθ[∇θlogπθ(a∣s)Qπθ(s,a)]
其中 J(θ)J(\theta)J(θ) 是期望回报:
J(θ)=Eτ∼πθ[R(τ)]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)]J(θ)=Eτ∼πθ[R(τ)]
PPO的目标函数:
LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \mathbb{E}_t[\min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t)]LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中:
- rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}rt(θ)=πθold(at∣st)πθ(at∣st)
- A^t\hat{A}_tA^t 是优势函数估计
4.4 LLM与RL结合的数学框架
将LLM作为策略网络:
πθ(a∣s)=LLMθ(s)\pi_\theta(a|s) = \text{LLM}_\theta(s)πθ(a∣s)=LLMθ(s)
优化目标:
maxθEπθ[∑t=0Tγtrt]\max_\theta \mathbb{E}_{\pi_\theta}[\sum_{t=0}^T \gamma^t r_t]θmaxEπθ[t=0∑Tγtrt]
使用策略梯度:
∇θJ(θ)=E[∑t=0T∇θlogπθ(at∣st)Rt]\nabla_\theta J(\theta) = \mathbb{E}[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) R_t]∇θJ(θ)=E[t=0∑T∇θlogπθ(at∣st)Rt]
5. 项目实战:代码实际案例和详细解释说明
5.1 开发环境搭建
硬件要求:
- GPU: NVIDIA RTX 3080或更高
- RAM: 32GB或更高
- 存储: 1TB SSD
软件依赖:
conda create -n rl_llm python=3.9
conda activate rl_llm
pip install torch==1.13.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
pip install transformers==4.28.1 gym==0.26.2 numpy pandas tqdm
5.2 源代码详细实现:RL微调LLM
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
from torch.optim import AdamW
from collections import deque
import numpy as np
import random
class RLHF_GPT:
def __init__(self, model_name="gpt2"):
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
self.tokenizer = GPT2Tokenizer.from_pretrained(model_name)
self.tokenizer.pad_token = self.tokenizer.eos_token
self.model = GPT2LMHeadModel.from_pretrained(model_name).to(self.device)
self.optimizer = AdamW(self.model.parameters(), lr=5e-6)
self.memory = deque(maxlen=1000)
self.gamma = 0.99
self.entropy_coef = 0.01
def generate_response(self, prompt, max_length=50):
inputs = self.tokenizer(prompt, return_tensors="pt").to(self.device)
with torch.no_grad():
outputs = self.model.generate(
**inputs,
max_length=max_length,
pad_token_id=self.tokenizer.eos_token_id,
do_sample=True,
top_k=50,
top_p=0.95
)
return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
def get_reward(self, prompt, response):
# 这里实现自定义的奖励函数
# 可以是基于规则、分类器或人工反馈
fluency = self._calculate_fluency(response)
relevance = self._calculate_relevance(prompt, response)
safety = self._calculate_safety(response)
return 0.4*fluency + 0.4*relevance + 0.2*safety
def _calculate_fluency(self, text):
# 使用语言模型计算流畅度得分
inputs = self.tokenizer(text, return_tensors="pt").to(self.device)
with torch.no_grad():
outputs = self.model(**inputs, labels=inputs["input_ids"])
loss = outputs.loss.item()
return np.exp(-loss) # 将困惑度转换为0-1分数
def remember(self, prompt, response, reward):
self.memory.append((prompt, response, reward))
def train_step(self, batch_size=8):
if len(self.memory) < batch_size:
return
batch = random.sample(self.memory, batch_size)
prompts, responses, rewards = zip(*batch)
# 计算策略梯度
self.model.train()
loss_values = []
for prompt, response, reward in zip(prompts, responses, rewards):
inputs = self.tokenizer(prompt + response, return_tensors="pt").to(self.device)
outputs = self.model(**inputs, labels=inputs["input_ids"])
logits = outputs.logits
labels = inputs["input_ids"]
# 计算对数概率
log_probs = torch.log_softmax(logits, dim=-1)
selected_log_probs = torch.gather(
log_probs[:, :-1, :],
dim=2,
index=labels[:, 1:].unsqueeze(2)
).squeeze(2)
# 计算损失
loss = -selected_log_probs.mean() * reward
# 添加熵正则化
probs = torch.softmax(logits, dim=-1)
entropy = -(probs * torch.log(probs + 1e-10)).sum(-1).mean()
loss -= self.entropy_coef * entropy
loss_values.append(loss.item())
# 反向传播
loss.backward()
# 更新参数
torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1.0)
self.optimizer.step()
self.optimizer.zero_grad()
return np.mean(loss_values)
5.3 代码解读与分析
-
初始化部分:
- 加载预训练的GPT-2模型和tokenizer
- 设置优化器和经验回放缓冲区
- 定义RL超参数(折扣因子、熵系数)
-
响应生成:
- 使用标准的自回归生成方法
- 采用top-k和top-p采样增加多样性
- 确保生成结果不包含特殊token
-
奖励计算:
- 综合流畅度、相关性和安全性三个维度
- 流畅度使用模型自身的困惑度评估
- 相关性和安全性需要自定义实现
-
训练过程:
- 从经验回放中采样批次数据
- 计算每个token的对数概率
- 使用奖励加权策略梯度
- 添加熵正则化防止策略过早收敛
- 梯度裁剪保证训练稳定性
-
关键技巧:
- 小学习率(5e-6)避免破坏预训练知识
- 经验回放减少样本相关性
- 熵正则化保持探索能力
- 多维度奖励设计引导期望行为
6. 实际应用场景
6.1 对话系统优化
-
客服机器人:
- 目标:提高问题解决率和用户满意度
- 奖励信号:对话成功率、用户评分、对话轮次
- 挑战:长程依赖、多轮对话一致性
-
社交伴侣:
- 目标:保持有趣且恰当的对话
- 奖励信号:参与度、情感正向性、安全合规
- 挑战:主观性评估、文化差异
6.2 游戏AI开发
-
NPC行为设计:
- 目标:创造逼真且有趣的NPC行为
- 奖励信号:玩家互动质量、任务完成度
- 挑战:开放世界复杂性、多目标平衡
-
剧情生成:
- 目标:生成连贯且吸引人的游戏剧情
- 奖励信号:玩家选择一致性、情节吸引力
- 挑战:长期一致性、分支剧情管理
6.3 内容生成与创作
-
广告文案生成:
- 目标:提高点击率和转化率
- 奖励信号:历史CTR数据、人工评分
- 挑战:创意与规范的平衡
-
故事创作辅助:
- 目标:生成符合要求的创意内容
- 奖励信号:结构完整性、新颖性评分
- 挑战:主观评价的量化
6.4 教育应用
-
个性化辅导:
- 目标:根据学生反馈调整教学策略
- 奖励信号:学习成效、参与度
- 挑战:个性化评估、教育伦理
-
自动评分系统:
- 目标:提供准确且建设性的反馈
- 奖励信号:与专家评分一致性
- 挑战:主观题评估、公平性
7. 工具和资源推荐
7.1 学习资源推荐
7.1.1 书籍推荐
- 《Reinforcement Learning: An Introduction》 - Richard S. Sutton
- 《Deep Reinforcement Learning Hands-On》 - Maxim Lapan
- 《Foundation Models for Natural Language Processing》 - Gerhard Paaß
7.1.2 在线课程
- Deep Reinforcement Learning (UC Berkeley)
- Advanced NLP with spaCy (Explosion)
- Hugging Face Transformers 官方课程
7.1.3 技术博客和网站
- OpenAI Blog (https://openai.com/blog/)
- DeepMind Research (https://deepmind.com/research)
- Hugging Face Blog (https://huggingface.co/blog)
7.2 开发工具框架推荐
7.2.1 IDE和编辑器
- VS Code + Jupyter扩展
- PyCharm Professional
- Google Colab Pro
7.2.2 调试和性能分析工具
- PyTorch Profiler
- Weights & Biases (wandb)
- TensorBoard
7.2.3 相关框架和库
- Transformers (Hugging Face)
- RLlib (Ray)
- Stable Baselines3
- TRL (Transformer Reinforcement Learning)
7.3 相关论文著作推荐
7.3.1 经典论文
- “Attention Is All You Need” - Vaswani et al.
- “Proximal Policy Optimization Algorithms” - Schulman et al.
- “Deep Reinforcement Learning from Human Preferences” - Christiano et al.
7.3.2 最新研究成果
- “Training Language Models to Follow Instructions with Human Feedback” - OpenAI
- “Scaling Laws for Reward Model Overoptimization” - OpenAI
- “Chain of Hindsight Aligns Language Models with Feedback” - Liu et al.
7.3.3 应用案例分析
- “ChatGPT: Optimizing Language Models for Dialogue”
- “Sparrow: Improving Alignment through Human Feedback”
- “InstructGPT: Aligning Language Models to Follow Instructions”
8. 总结:未来发展趋势与挑战
8.1 发展趋势
-
更大规模的RLHF:
- 千亿参数模型的强化学习微调
- 分布式RL训练框架的优化
- 混合人类-AI反馈系统
-
多模态扩展:
- 文本与视觉、音频结合的RL训练
- 跨模态奖励信号设计
- 3D环境中的具身学习
-
终身学习架构:
- 持续学习不忘记原有知识
- 自动调整的探索-利用平衡
- 灾难性遗忘的解决方案
-
可解释RL:
- 决策过程的透明化
- 奖励分解与归因分析
- 安全约束的形式化验证
8.2 主要挑战
-
奖励设计难题:
- 多目标权衡的量化
- 长期回报的信用分配
- 奖励黑客(Reward Hacking)防范
-
样本效率:
- 真实世界交互的高成本
- 模拟到现实的迁移
- 小样本RL算法
-
安全与对齐:
- 价值观对齐的挑战
- 有害内容的预防
- 不可逆行为的控制
-
评估体系:
- 超越表面指标的深度评估
- 人类偏好的动态性
- 文化差异的处理
9. 附录:常见问题与解答
Q1:RLHF与监督微调的主要区别是什么?
A1:关键区别在于学习信号来源:
- 监督学习使用"正确"答案作为目标
- RLHF使用标量奖励信号评估输出质量
- RLHF能处理更模糊、多目标的任务
- 监督学习通常需要更多标注数据
Q2:如何设计有效的奖励函数?
A2:好的奖励设计原则:
- 分层设计:将总奖励分解为可解释的子奖励
- 平衡短期和长期回报
- 加入安全约束项
- 定期进行对抗测试
- 结合人工评估进行校准
Q3:为什么PPO在RLHF中如此流行?
A3:PPO的优势包括:
- 策略更新受限,训练更稳定
- 支持连续和离散动作空间
- 样本效率相对较高
- 超参数调节相对简单
- 适合并行化实现
Q4:如何处理RL训练中的高方差问题?
A4:降低方差的方法:
- 使用优势归一化(Advantage Normalization)
- 实现GAE(Generalized Advantage Estimation)
- 增加批处理大小
- 使用多个并行环境收集样本
- 添加合适的基线函数
Q5:如何评估RL优化后的LLM性能?
A5:推荐的多维度评估:
- 自动化指标:BLEU, ROUGE, 困惑度
- 人类评估:相关性、流畅性、安全性
- A/B测试:实际业务指标对比
- 对抗测试:寻找失败案例
- 长期交互评估:一致性检查
10. 扩展阅读 & 参考资料
- OpenAI官方RLHF文档:https://openai.com/research/learning-from-human-preferences
- Hugging Face TRL库文档:https://huggingface.co/docs/trl/index
- DeepMind Safety研究:https://deepmind.com/safety-research
- Anthropic对齐研究:https://www.anthropic.com/research
- 《Scaling Laws for Neural Language Models》 - Kaplan et al.
- 《Reward Design via Online Preference Elicitation》 - Sadigh et al.
- 《The Alignment Problem from a Deep Learning Perspective》 - Ngo et al.
更多推荐

所有评论(0)