MRTPO · Multi-Reward-to-Token Policy Optimization

Each Reward to Its Relevant Tokens

Reward-Specific Token-Level Credit Assignment for Multi-Reward RL

αUniversity of Minnesota βNational University of Singapore γUniversity of Illinois Urbana-Champaign δUniversity of Southern California εUniversity of Pennsylvania ζMohamed bin Zayed University of Artificial Intelligence
TL;DR GDPO tells a multi-reward learner which rewards a response earned; MRTPO also tells it which tokens earned each of them. For each reward, the policy replays its own response with and without that reward's verifier information, and the per-token Jensen–Shannon distance between the two next-token distributions decides where that reward's advantage goes. No auxiliary model, no token labels, no extra generation.
6 / 6
models with the best average, across text-to-SQL, instruction following and tool calling
97% vs 2%
BFCL cases in the required tool-call format after 10 training steps, MRTPO vs GDPO
40%
shorter text-to-SQL responses than GDPO's (Qwen2.5-Coder-3B)
0
auxiliary models, token labels or extra generations
01 · The problem

🎯 One wrong token, and the penalty lands everywhere

Language models are increasingly trained against several verifiable rewards at once: the correctness and the format of a tool call, or the individual constraints of a complex instruction. GDPO normalizes each reward separately, so different reward combinations keep distinct advantages. But in GRPO, GDPO and SAW, every token of a response shares one advantage.

A verifier checks only a few positions. The penalty for one wrong token is spread over the whole response, where it can be outweighed by the credit other rewards put on the same tokens.

One SQL response scored by three rewards; GDPO, SAW, OPSD and MRTPO place the credit differently
One SQL response that is well formed and executable but uses >= for >. GDPO and SAW put each reward's advantage on every token; OPSD pulls toward a teacher; MRTPO puts format credit on the tags, executability credit on the query, and the execution penalty mostly on >= 30.
GDPO vs MRTPO per-token advantage on a text-to-SQL response
Per-token advantage on a response that returns the city's ID instead of its name. GDPO spreads every reward evenly; MRTPO puts the execution penalty on Host.
02 · Method

💡 Let each verifier's information point to its tokens

MRTPO assigns the advantage of each reward to the tokens relevant to it, using the information its verifier checks.

  1. Write each verifier's information as a text block

    \(Z_k\) is what reward \(k\) checks: the format rule, the response's own SQLite error, the reference query, or one constraint of the instruction. \(P_{\text{all}} = P_0 \oplus\) all blocks; \(P_{\setminus k}\) leaves out \(Z_k\). When the information is already in the prompt (instruction constraints), \(P_{\text{all}}\) is the prompt and \(P_{\setminus k}\) removes one constraint. Sampling still uses \(P_0\).

  2. Replay the response under both contexts

    The sampling policy reads its own response once under each context, one forward pass per context, with no new generation. At every token \(t\), the Jensen–Shannon distance \(q_{k,t}\) between the two next-token distributions measures how relevant that token is to reward \(k\).

  3. Move each reward's advantage to its tokens

    The distances become per-token weights, and each token's advantage is the weighted sum over rewards. The weights average to 1 per response, so every response keeps its GDPO credit; only the placement changes.

\[ q_{k,t}=\sqrt{\frac{\mathrm{JS}\!\left(p^{\text{all}}_t \,\middle\|\, p^{\setminus k}_t\right)}{\ln 2}} \qquad w_{k,t}=(1-\beta)+\beta\,\frac{q_{k,t}}{\bar q_k} \qquad S_t=\sum_k A_k\, w_{k,t} \]
\(A_k\): GDPO's group-normalized advantage of reward \(k\) for the response; \(\bar q_k\): mean of \(q_{k,t}\) over the response; \(\beta = 0.5\). \(S_t\) is then divided by GDPO's batch standard deviation.
Replay of a text-to-SQL response under the full context and with each verifier block removed
Self-replay on a text-to-SQL response that reads table telefone, which does not exist. Each replay removes one verifier block; the shading shows where that reward's advantage goes.

What changes compared with GDPO

MethodWhat changes in the GDPO stepToken advantage \(S_t^{(j)}\)
GDPOnothing; the per-reward advantages are summed\(\sum_k A_k^{(j)}\)for all \(t\)
SAWeach reward is weighted by its coefficient of variation in the batch\(\sum_k \lambda_k A_k^{(j)}\)for all \(t\)
DARArewards that vary in fewer groups get a larger, capped weight on their positive advantages\(\sum_k \bigl(A_k^{(j)} + (\lambda_k - 1)[A_k^{(j)}]_+\bigr)\)for all \(t\)
DVAOeach reward is weighted by its standard deviation within the group, normalized across rewards\(\sum_k \lambda_k A_k^{(j)}\)for all \(t\)
SA-MRPOeach reward is discounted by how saturated it is in the batch\(\sum_k \lambda_k A_k^{(j)}\)for all \(t\)
GD²POresponses whose per-reward advantages disagree in sign are dropped, and each prompt is scaled by its share of kept responses\(\kappa\,\delta^{(j)} \sum_k A_k^{(j)}\)for all \(t\)
RVPOthe rewards are combined by a soft minimum, which penalizes their variance\(\operatorname{softmin}_k A_k^{(j)}\)for all \(t\)
MRTPOeach reward's advantage is assigned to tokens by relevance\(\sum_k A_k^{(j)}\, w_{k,t}\)

The other methods act on the response, so every token of a response gets the same advantage. MRTPO sets a weight per reward and token and can be combined with them.

GDPO step
  1. Sample a group of responses from \(P_0\) and score every reward
  2. Normalize each reward within the group: \(A_k\)
  3. Sum the rewards: \(S=\sum_k A_k\), the same on every token
  4. Divide by the batch standard deviation and update the policy
MRTPO step
  1. Sample a group of responses from \(P_0\) and score every reward
  2. Normalize each reward within the group: \(A_k\)
  3. For each reward \(k\), find its relevant tokens: replay \(y\) after \(P_{\text{all}}\) and after \(P_{\setminus k}\); \(q_{k,t}\) = JS distance of the two predictions; \(w_{k,t}=(1-\beta)+\beta\,q_{k,t}/\bar q_k\)
  4. Sum the rewards on each token: \(S_t=\sum_k A_k\, w_{k,t}\)
  5. Divide by the batch standard deviation and update the policy
CostA training step takes 10–20% longer than GDPO. Replay only runs for rewards that vary within the group, so only 12–21% of response–reward pairs need one.
03 · Results

📊 Best average on all three tasks and all six models

Text-to-SQL

MethodSpiderBIRDAvg.
DevTestSynRealisticDKDev
Qwen2.5-Coder-3B-Instruct
Base62.3864.4653.0054.7251.8736.8853.88
GRPO74.24±1.2675.00±0.3165.92±1.5069.49±1.9464.04±1.6943.54±1.0365.37±1.18
GDPO76.66±2.2176.40±1.1767.34±1.8270.80±1.9465.61±0.9347.13±1.9467.32±1.66
OPSD68.18±0.6169.34±0.4559.15±0.3962.14±1.3856.12±0.9639.21±0.7059.02±0.49
MRTPO78.24±0.4476.79±0.4368.67±0.8673.49±0.6168.17±1.5346.26±0.8768.60±0.15
GDPO+SAW74.63±0.0674.77±0.8665.60±1.0370.60±2.0864.67±0.5845.23±1.2865.92±0.93
MRTPO+SAW78.88±0.4477.67±0.2368.86±0.5473.49±0.5767.92±0.6646.95±0.9368.96±0.19
Qwen2.5-Coder-7B-Instruct
Base77.1877.5568.6773.6267.0451.6369.28
GRPO78.30±0.7881.03±0.4971.44±0.4473.89±0.7966.91±0.6654.00±0.6370.93±0.32
GDPO79.21±0.6880.62±0.4972.21±0.7374.87±0.8267.29±0.5455.11±1.2671.55±0.27
OPSD79.11±0.4480.39±0.5270.76±1.4575.72±0.9769.10±0.4953.87±0.3671.49±0.54
MRTPO81.33±0.4281.65±0.4573.53±0.4875.92±1.7870.04±1.7956.42±0.4673.15±0.19
GDPO+SAW79.92±0.4681.32±0.4772.24±0.9876.31±0.1268.23±1.5655.44±1.1872.24±0.35
MRTPO+SAW81.08±0.3181.39±0.1573.21±1.1277.23±0.9970.04±0.1957.53±0.3273.41±0.35

Execution accuracy (%), mean ± standard deviation over 3 seeds.

Instruction following

MethodIFEvalIFBenchMulDimIFAdvancedIFAvg.
PromptInst.PromptInst.Acc.OverallRubric
Qwen3-4B-Instruct-2507
Instruct83.7788.8230.9533.1356.5038.2176.4158.26
GRPO85.44±0.1590.16±0.0635.68±1.0237.79±1.0162.44±0.8639.27±0.2777.06±0.1261.12±0.34
CoRT85.37±0.5090.06±0.3134.74±1.9036.85±1.9563.00±1.3538.88±0.3976.95±0.4460.84±0.78
GDPO85.52±0.5290.23±0.3336.39±1.5938.84±1.1862.88±2.8338.91±0.4376.85±0.2161.37±0.77
MRTPO85.66±1.2090.40±0.7438.76±1.5340.92±1.3365.37±1.3339.39±0.6177.25±0.1562.54±0.32
Qwen2.5-7B-Instruct
Instruct72.0979.5026.5329.3750.7723.5169.2650.15
GRPO81.72±0.3187.42±0.1635.94±2.0638.43±2.0555.19±0.7725.98±0.5671.08±0.2456.54±0.62
CoRT81.32±0.5687.11±0.4035.68±1.5738.22±1.7355.05±0.3026.07±0.7671.11±0.3756.36±0.55
GDPO81.91±1.3087.58±0.9435.70±2.6338.57±3.2555.33±1.5826.13±0.9071.46±0.2556.67±0.77
MRTPO81.98±0.7887.57±0.6038.87±1.9642.00±2.6053.50±1.7226.18±0.5271.44±0.3357.36±0.63

Accuracy (%), mean ± standard deviation over seeds. The largest gains are on IFBench, whose constraints are not seen in training.

Tool calling

MethodQwen2.5-1.5BQwen2.5-3B
Non-LiveLiveNon-LiveLive
Base12.069.3336.2347.67
GRPO78.04±0.8464.80±0.5581.81±0.7669.31±0.11
GDPO79.30±1.6967.05±2.4082.42±0.5068.86±0.41
MRTPO80.05±1.0068.66±0.9282.55±1.1769.58±0.66

BFCL-v4 single-turn AST accuracy (%), Non-Live and Live overall, mean ± standard deviation over seeds.

04 · Training dynamics

⚡ MRTPO learns faster

97%
BFCL cases in the required tool-call format after 10 training steps, vs 2% for GDPO and 4% for GRPO
13 steps
median to a format reward of 0.8, vs 19 for GDPO and 34 for GRPO
60 / 100
steps for Coder-7B to pass GDPO's final text-to-SQL accuracy
200 / 300
steps for Qwen3-4B to pass every baseline's final IFBench accuracy
Tool calling over training: train format and correctness reward, BFCL accuracy and format
Tool calling: training format and correctness reward, and BFCL accuracy and format, over training.
Text-to-SQL accuracy and response length, IFBench and MulDimIF over training
Text-to-SQL accuracy and response length; IFBench and MulDimIF accuracy over training. Text-to-SQL responses become 40% shorter than GDPO's with Coder-3B.
05 · Analysis

🔍 Where the credit goes

Each reward's distance concentrates on a small part of the response. In text-to-SQL, 80% of a reward's distance falls on 26–29% of the tokens; in tool calling, on 13–15%. In instruction following, an end-phrase constraint puts 40% of its distance on 4% of the tokens: the phrase itself.

Concentration of the Jensen–Shannon distance and its share by response region, for text-to-SQL and tool calling
Share of each reward's distance on the top tokens, and on each region of the response, for text-to-SQL and tool calling. GDPO's uniform split is shown for reference.

Tool calling

Replay of a tool-calling response without the correctness block and without the format block
Self-replay on a tool-calling response with a correctness block and a format block.

Instruction following

Replay of an instruction-following response with 12 constraints, one reward each
Self-replay on an instruction with 12 constraints, one reward each. Each replay removes one constraint from the prompt.
06 · Apply to your task

🧪 Using MRTPO on your own task

MRTPO needs two things from a task:

1 · Rewards

A vector of rewards, each scored by its own verifier, as in GDPO.

2 · Verifier blocks

For every reward, a text block that carries the information its verifier uses. The two replay contexts differ only in this block, so the block decides which tokens receive the reward's advantage.

Building the two contexts

For each reward \(k\) the replay compares \(P_{\text{all}}\), which contains the blocks of all rewards, with \(P_{\setminus k}\), the same context with block \(k\) removed.

The prompt does not show it

Tool calling, text-to-SQL. The verifier holds information the policy never sees while sampling: the reference calls, the reference query, the response's own SQLite error. Write each piece as a block and append the blocks to the rollout prompt \(P_0\): \(P_{\text{all}} = P_0\) + all blocks, \(P_{\setminus k} = P_0\) + all blocks except block \(k\). The rollout itself still uses \(P_0\).

The prompt already shows it

Instruction following. Every constraint the verifiers check is part of the instruction, so the rollout prompt is already \(P_{\text{all}}\). Nothing is added; \(P_{\setminus k}\) is the rollout prompt with constraint \(k\) deleted.

Writing a block

Which rewards fit

MRTPO helps when a reward's information, written as text, changes what the policy would write at the positions its verifier reads: a tool name and its arguments, a table or column, a required phrase. In math reasoning, the answer block points only at the last number, and a length limit is not decided by particular tokens. We did not evaluate MRTPO on math answer and length rewards or on GDPO's coding rewards.

Hyperparameters

β = 0.5 works in all our settings and is a good default; some tasks may prefer a smaller β. The reallocation bound keeps long training runs stable, so we use it in all settings. For short training, MRTPO without the bound also works well (--no-reallocation-bound).

Before trainingreplay_viz/ replays responses of the base model under your blocks and draws each reward's token weights. If you are unsure whether a block works, look at a few responses there first. Full guide: the README on GitHub.
Citation

BibTeX

@article{zhai2026mrtpo,
  title   = {Each Reward to Its Relevant Tokens: Reward-Specific Token-Level
             Credit Assignment for Multi-Reward {RL}},
  author  = {Zhai, Skylar and Wang, Haonan and Liu, Zhining and Song, Linxin and
             Ding, Xuwei and Liang, Jingcheng and Kang, Jian},
  journal = {arXiv preprint arXiv:2610.21439},
  year    = {2026}
}