跳转至

Importance Sampling

在 RL 中,rollout 策略 (q) 通常与学习器 (p_\theta) 不同(采样滞后于训练、采样本身非确定性等)。此时朴素的同策略目标

[ \mathcal{L}(\theta) = \mathbb{E}{x\sim p\theta}[A(x)] ]

是有偏的,因为样本来自 (q) 而非 (p_\theta)。重要性采样用概率比重重新加权每个样本来修正这个偏差:

[ \mathcal{L}{\text{IS}}(\theta) = \mathbb{E} A(x)\right] ]}\left[\frac{p_\theta(x)}{q(x)

由此恢复出正确的期望奖励。

出现的两个对数概率张量:

  • (\log p_\theta(x)) —— target_logprobs,由学习器在 forward_backward 的前向部分计算。
  • (\log q(x)) —— sampling_logprobs,由采样器在 rollout 时记录,作为修正项传入。

等价代码:

prob_ratio = torch.exp(target_logprobs - sampling_logprobs)
loss = -(prob_ratio * advantages).sum()

Inputs

  • target_tokens: array[(N,), int] —— 由 (q) 采样的 token ID。
  • logprobs: array[(N,), float] —— 这些 token 的 sampling_logprobs。
  • advantages: array[(N,), float] —— 逐 token 的 advantage(正值强化,负值抑制)。

Outputs

  • logprobs —— 这些 token 的 target_logprobs。

Diagnostics

  • loss:sum —— 重要性加权策略梯度损失总和。