MBA icon indicating copy to clipboard operation
MBA copied to clipboard

开源代码里的 reward lambda_cost 完全未实现

Open 2934997384 opened this issue 1 month ago • 3 comments

开源代码里的 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,并没参与更新

开源实现 = 二值正确率奖励 + 完全无成本惩罚

2934997384 avatar Nov 29 '25 13:11 2934997384

您好,您看看这个问题

2934997384 avatar Nov 29 '25 13:11 2934997384

Reward 在policy_gradient_loss就用于训练了,后面的二值化后处理只是为了借用reward计算在数据集上的精度

FUTUREEEEEE avatar Nov 30 '25 06:11 FUTUREEEEEE

感谢您的澄清!我重新对齐了代码逻辑,理解如下,如果有误请您指正:

  • 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) 多次检索实现

2934997384 avatar Nov 30 '25 06:11 2934997384