ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

强化学习没有奖励怎么训练?四种替代路径与实战代码全解析

强化学习没有奖励怎么训练?四种替代路径与实战代码全解析 强化学习无需可验证奖励如何在没有明确 Reward 的环境里训练 Agent如果你做过强化学习项目大概率遇到过这样一个尴尬时刻算法选好了环境也搭好了但 Rewards 怎么设计都想不明白。机械臂要让工件精准插入孔位你该怎么用数字告诉 Agent“差一点点”也算进步大语言模型要生成符合人类偏好的回答又该怎么给每句话打一个分很多入门教程告诉你“RL 就是最大化累积奖励”但现实里最大的难点恰恰是奖励根本没有现成定义。这篇文章想讨论的是一个更贴近真实工程的问题当环境不提供可验证奖励Verifiable Rewards时强化学习还能不能学如果能应该用什么思路来替代传统 RLHF 依赖一个显式奖励函数但它在很多 Agent 场景里并不存在。我们需要找到一条让强化学习脱离“数学老师式打分”也能继续工作的路径。读完这篇文章你会理解可验证奖励与不可验证奖励的本质差异掌握用偏好反馈、奖励模型、过程监督和基于模型的方案来替代显式奖励的核心思路并用一份可运行的 Python Demo 把“偏好学习 奖励模型 策略训练”的闭环跑通。无论你正准备做强化学习入门还是已经在机械臂、对话 Agent、推荐系统项目里被奖励设计折磨过这篇文章都能给你一个可落地的参考框架。1. 为什么“无需可验证奖励”是强化学习的真问题先看两个最典型的工程场景。第一个是机器人或机械臂控制。你希望机械臂学会把零件装配到指定位置从技术上讲这就是一个连续动作控制问题。传统做法会设计一个距离函数比如计算末端执行器与目标位置的欧氏距离再取个负号当作奖励。但实际装配过程里“接近目标”并不一定等于“装配成功”距离小了 1 毫米和距离小了 10 毫米可能是完全不同的难度。你手工设计的奖励函数很可能会诱导 Agent 学会“把手靠近但不插入”因为这样它能稳定获得较高的中间奖励。这就是奖励设计中著名的 reward hacking 问题。第二个是对话 Agent 或 LLM 对齐。要让模型输出更符合人类意图的回答问题比机械臂更麻烦——你根本无法精确定义“回答好不好”的数学公式。传统做法是人工对模型输出打分再训练一个奖励模型来模拟人类打分。但这里也包含两个深层问题一是奖励模型本身有偏差二是人类偏好本身存在不一致。如果你真的去问三个标注员同一个回答值 3 分还是 5 分大概率会得到三个不同答案。所以“无需可验证奖励”并不是一个炫技话题而是工程上绕不开的约束。很多强化学习项目进度卡在 30%不是因为 PPO 不会写也不是因为训练显存不够而是团队花了两周时间去定义那个根本定义不清楚的 reward。从这个角度看掌握“没有奖励怎么训练”的能力比多背几个算法公式更能提升项目的存活率。为什么我说这是 AI Engineer 的必备视角因为 AI Engineer 的工作和算法研究员不太一样你面对的是业务需求、模型缺陷和资源预算的三角约束。你不太可能为了每个环境都去设计一套精细化的奖励公式更常见的情况是只有一堆人工标注数据、一段用户行为日志或者一个能跑起来的模拟器。学会在信号弱、反馈稀疏、奖励不明确的情况下训练 Agent才是工程能力的分水岭。2. 可验证奖励与不可验证奖励先分清两类信号要讨论“无需可验证奖励”必须先搞清楚“验证”到底指什么。可验证奖励Verifiable Rewards是指 Agent 每步动作都能得到一个由环境规则严格确定的数值反馈并且这个反馈可以被程序或者数学公式精确验证。比如围棋对局的最终胜负、Atari 游戏里的得分、推荐系统里用户是否点击这些都是可验证奖励。它的核心特点是定义清楚、计算确定、无法被轻易钻空子至少在规则层面。不可验证奖励Non-verifiable Rewards则指那些无法用单一数学表达式描述的反馈信号。它通常来自人类主观判断、语义理解、模糊的相似度计算等。例如“这句回答是否友好”“这段代码是否优雅”“机械臂的装配姿态是否稳健”这些都很难用一行代码验证。它们不是不存在反馈而是反馈很模糊、有很多维度、甚至因评估者不同而不同。对比维度可验证奖励不可验证奖励定义方式公式/规则明确依赖人类或模型主观判断获取成本环境直接返回需要人工标注或模型评估可复现性高相同动作必得相同分数低评分可能随时间或标注者变化典型场景围棋、游戏、点击率对话质量、代码风格、装配姿态被 hack 风险较低规则明确较高容易钻模型盲区从训练角度看二者的差异不是“有没有反馈”而是“反馈的信息量能支撑什么样的算法”。可验证奖励可以直接喂给 PPO、SAC、Q-Learning 这类经典算法而不可验证奖励需要先被“翻译”成一个可计算的目标函数然后再进入强化学习框架。很多时候大家讨论“强化学习无法落地”时表面理由是“环境太复杂”本质原因是“没有可验证奖励”。游戏场景里环境自带算分逻辑所以训练轻松而实际业务系统很少自带评分器你需要自己构造一个“评分器”。这个“评分器”到底从哪来就是无需可验证奖励的核心问题所在。3. 没有显式奖励时的四条替代路径没有环境给出的显式奖励不等于彻底放弃强化学习。学术界和工业界目前已经沉淀出四条可行路径每条路径背后都有不同的假设和适合场景。3.1 路径一偏好反馈 奖励模型这是 RLHF基于人类反馈的强化学习和 RLAIF基于 AI 反馈的强化学习的核心思路。环境不直接给分数但人可以比较两个输出哪个更好。例如给出一段提示词然后让标注员或一个大模型在两个回答中选择更优的一个。收集大量这样的比较数据后训练一个奖励模型输入一段状态和动作输出一个模拟奖励值。这条路径的优点是标注成本相对可控二选一比打分更容易达成共识。缺点是奖励模型的准确性会直接限制策略上限如果奖励模型本身学偏了后续策略再怎么优化都是在错误的评分标准上做文章。3.2 路径二逆强化学习IRL逆强化学习的思路是不直接学策略而是从专家示范中反推奖励函数。假设你有一批专家轨迹这些轨迹代表“合格行为”IRL 会找出一组奖励函数使得专家轨迹的累积回报高于其他任意轨迹。之后再把学到的奖励函数交给标准 RL 算法继续训练。这条路径适合专家示范容易获得、但奖励难以定义的任务例如自动驾驶的跟车策略、机器人模仿人类动作。缺点是对专家数据质量要求很高而且奖励函数的可辨识性identifiability在数学上一直是个问题。3.3 路径三过程奖励模型PRM过程奖励模型不是训练一个全局总奖励而是对中途每一步的状态质量单独打分。例如在数学推理任务中你很难给“最终答案”之前的每一步打分但可以用 PRM 对每一步推理的正确性给出一个概率预测。这样做的好处是缓解稀疏奖励问题让 Agent 能更早地获得学习信号。这条路径在 LLM 推理优化、数学解题等场景中已经有不少实践。难点在于过程级标注数据非常贵而且“这一步是否正确”在很多场景里并没有绝对答案。3.4 路径四基于模型的强化学习MBRL基于模型的强化学习Model-based RL通常指学习一个环境动态模型用这个模型来预测未来状态和奖励。当真实奖励缺失时可以先用少量数据学一个“近似环境”然后在近似环境里做规划或策略优化用模型输出的奖励代替真实奖励。这条路径的优点是样本效率高可以利用 Agent 与环境的每一次交互生成大量虚拟经验。缺点是环境模型一旦有偏学习到的策略就会在真实环境中失效。这也是很多 MBRL 项目从仿真到真机迁移时会遇到的问题。3.5 四条路径怎么选替代路径核心输入最适合场景最大风险偏好反馈 奖励模型轨迹两两比较对话、生成式任务奖励模型带偏逆强化学习 IRL专家示范轨迹机器人控制、决策策略专家数据获取难过程奖励模型 PRM步骤级标注数学推理、代码生成标注成本高基于模型 MBRL环境交互数据仿真环境、样本稀缺场景模型偏差累积如果是第一次接触“无需可验证奖励”我最推荐先学偏好反馈 奖励模型。这条链路和当前 LLM 对齐方向直接相关工具链相对成熟而且你不需要一开始就面对 IRL 的数学复杂性和 MBRL 的模型偏差问题。4. 方案设计偏好反馈 奖励模型如何替代显式奖励我们选定了“偏好反馈 奖励模型”这条路接下来把它拆解成可执行的流程。整个方案会以经典 CartPole 问题为例但有一处关键改动去掉环境原始的 reward取而代之的是一条“偏好判别器”。Agent 与环境交互后我们不再用环境打分而是用偏好判别器生成训练信号。具体流程分为四步第一步准备一个无奖励环境。我们依然使用 CartPole 的动力学模型但丢弃它自带的 reward 返回值。这样 Agent 能观察到状态变化但得不到任何“做得好不好”的数字反馈。第二步构造偏好样本。我们可以让一个规则函数或者一个更大的模型来判断给定同一段轨迹的起点分别用随机策略和简单维持平衡策略各跑一段哪段更“稳定”。这里的“稳定”就是取代 reward 的偏好信号。第三步训练奖励模型。把轨迹两两比较的数据集交给一个神经网络输入是状态和动作输出是奖励值。训练目标是让“更好”的轨迹获得更高的预测奖励。第四步用奖励模型替代环境奖励训练策略。当奖励模型训练好后把它当成一个静态的奖励函数接入标准的 PPO 或策略梯度算法中更新 Agent 的参数。这个方案的核心逻辑是把“无法定义的奖励”转换成“可以定义的偏好”再把偏好转换成“可计量的奖励模型”。从算法角度看这等于把学习目标从环境给分改成了模型猜想分所以奖励模型的质量是整个方案的命门。你会发现这里有一个很微妙的地方这不是“不用奖励”而是“奖励从哪来”的问题变了。传统的奖励来自环境这里的奖励来自一个学出来的模型。所以“无需可验证奖励”更准确的说法是不需要环境提供可验证奖励但需要一个可学习的近似奖励来源。5. 环境准备与工具链选型接下来进入实操部分。本文的 Demo 用 Python 实现核心依赖如下Python 3.9 或更高版本版本以你本机实际为准NumPy用于数值计算Gymnasium提供 CartPole 环境和基础 RL APIPyTorch用于搭建奖励模型和策略网络运行环境可以是 Windows、Linux 或 macOS。建议在开始之前先准备一个虚拟环境避免依赖冲突。安装命令如下python -m venv rl_without_vr_env source rl_without_vr_env/bin/activate # Linux/macOS # 或 rl_without_vr_env\Scripts\activate # Windows pip install numpy gymnasium torch如果你的机器有 NVIDIA GPU并且已经安装好 CUDA 版的 PyTorch可以把上面的torch替换为对应 CUDA 版本安装命令。没有 GPU 也没关系本文的 Demo 在 CPU 上完全可以跑通只是训练时间稍长。需要注意Gymnasium 从 0.26 版本开始对 API 做了调整主要是reset函数返回(observation, info)而不是单个 observation。如果你是从旧版 Gym0.21 及以下迁移过来的先确认 API 差异否则第一步就会报错。6. 代码实现从零搭建无显式奖励的强化学习 Demo下面我们把方案落到代码上。整个 Demo 会分成三个脚本或三个代码块你可以按顺序运行。先说明一下为了降低入门门槛这里刻意绕开了复杂的 PPO 实现而是用简单策略梯度 一个小型奖励网络完成闭环。工程化时再把算法替换为更稳定的实现。6.1 生成偏好数据集第一步是生成一批“轨迹对”并给出偏好标签。这里的技巧是先在一个标准 CartPole 环境里跑随机策略记录完整轨迹再用一个保持单摆直立的简单规则策略跑轨迹最后把这两条轨迹表现为“后者优于前者”。为了让偏好信号接近真实场景我们不直接使用环境 reward而是根据轨迹长度来判断好坏在 CartPole 问题中持续的时间越长说明稳定性越好。这相当于模拟了一个“外部评估者”。# 文件路径generate_preferences.py import numpy as np import gymnasium as gym def run_episode(env, policy): obs, _ env.reset() trajectory [] done False while not done: action policy(obs) next_obs, _, terminated, truncated, _ env.step(action) trajectory.append((obs, action)) obs next_obs if terminated or truncated: break return trajectory def random_policy(obs): return env.action_space.sample() def stable_policy(obs): # 简单规则杆子向左倒就向右推向右倒就向左推 return 1 if obs[2] 0 else 0 env gym.make(CartPole-v1) preference_data [] for _ in range(2000): traj_a run_episode(env, random_policy) traj_b run_episode(env, stable_policy) # 以轨迹长度作为“外部偏好”依据 if len(traj_a) len(traj_b): better_traj traj_a worse_traj traj_b else: better_traj traj_b worse_traj traj_a # 只取前 20 步避免轨迹过长导致计算压力 better_traj better_traj[:20] worse_traj worse_traj[:20] preference_data.append((better_traj, worse_traj)) np.save(preference_data.npy, np.array(preference_data, dtypeobject)) print(f生成偏好数据完成共 {len(preference_data)} 组轨迹对)这段代码做了三件事两种策略各跑成百上千条轨迹按轨迹长度判断哪段“更优秀”把成对轨迹保存到本地。这里刻意没有使用环境的 reward所有偏好信号都来自轨迹长度比较这就是“偏好反馈”概念的简化版。6.2 训练奖励模型第二步是训练一个奖励模型。输入是状态和动作输出是一个标量奖励。训练目标是最小化 Bradley-Terry 排序损失给定一对轨迹模型给“更好的那条”打出的累积奖励要大于“更差的那条”。# 文件路径train_reward_model.py import numpy as np import torch import torch.nn as nn import torch.optim as optim class RewardModel(nn.Module): def __init__(self, obs_dim, action_dim): super().__init__() self.net nn.Sequential( nn.Linear(obs_dim action_dim, 64), nn.ReLU(), nn.Linear(64, 64), nn.ReLU(), nn.Linear(64, 1) ) def forward(self, obs, action): x torch.cat([obs, action], dim-1) return self.net(x) def load_data(): raw np.load(preference_data.npy, allow_pickleTrue) better_list [] worse_list [] for better_traj, worse_traj in raw: better_list.extend(better_traj) worse_list.extend(worse_traj) return better_list, worse_list def train(): obs_dim 4 action_dim 1 model RewardModel(obs_dim, action_dim) optimizer optim.Adam(model.parameters(), lr1e-3) better_list, worse_list load_data() # 将列表转为 Tensor better_obs torch.tensor(np.array([x[0] for x in better_list]), dtypetorch.float32) better_act torch.tensor(np.array([x[1] for x in better_list]), dtypetorch.float32).unsqueeze(1) worse_obs torch.tensor(np.array([x[0] for x in worse_list]), dtypetorch.float32) worse_act torch.tensor(np.array([x[1] for x in worse_list]), dtypetorch.float32).unsqueeze(1) for epoch in range(50): optimizer.zero_grad() # 分别计算“更好”和“更差”轨迹的预测总奖励 better_reward model(better_obs, better_act).sum() worse_reward model(worse_obs, worse_act).sum() # Bradley-Terry 排序损失让好轨迹的总分高于差轨迹 loss -torch.log(torch.sigmoid(better_reward - worse_reward) 1e-6) loss.backward() optimizer.step() if (epoch 1) % 10 0: print(fEpoch {epoch 1}, Loss: {loss.item():.4f}) torch.save(model.state_dict(), reward_model.pth) if __name__ __main__: train()奖励模型的训练目标不是精确拟合某个分数而是保持“好轨迹分数 差轨迹分数”的相对关系。这种相对关系训练方式有一个好处它不需要绝对标注只要标注员或 AI 评估者能区分两段轨迹的下限即可。6.3 用奖励模型训练策略第三步是核心把训练好的奖励模型当作环境的奖励替代物驱动策略梯度算法学习。为了让代码清晰这里使用简单的 REINFORCE 算法对环境每一步执行动作后用奖励模型给出预测奖励再对整条轨迹的折扣回报做策略梯度更新。# 文件路径train_policy.py import numpy as np import torch import torch.nn as nn import torch.optim as optim import gymnasium as gym from train_reward_model import RewardModel class PolicyNet(nn.Module): def __init__(self, obs_dim, action_dim): super().__init__() self.net nn.Sequential( nn.Linear(obs_dim, 64), nn.ReLU(), nn.Linear(64, 64), nn.ReLU(), nn.Linear(64, action_dim) ) def forward(self, obs): logits self.net(obs) return torch.distributions.Categorical(logitslogits) def compute_returns(rewards, gamma0.99): returns [] R 0 for r in reversed(rewards): R r gamma * R returns.insert(0, R) return torch.tensor(returns, dtypetorch.float32) def main(): env gym.make(CartPole-v1) obs_dim env.observation_space.shape[0] action_dim env.action_space.n # 加载训练好的奖励模型 reward_model RewardModel(obs_dim, 1) reward_model.load_state_dict(torch.load(reward_model.pth, map_locationcpu)) reward_model.eval() policy PolicyNet(obs_dim, action_dim) optimizer optim.Adam(policy.parameters(), lr1e-3) for episode in range(100): obs, _ env.reset() done False log_probs [] rewards [] while not done: obs_tensor torch.tensor(obs, dtypetorch.float32).unsqueeze(0) dist policy(obs_tensor) action dist.sample() log_prob dist.log_prob(action) # 用奖励模型预测奖励代替环境 reward act_tensor action.float().unsqueeze(0).unsqueeze(1) with torch.no_grad(): reward reward_model(obs_tensor, act_tensor).item() next_obs, _, terminated, truncated, _ env.step(action.item()) log_probs.append(log_prob) rewards.append(reward) obs next_obs if terminated or truncated: break returns compute_returns(rewards) log_probs_tensor torch.stack(log_probs) # 策略梯度更新 policy_loss -(log_probs_tensor * (returns - returns.mean())).sum() optimizer.zero_grad() policy_loss.backward() optimizer.step() if (episode 1) % 10 0: print(fEpisode {episode 1}, Reward Model Total: {np.sum(rewards):.4f}) if __name__ __main__: main()这里有个很容易踩的坑action.float().unsqueeze(0).unsqueeze(1)看起来有点绕实际上是在把单个动作值整理成奖励模型期望的(1, 1)形状。如果你在实现时对 Tensor 维度不敏感建议多打印shape确认。整体来看这三段代码构成了一个完整的无显式奖励闭环偏好数据集生成、奖励模型训练、基于奖励模型指导策略优化。它不是工业级实现但已经具备理解“无需可验证奖励的强化学习”的全部要素。7. 运行结果与效果验证按顺序运行三个脚本后你会看到奖励模型训练的 Loss 逐渐下降策略训练的输出也会有数值变化。但这里更重要的不是“数字下降”而是通过三个维度验证方案是否真的有效。第一验证奖励模型是否学到偏好。可以在奖励模型训练完成后手动构造两组状态动作一组是“杆子角度接近 0 且速度较小”的稳定状态另一组是“杆子角度很大”的危险状态分别查一下奖励模型的输出。如果稳定状态得分明显更高说明奖励模型已经学到了“保持平衡更安全”这个偏好。import torch from train_reward_model import RewardModel model RewardModel(4, 1) model.load_state_dict(torch.load(reward_model.pth, map_locationcpu)) model.eval() stable_state torch.tensor([[0.0, 0.0, 0.05, 0.0]], dtypetorch.float32) danger_state torch.tensor([[0.0, 0.0, 1.2, 2.0]], dtypetorch.float32) a0 torch.tensor([[0.0]], dtypetorch.float32) print(稳定状态奖励:, model(stable_state, a0).item()) print(危险状态奖励:, model(danger_state, a0).item())如果稳定状态得分大于危险状态得分说明最基本的偏好约束已经成立。第二对比最终策略和随机策略的“真实表现”。在策略训练结束后可以让学到的策略和随机策略各运行 100 个回合统计平均轨迹长度。如果学到的策略平均轨迹长度明显更长说明虽然训练时没有使用环境 reward但策略依然在真实环境里获得了更好的表现。这是整个方案最有说服力的证据。第三关注训练方差。无显式奖励方案通常会比标准 RL 方差更大原因是奖励模型本身有随机性。因此单次训练效果不好不要直接判定方案失败建议多做几次随机种子实验对比平均表现。从实际经验看这个简化 Demo 在 CPU 上完整跑完可能需要 5 到 15 分钟主要耗时在奖励模型训练策略时的采样阶段。如果运行失败先把错误日志打开按下一节的排查表逐项检查。8. 常见问题与排查思路问题现象可能原因排查方式解决方案安装依赖时报错Python 版本或 pip 版本不兼容查看 pip 脚本完整报错升级 pip或换用 Python 3.9 虚拟环境reset()返回元组数量不对Gymnasium 版本或 Gym 旧版 API 不一致打印env.reset()结果改为obs, _ env.reset()奖励模型 Loss 不下降数据量太少或轨迹本身不够有区分度打印 better_reward 和 worse_reward 的差值增加偏好样本量或改用更强的规则策略生成轨迹策略训练结果很差奖励模型还没收敛先验证奖励模型对稳定/危险状态的输出增加奖励模型训练 epoch 或扩大网络容量训练时维度不匹配Tensor shape 写错在 concat 前打印 obs 和 action 的 shape统一把 action 转为(batch, 1)策略很快掉进局部最优奖励分布不均匀绘制奖励模型在轨迹上的预测分布对奖励输出做归一化或缩放新手最容易忽略的是验证步骤有人看到 Loss 下降了就以为大功告成结果策略完全学不出来。建议养成一个习惯在训练策略之前先单独验证奖励模型的质量。奖励模型不可靠策略训练就是在错误目标上优化这也是无显式奖励强化学习最核心的失败模式。另一个常见困惑是为什么要用轨迹长度当“外部偏好”生成器而不是直接用环境 reward这是为了让演示贴近真实场景的刻意设计。真实项目里没有 reward 可用你只有一段行为记录和一名评估者。用轨迹长度模拟外部评估是为了让你先理解这个课程的结构环境不提供 reward但有一个“判断好坏”的信息源。9. 最佳实践从 Demo 到生产环境的工程建议当 Demo 跑通后不要急着觉得“会了”。从 Demo 到真实项目中间还有很多工程细节需要处理这里给出几条具体建议。第一偏好数据质量永远是最重要的。很多团队在 RLHF 或 RLAIF 项目里失败不是因为代码写错而是偏好数据标注不一致或质量太低。在生成偏好数据时建议先小批量抽样检查和标注员或模型对齐评判标准。如果两条轨迹本身差距极小不要强行要求标注者判断可以加入“无法判断”选项避免制造噪声数据。第二定期验证奖励模型而不是只在训练前验证一次。奖励模型是静态代理但环境真实分布会变化。如果 Agent 探索到训练集里没有的极端状态奖励模型的预测可能非常离谱。建议在训练过程中每隔固定间隔采样一批新状态让奖励模型重新标注并与人工抽查结果比对。第三把奖励模型当第一公民来管理。在工程系统里奖励模型应该是一个独立部署、独立版本管理、独立监控的服务。它和策略模型一样需要记录训练数据、超参数、版本号。如果奖励模型更新了之前的策略训练结果可能全部作废所以要非常谨慎地做版本切换最好先通过离线评估验证新奖励模型的效果。第四注意奖励模型的 hack 问题。如果 Agent 学会了利用奖励模型漏洞获得高分你在真实环境里看到的表现会非常差。常见缓解手段包括限制奖励模型的输入范围、使用集成奖励模型取均值、引入显式的规则校验兜底。对于安全敏感的生产任务建议加入一个“安全层”奖励模型的输出只作为策略优化方向之一不直接控制高风险动作。第五从低成本场景开始验证。不要刚上手就把无显式奖励方案用在核心生产系统上。建议先选一个仿真环境或离线数据集测试整套流程确认收益大于传统手工奖励设计后再逐步迁移。这也是很多团队把“离线强化学习”当作先行的原因你可以在历史数据上做大量实验成本远低于线上试错。10. 总结下一步怎么学“强化学习无需可验证奖励”并不是一个玄学概念而是一套针对现实约束的工程方法。它的核心不是去掉奖励而是把“环境给分”替换成“模型判分”再通过偏好数据、过程监督或环境模型来构造这套判分机制。学习时最值得记住的一句话是奖励不是唯一的反馈来源偏好、示范、过程和模型都可以成为信号。如果这篇文章让你产生了兴趣下一步可以从这几个方向继续深入一是把示例中的 REINFORCE 换成 PPO 或 SAC并在更复杂的连续控制环境里测试奖励模型方案二是学习逆强化学习理解“从专家轨迹反推奖励函数”的数学框架三是留意离线强化学习因为你手里的历史数据往往比在线探索更适合作为无奖励学习的起点。最后提醒一句无论你最终采用哪种替代路径都要先把“奖励从哪来、谁来验证、如何兜底”这三个问题想清楚再动手否则训练出来的 Agent 很容易表面上得分很高实际完全不能覆盖业务场景。建议把这篇文章收藏起来等你真正开始设计第一个无显式奖励的强化学习项目时再按这套流程逐一检查。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进