开源代码里的 reward lambda_cost 完全未实现
开源代码里的 reward:
Environment._get_reward()
if method in answer: if method == 'zero': return reward_zero # 1 elif method == 'one': return reward_one # 3 elif method == 'multiple': return reward_multiple # 4 else: return -1
然后在训练里:
loss, reward = policy_gradient_loss(...)
...
if reward > 0: reward = 1 else: reward = 0 rewards.append(reward)
没有减去 λ * delay
zero/one/multi 的差异也被 0/1 二值化掉了
get_delay() 只在 test 里拿出来算平均 delay,并没参与更新
开源实现 = 二值正确率奖励 + 完全无成本惩罚
您好,您看看这个问题
Reward 在policy_gradient_loss就用于训练了,后面的二值化后处理只是为了借用reward计算在数据集上的精度
感谢您的澄清!我重新对齐了代码逻辑,理解如下,如果有误请您指正:
- policy_gradient_loss() 中使用的是原始 reward(1/3/4/-1),这部分确实已经用于训练;
- 后面对 reward 的 0/1 处理仅用于 logging,和训练无关(这一点我之前误解了,感谢说明!)
我现在主要疑惑的是 cost-aware 部分: 论文中 reward 包含 base_reward – λ * delay, 但目前开源实现里 delay 只在测试阶段统计平均值,未参与 policy_gradient_loss 或梯度更新。 这意味着训练目标更接近“最大化正确率”,而非“最大化 reward – λ*cost”。 我训练的结果,模型完全趋向于选择 第三种arm 策略 C (Multiple) 多次检索实现