GiGPO

训练流程:

  1. 采样(Sampling):

    针对同一个任务,让模型一口气跑 NN 条完整的轨迹(Trajectory)。每一条轨迹包含很多步(Step 1, Step 2, … Step T)。

  2. 寻找锚点(Anchor State Identification):

    系统会扫描这 NN 条轨迹,寻找它们之间重合的状态。

    • 例子: 轨迹 A 在第 3 步到了”厨房”,轨迹 B 在第 5 步也到了”厨房”。那么”厨房”就是一个锚点状态。
  3. 构建小组(Sub-Group Construction):

    把所有经过”厨房”时的动作拎出来,组成一个”小组”。

  4. 计算双层优势(Dual-Level Advantage):

    分别计算”宏观优势”和”微观优势”(下面详细讲)。

  5. 更新策略:

    综合两个层面的优势,更新模型参数。

微观优势 Step-level Advantage

1. 第一步:归类(The “Hash” Grouping)

GS(s~)={(at(i),rt(i))st(i)=s~,}G^S(\tilde{s}) = \{(a_t^{(i)}, r_t^{(i)}) \mid s_t^{(i)} = \tilde{s}, \dots \}
  • 遍历数据库。你用**状态(State)作为 Key(即公式里的 s~\tilde{s}),建立了一个巨大的 Hash MapValue则是该条轨迹(Trajectory)**的最终reward。所以该Hash Map的意义是,在所有可能的状态下,选择不同的动作会收获的最终奖励是多少。

  • 操作: 算法把之前 NN 次尝试中,所有经过**“同一个路口”**(同一状态)的时刻都抓取出来,放到一个篮子里。

重点: “完全离线,无额外 LLM forward”。这意味着这一步纯粹是查表和数学计算,不需要运行庞大的 AI 模型,计算成本极低


2. 第二步:计算”这一步的真实价值”(Discounted Reward)

Rt(i)=k=tTγktrk(i)R_t^{(i)} = \sum_{k=t}^T \gamma^{k-t} r_k^{(i)}

当前的奖励等于最终奖励乘上一个折扣系数,相当于 Rt=γTtrfinalR_t = \gamma^{T-t} \cdot r_{final}

细节:

  • k=tT\sum_{k=t}^T:把从现在到游戏结束所有的奖励加起来。但是由于数据集中只有最后一步有奖励,所以这里的 \sum 是为了通用型写的。实际的奖励值是[0,0,0,0,50],离最终步骤越远,现在获得的奖励越小。

  • γkt\gamma^{k-t}(Gamma 折扣因子):未来的奖励不如现在的奖励,因为越远越不确定。越远的奖励,打折越狠。这不仅能防止数值爆炸,也让模型更关注近期的反馈。


3. 第三步:计算”步级优势”(Step-level Advantage)

原文公式:

AS(at(i))=Rt(i)mean({R})Fnorm({R})A^S(a_t^{(i)}) = \frac{R_t^{(i)} - \text{mean}(\{R \dots\})}{F_{\text{norm}}(\{R \dots\})}

目的:归一化/Z-Score

  • 分子: Rt(i)meanR_t^{(i)} - \text{mean}

    • 你的这次长远收益,减去这个篮子里所有尝试的平均收益

    • 如果结果是正的,说明你在同样的情况下,比平均水平表现好。

  • 分母: FnormF_{\text{norm}}

    • 通常是标准差(Standard Deviation)。用来消除量纲影响,衡量你比平均水平好出多少个”段位”。

4. 第四步:Reward融合

Afinal=AEpisode+βAStepA_{final} = A^{Episode} + \beta \cdot A^{Step}

扩展

需不需要考虑序列关系吗?比如说回到同一个房间有可能是因为要完成某些动作回到房间A才是对的,没有完成这些动作回到房间A则无意义,但按照原文的思路,虽然前面动作也是回到房间A,后面动作也是回到房间A,最终奖励是1,这岂不是分配给后一个动作的奖励会更大?但其实后面那个回到房间A的价值不如前面一个
像web seach这种,可能action是一样的,但是入参有略微不同(比如search的query差一两个字)

用文本相似度解决

dd