跳转至

DRO

DRO(Richemond et al., 2024;Kimi Team, 2025)是一种离策略(甚至离线)的 RL 目标。它不截断概率比重,而是加一个二次惩罚,把学习器拉向采样器:

[ \mathcal{L}{\text{DRO}}(\theta) = \mathbb{E}\right)^2\right] ]}\left[\log p_\theta(x) \cdot A(x) - \frac{1}{2}\beta \left(\log \frac{p_\theta(x)}{q(x)

注意 DRO 期望的是软 advantage 形式,需要在构造 Datum 之前在客户端侧算好。

等价代码:

quadratic_term = (target_logprobs - sampling_logprobs) ** 2
dro_objective = target_logprobs * advantages - 0.5 * beta * quadratic_term
loss = -dro_objective.sum()

Inputs

  • target_tokens: array[(N,), int] —— 由 (q) 采样的 token ID。
  • logprobs: array[(N,), float] —— sampling_logprobs。
  • advantages: array[(N,), float] —— 逐 token 的 advantage(软形式)。

Outputs

  • logprobs —— target_logprobs。

Diagnostics

  • loss:sum —— DRO 损失总和。

自定义 beta

覆盖散度惩罚强度:

fb = training_client.forward_backward(
    data=data,
    loss_fn="dro",
    loss_fn_config={"beta": 0.05},
)
result = fb.result()