Skip to content

Teaching VLMs to think visually

What are good reasoning priors for visual problem solving in VLMs?

Around a year and a half ago, with the release of "reasoning" models like o1 [1] and DeepSeek's R1 [2], LLMs started to get really good at complex tasks. Reasoning behaviors are largely already present in pre-trained models [3], but they can be further refined via a pipelined approach of (optional) SFT on demonstrations of step-by-step problem solving, followed by RL on outcome-level rewards in which the model is allowed to explore how to combine reasoning strategies in novel ways to solve problems [4,5].

Because rollouts in RL are sampled from the model directly, the success of an RL training run is constrained by the set of base reasoning capabilities already present in the model. That said, it is not perfectly well understood which sets of initial reasoning strategies, which we call "reasoning priors", serve as an optimal starting point for reinforcement learning of reasoning models.

Recent work by Gandhi et al. [6] demonstrated that model quality alone is not a primary determinant of downstream performance post-RL; rather, the presence or absence of certain effective reasoning behaviors determines the final outcome of RL. In particular, they identify backtracking and verification as the two most important behaviors that make a base model an effective starting point for RL on text-based math problem solving.


Since most reasoning behaviors arise from the text pre-training phase, and VLMs are typically trained by combining a pre-trained text-only transformer with a pre-trained vision transformer [7], VLMs are at a disadvantage in creating visually faithful reasoning chains when reasoning over image-based problems. Two challenges are distinctive to the visual setting:

  1. Priors. Most reasoning priors come from the pre-training corpus, but a VLM's language backbone was pre-trained without images — pre-training corpora may simply not contain good priors for visual problem solving.

  2. Attention. Chain-of-thought is performed in text tokens, and a common attention failure mode is image↔image and text↔text attention — as the chain grows, the reasoning becomes unmoored from the image.

DeepSeek-AI [8] demonstrated through synthetically constructed datasets that visual grounding can be elicited during ordinary VQA problem solving — interleaving spatial references (points, boxes, paths) with the textual chain — though it remained unclear what benefits this process yields. Our experiments address that gap by measuring the downstream effect of grounding on RL training dynamics and attention behavior.

Concretely, we ask three questions. (1) Which reasoning strategies make effective SFT baselines for RL? (2) Does grounding the reasoning process improve outcomes? (3) Is model ability the right criterion for selecting a checkpoint to begin RL from?

Test any three cards

3 valid Sets among 220 possible triples
numberall same

3 · 3 · 3

shapeall same

squiggle · squiggle · squiggle

colorall different

green · red · purple

shadingall different

empty · striped · solid

Valid Set — every property is all same or all different

Tap or press Enter on cards to choose a triple; a fourth pick starts a new one. The hand is the one in the original Figure 1; verdicts are computed from its cards.

Test any three cards

3 valid Sets among 220 possible triples
numberall same

3 · 3 · 3

shapeall same

squiggle · squiggle · squiggle

colorall different

green · red · purple

shadingall different

empty · striped · solid

Valid Set — every property is all same or all different

Tap or press Enter on cards to choose a triple; a fourth pick starts a new one. The hand is the one in the original Figure 1; verdicts are computed from its cards.

One hand, four ways to reason about it

Variant e · Grounded + backtracking

Answer
Answer
Answer

every reference carries image coordinates17 anchors

Search path2·3·74·10·114·6·86·7·117·9·12

There are cards arranged in a grid. Let me point to and describe each card.

- Card 1 (row 1, col 1):

2 purple diamonds, empty(26,26) (255,335)

- Card 2 (row 1, col 2):

2 purple diamonds, solid(293,26) (522,335)

- Card 3 (row 1, col 3):

1 red oval, solid(560,26) (789,335)

- Card 4 (row 1, col 4):

1 green diamond, solid(827,26) (1056,335)

- Card 5 (row 2, col 1):

3 red ovals, solid(26,367) (255,676)

- Card 6 (row 2, col 2):

3 green diamonds, striped(293,367) (522,676)

- Card 7 (row 2, col 3):

3 green squiggles, empty(560,367) (789,676)

- Card 8 (row 2, col 4):

1 green diamond, striped(827,367) (1056,676)

- Card 9 (row 3, col 1):

3 red squiggles, striped(26,708) (255,1017)

- Card 10 (row 3, col 2):

2 green squiggles, solid(293,708) (522,1017)

- Card 11 (row 3, col 3):

3 green ovals, solid(560,708) (789,1017)

- Card 12 (row 3, col 4):

3 purple squiggles, solid(827,708) (1056,1017)

I'll consider a few candidate triple(s) and verify each:

- Candidate 1: candidate set Card 2Card 3Card 7

Number: 2, 1, 3 (all different)

Shape: diamond, oval, squiggle (all different)

Color: purple, red, green (all different)

Shading: solid, solid, empty (mixed)

The shading property is mixed (neither all-same nor all-different) → INVALID — not a Set. I'll reject this candidate.

- Candidate 2: candidate set Card 4Card 10Card 11

Number: 1, 2, 3 (all different)

Shape: diamond, squiggle, oval (all different)

Color: green, green, green (all same)

Shading: solid, solid, solid (all same)

All four properties are all-same or all-different → VALID Set.

- Candidate 3: candidate set Card 4Card 6Card 8

Number: 1, 3, 1 (mixed)

Shape: diamond, diamond, diamond (all same)

Color: green, green, green (all same)

Shading: solid, striped, striped (mixed)

The number, shading property is mixed (neither all-same nor all-different) → INVALID — not a Set. I'll reject this candidate.

- Candidate 4: candidate set Card 6Card 7Card 11

Number: 3, 3, 3 (all same)

Shape: diamond, squiggle, oval (all different)

Color: green, green, green (all same)

Shading: striped, empty, solid (all different)

All four properties are all-same or all-different → VALID Set.

- Candidate 5: candidate set Card 7Card 9Card 12

Number: 3, 3, 3 (all same)

Shape: squiggle, squiggle, squiggle (all same)

Color: green, red, purple (all different)

Shading: empty, striped, solid (all different)

All four properties are all-same or all-different → VALID Set.

Among the valid candidates I'll commit to Candidate 5 (cards 7, 9, 12) as my answer.

45/45

Textual rationales name cards in words; grounded ones attach a box to every card they mention (a point_box: two corner pixels in the image). Backtracking proposes a triple, checks each property and drops it if any is mixed. Switch either strategy at any point; the hand and candidates stay the same. Hover a tag to find its box. Rationales reconstructed from the training templates for the Figure 1 hand, with verdicts computed from the cards; not a model rollout.

Training pipeline

Five runs · one variable

Isaac — 9B base

image / video grounding + QA · reasoning data · no grounded reasoning

Generate 5 SFT datasets · seed-matched Set! hands · only the rationale style differs

  • No CoT
  • Textual
  • Grounded
  • Textual + backtracking
  • Grounded + backtracking

SFT — 200 steps · ×5 models

95% Set! data · 5% original pretraining mixture

Evaluate

in-domain: 4×3 Set! hands · OOD: 3×3 Set! hands

results → Figure 5

RL — DAPO, 60 steps · ×5 models

each model trained on a separate, held-out set of Set! hands

Evaluate

in-domain: 4×3 Set! hands · OOD: 3×3 Set! hands

results → Figures 7–8

Each coloured track is one model. Hue marks the rationale format (grey none, blue textual, orange grounded); dashed tracks have no backtracking, solid tracks do. Hover, focus or tap a dataset to follow its run.

One hand, four ways to reason about it

Variant e · Grounded + backtracking

Answer
Answer
Answer

every reference carries image coordinates17 anchors

Search path2·3·74·10·114·6·86·7·117·9·12

There are cards arranged in a grid. Let me point to and describe each card.

- Card 1 (row 1, col 1):

2 purple diamonds, empty(26,26) (255,335)

- Card 2 (row 1, col 2):

2 purple diamonds, solid(293,26) (522,335)

- Card 3 (row 1, col 3):

1 red oval, solid(560,26) (789,335)

- Card 4 (row 1, col 4):

1 green diamond, solid(827,26) (1056,335)

- Card 5 (row 2, col 1):

3 red ovals, solid(26,367) (255,676)

- Card 6 (row 2, col 2):

3 green diamonds, striped(293,367) (522,676)

- Card 7 (row 2, col 3):

3 green squiggles, empty(560,367) (789,676)

- Card 8 (row 2, col 4):

1 green diamond, striped(827,367) (1056,676)

- Card 9 (row 3, col 1):

3 red squiggles, striped(26,708) (255,1017)

- Card 10 (row 3, col 2):

2 green squiggles, solid(293,708) (522,1017)

- Card 11 (row 3, col 3):

3 green ovals, solid(560,708) (789,1017)

- Card 12 (row 3, col 4):

3 purple squiggles, solid(827,708) (1056,1017)

I'll consider a few candidate triple(s) and verify each:

- Candidate 1: candidate set Card 2Card 3Card 7

Number: 2, 1, 3 (all different)

Shape: diamond, oval, squiggle (all different)

Color: purple, red, green (all different)

Shading: solid, solid, empty (mixed)

The shading property is mixed (neither all-same nor all-different) → INVALID — not a Set. I'll reject this candidate.

- Candidate 2: candidate set Card 4Card 10Card 11

Number: 1, 2, 3 (all different)

Shape: diamond, squiggle, oval (all different)

Color: green, green, green (all same)

Shading: solid, solid, solid (all same)

All four properties are all-same or all-different → VALID Set.

- Candidate 3: candidate set Card 4Card 6Card 8

Number: 1, 3, 1 (mixed)

Shape: diamond, diamond, diamond (all same)

Color: green, green, green (all same)

Shading: solid, striped, striped (mixed)

The number, shading property is mixed (neither all-same nor all-different) → INVALID — not a Set. I'll reject this candidate.

- Candidate 4: candidate set Card 6Card 7Card 11

Number: 3, 3, 3 (all same)

Shape: diamond, squiggle, oval (all different)

Color: green, green, green (all same)

Shading: striped, empty, solid (all different)

All four properties are all-same or all-different → VALID Set.

- Candidate 5: candidate set Card 7Card 9Card 12

Number: 3, 3, 3 (all same)

Shape: squiggle, squiggle, squiggle (all same)

Color: green, red, purple (all different)

Shading: empty, striped, solid (all different)

All four properties are all-same or all-different → VALID Set.

Among the valid candidates I'll commit to Candidate 5 (cards 7, 9, 12) as my answer.

45/45

Textual rationales name cards in words; grounded ones attach a box to every card they mention (a point_box: two corner pixels in the image). Backtracking proposes a triple, checks each property and drops it if any is mixed. Switch either strategy at any point; the hand and candidates stay the same. Hover a tag to find its box. Rationales reconstructed from the training templates for the Figure 1 hand, with verdicts computed from the cards; not a model rollout.

Training pipeline

Five runs · one variable

Isaac — 9B base

image / video grounding + QA · reasoning data · no grounded reasoning

Generate 5 SFT datasets · seed-matched Set! hands · only the rationale style differs

  • No CoT
  • Textual
  • Grounded
  • Textual + backtracking
  • Grounded + backtracking

SFT — 200 steps · ×5 models

95% Set! data · 5% original pretraining mixture

Evaluate

in-domain: 4×3 Set! hands · OOD: 3×3 Set! hands

results → Figure 5

RL — DAPO, 60 steps · ×5 models

each model trained on a separate, held-out set of Set! hands

Evaluate

in-domain: 4×3 Set! hands · OOD: 3×3 Set! hands

results → Figures 7–8

Each coloured track is one model. Hue marks the rationale format (grey none, blue textual, orange grounded); dashed tracks have no backtracking, solid tracks do. Hover, focus or tap a dataset to follow its run.

We post-train each SFT checkpoint with RL on outcome-level rewards [9]. Reward design proved delicate: pure exact-match rewards are too sparse for early training, while pure dense rewards admit reward hacking via partially correct answers. We explored a number of reward formulations, and only one led to convergence — dense partial credit with an all-or-nothing completeness bonus:

R=1N∑i=1NmaxjIoU(ŝi,sj)+λ·1[every valid set recovered exactly]
Dense partial credit · mean best IoU of each mentioned candidateCompleteness bonus · all or nothing

Reward anatomy

threshold 0.5 · em_weight 0.3
GT1IoU 0.78
GT2IoU 0.56
GT3IoU 0
P1
P2
P3

Select a dashed box to move, resize or refit it.

1Hungarian matching · IoU > 0.5 to count

  • GT1 (card 7) ⇔ P1 · IoU 0.782 ✓ matched
  • GT2 (card 9) ⇔ P2 · IoU 0.557 ✓ matched (barely)
  • GT3 (card 12) ⇔ ∅ · IoU 0.000 × unmatched
  • P3 (card 11) ⇔ ∅ · spurious × extra pred

2Dense term · partial credit

num = 0.782 + 0.557 = 1.339

denom = max(M=3, N=3) = 3

base = num / denom = 0.446

3Exact-match bonus

complete = (all GT matched) AND (M = N)

= False → bonus forfeited

4Reward

r = 0.7 × 0.446 + 0.3 × 0

0.312

dense, up to 0.7bonus, 0.3 or 0

Matched boxes still earn partial credit, which gives early training a signal. The 0.3 bonus waits for an exact, complete answer.

IoU (intersection over union) measures how well two boxes overlap, from 0 (apart) to 1 (identical); matching pairs each true card with at most one guess. Drag a dashed box or its corners, tap a card to add a guess, or select a box and use the arrow keys (+/− resizes, Delete removes). Scored live with the Figure 4 worked-example rules: ground truth is the Set on cards 7, 9 and 12, matching counts a pair only when IoU > 0.5, base = Σ matched IoU / max(M, N), and r = 0.7 × base + 0.3 × complete. The worked example applies the equation's λ as this em_weight of 0.3.

Reward anatomy

threshold 0.5 · em_weight 0.3
GT1IoU 0.78
GT2IoU 0.56
GT3IoU 0
P1
P2
P3

Select a dashed box to move, resize or refit it.

1Hungarian matching · IoU > 0.5 to count

  • GT1 (card 7) ⇔ P1 · IoU 0.782 ✓ matched
  • GT2 (card 9) ⇔ P2 · IoU 0.557 ✓ matched (barely)
  • GT3 (card 12) ⇔ ∅ · IoU 0.000 × unmatched
  • P3 (card 11) ⇔ ∅ · spurious × extra pred

2Dense term · partial credit

num = 0.782 + 0.557 = 1.339

denom = max(M=3, N=3) = 3

base = num / denom = 0.446

3Exact-match bonus

complete = (all GT matched) AND (M = N)

= False → bonus forfeited

4Reward

r = 0.7 × 0.446 + 0.3 × 0

0.312

dense, up to 0.7bonus, 0.3 or 0

Matched boxes still earn partial credit, which gives early training a signal. The 0.3 bonus waits for an exact, complete answer.

IoU (intersection over union) measures how well two boxes overlap, from 0 (apart) to 1 (identical); matching pairs each true card with at most one guess. Drag a dashed box or its corners, tap a card to add a guess, or select a box and use the arrow keys (+/− resizes, Delete removes). Scored live with the Figure 4 worked-example rules: ground truth is the Set on cards 7, 9 and 12, matching counts a pair only when IoU > 0.5, base = Σ matched IoU / max(M, N), and r = 0.7 × base + 0.3 × complete. The worked example applies the equation's λ as this em_weight of 0.3.

SFT eval results — Set! 9B (iou_exact_match)

thinking_effort=HIGH · variants match panels (a–e)

Hover, focus or tap a row to read it in plain terms.

SFT eval results, Set! 9B, iou_exact_match, thinking_effort=HIGH. Columns sort by value.
Change from in-distribution to OOD, percentage points
0.0%±0.0 points0.0%
0.5%+0.5 points1.0%
36.8%+16.8 points53.6%
39.9%+16.2 points56.1%
93.5%−1.3 points92.2%
94.6%−76.2 points18.4%

Backtracking dominates either modality alone (d, e ≥ 92% in-dist). Grounded + backtracking (e) collapses on 3×3 OOD: 94.6% → 18.4%.

Hover, focus or tap a row; sort by either column, or open Chart to see both splits on one axis. In-distribution: 4×3 hands, like the training data. OOD: 3×3 hands, a layout not used in training. iou_exact_match is the exact-match score used throughout; higher is better. Values as published.

How each prior fails out of distribution

Set! 3×3 OOD

No backtracking

Misreads while checking

check failscommit sound

Textual

Reads the numbers 3, 3, 1 as “all different”, so an invalid triple passes.

  • Number3, 3, 1 · model says “all different” — actually mixed
  • Shapesquiggle, diamond, oval · all different
  • Colorgreen, red, purple · all different
  • Shadingstriped, striped, striped · all same

passes the check, so it is committed

AnswerSet 1 (cards 2, 5, 6)not a Set

Grounded

Reads the numbers 3, 2, 2 as “all different”, so an invalid triple passes.

  • Number3, 2, 2 · model says “all different” — actually mixed
  • Other attributes elided in the excerpt

passes the check, so it is committed

AnswerSet 1 (cards 2, 5, 8)not a Set

With backtracking

Checks correctly, then ignores the verdict

check soundcommit fails

Textual + backtracking

Names a card 12 in a nine-card hand, rejects the candidate, then commits to it.

Proposes cards 2, 6 and 12. A 3×3 hand has no card 12.

Its own check:Candidate 3 rejectedINVALID, rejected

commits to it anyway

AnswerCandidate 3just rejected

Grounded + backtracking

Describes the cards cleanly and rejects every candidate, then commits to one anyway.

Its own checks:

Candidate 1 rejected (elided in the excerpt)Candidate 2 rejected (elided in the excerpt)Candidate 3 rejected

no candidate passed — commits anyway

AnswerCandidate 3 (cards 1, 4, 7)

Excerpts from OOD (3×3) eval transcripts; hands differ across panels and “…” marks elided text. Red ✗ marks and the summaries above are annotations, not model output. The slot grid is a schematic; the transcript's actual hand isn't shown.

SFT eval results — Set! 9B (iou_exact_match)

thinking_effort=HIGH · variants match panels (a–e)

Hover, focus or tap a row to read it in plain terms.

SFT eval results, Set! 9B, iou_exact_match, thinking_effort=HIGH. Columns sort by value.
Change from in-distribution to OOD, percentage points
0.0%±0.0 points0.0%
0.5%+0.5 points1.0%
36.8%+16.8 points53.6%
39.9%+16.2 points56.1%
93.5%−1.3 points92.2%
94.6%−76.2 points18.4%

Backtracking dominates either modality alone (d, e ≥ 92% in-dist). Grounded + backtracking (e) collapses on 3×3 OOD: 94.6% → 18.4%.

Hover, focus or tap a row; sort by either column, or open Chart to see both splits on one axis. In-distribution: 4×3 hands, like the training data. OOD: 3×3 hands, a layout not used in training. iou_exact_match is the exact-match score used throughout; higher is better. Values as published.

How each prior fails out of distribution

Set! 3×3 OOD

No backtracking

Misreads while checking

check failscommit sound

Textual

Reads the numbers 3, 3, 1 as “all different”, so an invalid triple passes.

  • Number3, 3, 1 · model says “all different” — actually mixed
  • Shapesquiggle, diamond, oval · all different
  • Colorgreen, red, purple · all different
  • Shadingstriped, striped, striped · all same

passes the check, so it is committed

AnswerSet 1 (cards 2, 5, 6)not a Set

Grounded

Reads the numbers 3, 2, 2 as “all different”, so an invalid triple passes.

  • Number3, 2, 2 · model says “all different” — actually mixed
  • Other attributes elided in the excerpt

passes the check, so it is committed

AnswerSet 1 (cards 2, 5, 8)not a Set

With backtracking

Checks correctly, then ignores the verdict

check soundcommit fails

Textual + backtracking

Names a card 12 in a nine-card hand, rejects the candidate, then commits to it.

Proposes cards 2, 6 and 12. A 3×3 hand has no card 12.

Its own check:Candidate 3 rejectedINVALID, rejected

commits to it anyway

AnswerCandidate 3just rejected

Grounded + backtracking

Describes the cards cleanly and rejects every candidate, then commits to one anyway.

Its own checks:

Candidate 1 rejected (elided in the excerpt)Candidate 2 rejected (elided in the excerpt)Candidate 3 rejected

no candidate passed — commits anyway

AnswerCandidate 3 (cards 1, 4, 7)

Excerpts from OOD (3×3) eval transcripts; hands differ across panels and “…” marks elided text. Red ✗ marks and the summaries above are annotations, not model output. The slot grid is a schematic; the transcript's actual hand isn't shown.

Held-out evaluation during RL

above-random iou_exact_match, %

In distribution

set_game · HIGH

Out of distribution

set_game_3×3 · HIGH

Step 60. In distribution: d Textual + backtracking 92.0, b Textual about 1.0, c Grounded 1.0, e Grounded + backtracking 98.0. Out of distribution: d Textual + backtracking 91.5, b Textual about 2.9, c Grounded 0.2, e Grounded + backtracking 96.9.

Show the values as a table
Figure 8 values (digitized) · set_game · HIGH (above-random iou_exact_match, %)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
0≈92.735.038.495.0
10≈94.935.012.593.0
20≈95.035.57.095.0
3093.832.52.096.5
4093.017.51.598.0
5093.5≈1.01.098.0
6092.0≈1.01.098.0
Figure 8 values (digitized) · set_game_3×3 · HIGH (above-random iou_exact_match, %)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
092.052.254.916.6
10≈93.054.021.093.0
20≈93.550.114.595.6
3093.848.54.096.5
4093.742.90.296.5
5092.53.50.296.5
6091.5≈2.90.296.9

In distribution means 4×3 hands like the training data; out of distribution means 3×3 hands, a layout the models never trained on. Hover or drag across a chart, or focus it and use the arrow keys, to read every variant at one step; choose a legend entry or group to trace it. Values are digitized from the published plot (marker centres, ≈±1% of the axis); hollow markers and ≈ mark points that sit under another series in the source. Metric: above-random iou_exact_match, which differs from the raw percentages in the SFT table.

RL training dynamics by SFT prior

EMA α = 0.15, as published

train/reward (mean)

mean

iou_exact_match (mean across rollouts)

mean, 0–1

completions/mean_length

tokens

entropy

nats

Step 60. train/reward (mean): d Textual + backtracking 0.29, b Textual 0.08, c Grounded 0.24, e Grounded + backtracking 0.86. iou_exact_match (mean across rollouts): d Textual + backtracking 0.090, b Textual about 0.006, c Grounded 0.006, e Grounded + backtracking 0.740. completions/mean_length: d Textual + backtracking 1,490, b Textual 2,802, c Grounded 585, e Grounded + backtracking 1,761. entropy: d Textual + backtracking about 0.024, b Textual about 0.025, c Grounded 0.027, e Grounded + backtracking 0.011.

Show the values as a table
Figure 7 values (digitized) · train/reward (mean) (train/reward)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
10.320.220.240.80
50.33≈0.230.230.79
100.34≈0.220.220.78
150.35≈0.220.220.80
200.36≈0.220.220.82
250.37≈0.220.220.83
300.37≈0.220.220.85
350.36≈0.200.210.85
400.350.190.210.84
450.330.150.220.85
500.300.110.230.86
550.290.090.240.85
600.290.080.240.86
Figure 7 values (digitized) · iou_exact_match (mean across rollouts) (iou_exact_match)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
10.170≈0.0210.0210.660
50.170≈0.0340.0210.650
100.1800.0410.0210.640
150.181≈0.0390.0210.660
200.191≈0.0340.0200.680
250.191≈0.0340.0210.701
300.191≈0.0200.0200.729
350.180≈0.0150.0150.739
400.160≈0.0100.0100.740
450.131≈0.0080.0080.730
500.102≈0.0060.0060.730
550.091≈0.0050.0050.739
600.090≈0.0060.0060.740
Figure 7 values (digitized) · completions/mean_length (mean completion length, tokens)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
11,1996505611,598
51,2306505661,620
101,2596505741,651
151,3006505811,660
201,3506505861,680
251,400≈6125851,701
301,408≈5855851,720
351,420≈5885881,740
401,451≈5835831,751
451,5017995851,761
50≈1,509≈1,5005851,769
551,5092,2985861,769
601,4902,8025851,761
Figure 7 values (digitized) · entropy (entropy, nats)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
1≈0.032≈0.0330.0660.014
50.0330.0350.0690.016
100.0320.0360.0700.016
150.0310.0340.0700.015
20≈0.031≈0.0320.0680.014
25≈0.030≈0.0310.0630.013
30≈0.029≈0.0300.0550.013
350.028≈0.0280.0460.012
40≈0.0270.0270.0380.012
45≈0.026≈0.0310.0310.012
500.025≈0.0310.0290.011
550.025≈0.0270.0280.011
60≈0.024≈0.0250.0270.011

Reward is what RL optimizes; completion length is response length in tokens; entropy measures how spread out the model's token choices are. A run that blows up shows reward collapsing, lengths spiking and entropy degenerating. Hover or drag across any chart, or focus the charts and use the arrow keys, to read all four metrics at one step; choose a legend entry or group to trace it through every panel. Values are digitized from the published plot (marker centres, ≈±1% of each axis); hollow markers and ≈ mark points that sit under another series in the source.

RL training dynamics by SFT prior

EMA α = 0.15, as published

train/reward (mean)

mean

iou_exact_match (mean across rollouts)

mean, 0–1

completions/mean_length

tokens

entropy

nats

Step 60. train/reward (mean): d Textual + backtracking 0.29, b Textual 0.08, c Grounded 0.24, e Grounded + backtracking 0.86. iou_exact_match (mean across rollouts): d Textual + backtracking 0.090, b Textual about 0.006, c Grounded 0.006, e Grounded + backtracking 0.740. completions/mean_length: d Textual + backtracking 1,490, b Textual 2,802, c Grounded 585, e Grounded + backtracking 1,761. entropy: d Textual + backtracking about 0.024, b Textual about 0.025, c Grounded 0.027, e Grounded + backtracking 0.011.

Show the values as a table
Figure 7 values (digitized) · train/reward (mean) (train/reward)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
10.320.220.240.80
50.33≈0.230.230.79
100.34≈0.220.220.78
150.35≈0.220.220.80
200.36≈0.220.220.82
250.37≈0.220.220.83
300.37≈0.220.220.85
350.36≈0.200.210.85
400.350.190.210.84
450.330.150.220.85
500.300.110.230.86
550.290.090.240.85
600.290.080.240.86
Figure 7 values (digitized) · iou_exact_match (mean across rollouts) (iou_exact_match)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
10.170≈0.0210.0210.660
50.170≈0.0340.0210.650
100.1800.0410.0210.640
150.181≈0.0390.0210.660
200.191≈0.0340.0200.680
250.191≈0.0340.0210.701
300.191≈0.0200.0200.729
350.180≈0.0150.0150.739
400.160≈0.0100.0100.740
450.131≈0.0080.0080.730
500.102≈0.0060.0060.730
550.091≈0.0050.0050.739
600.090≈0.0060.0060.740
Figure 7 values (digitized) · completions/mean_length (mean completion length, tokens)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
11,1996505611,598
51,2306505661,620
101,2596505741,651
151,3006505811,660
201,3506505861,680
251,400≈6125851,701
301,408≈5855851,720
351,420≈5885881,740
401,451≈5835831,751
451,5017995851,761
50≈1,509≈1,5005851,769
551,5092,2985861,769
601,4902,8025851,761
Figure 7 values (digitized) · entropy (entropy, nats)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
1≈0.032≈0.0330.0660.014
50.0330.0350.0690.016
100.0320.0360.0700.016
150.0310.0340.0700.015
20≈0.031≈0.0320.0680.014
25≈0.030≈0.0310.0630.013
30≈0.029≈0.0300.0550.013
350.028≈0.0280.0460.012
40≈0.0270.0270.0380.012
45≈0.026≈0.0310.0310.012
500.025≈0.0310.0290.011
550.025≈0.0270.0280.011
60≈0.024≈0.0250.0270.011

Reward is what RL optimizes; completion length is response length in tokens; entropy measures how spread out the model's token choices are. A run that blows up shows reward collapsing, lengths spiking and entropy degenerating. Hover or drag across any chart, or focus the charts and use the arrow keys, to read all four metrics at one step; choose a legend entry or group to trace it through every panel. Values are digitized from the published plot (marker centres, ≈±1% of each axis); hollow markers and ≈ mark points that sit under another series in the source.

Held-out evaluation during RL

above-random iou_exact_match, %

In distribution

set_game · HIGH

Out of distribution

set_game_3×3 · HIGH

Step 60. In distribution: d Textual + backtracking 92.0, b Textual about 1.0, c Grounded 1.0, e Grounded + backtracking 98.0. Out of distribution: d Textual + backtracking 91.5, b Textual about 2.9, c Grounded 0.2, e Grounded + backtracking 96.9.

Show the values as a table
Figure 8 values (digitized) · set_game · HIGH (above-random iou_exact_match, %)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
0≈92.735.038.495.0
10≈94.935.012.593.0
20≈95.035.57.095.0
3093.832.52.096.5
4093.017.51.598.0
5093.5≈1.01.098.0
6092.0≈1.01.098.0
Figure 8 values (digitized) · set_game_3×3 · HIGH (above-random iou_exact_match, %)
Stepd · Textual + backtrackingb · Textualc · Groundede · Grounded + backtracking
092.052.254.916.6
10≈93.054.021.093.0
20≈93.550.114.595.6
3093.848.54.096.5
4093.742.90.296.5
5092.53.50.296.5
6091.5≈2.90.296.9

In distribution means 4×3 hands like the training data; out of distribution means 3×3 hands, a layout the models never trained on. Hover or drag across a chart, or focus it and use the arrow keys, to read every variant at one step; choose a legend entry or group to trace it. Values are digitized from the published plot (marker centres, ≈±1% of the axis); hollow markers and ≈ mark points that sit under another series in the source. Metric: above-random iou_exact_match, which differs from the raw percentages in the SFT table.

9B Set! 3×3 — cross-segment attention

Each row is a group of tokens doing the looking; each column is what they look at. A cell is the share of that row's attention landing on that column. The orange-outlined cells are attention from the reasoning and the answer onto the image.

Pretrained

Attention mass for Pretrained. Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer

SFT+RL (textual w/ backtracking)

Attention mass for SFT+RL (textual w/ backtracking). Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer

SFT+RL (grounded w/ backtracking)

Attention mass for SFT+RL (grounded w/ backtracking). Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer
0.00.85attention mass (mean over heads + full-attn layers)

CoT tokens looking at image tokens: 0.053 pretrained → 0.039 textual (−0.013) → 0.056 grounded (+0.003).

Attention on the image, side by side

The orange-outlined cells as bars on one axis from zero: small shares, so read the change, not the size.

Hover, tap or use the arrow keys on a cell to compare it across the three models; Tab moves between them. Values as published: mean over heads and full-attention layers; dashed cells are not shown in the source. Changes marked ≈ are computed from the rounded values; the image-column changes are the published ones.

9B Set! 3×3 — cross-segment attention

Each row is a group of tokens doing the looking; each column is what they look at. A cell is the share of that row's attention landing on that column. The orange-outlined cells are attention from the reasoning and the answer onto the image.

Pretrained

Attention mass for Pretrained. Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer

SFT+RL (textual w/ backtracking)

Attention mass for SFT+RL (textual w/ backtracking). Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer

SFT+RL (grounded w/ backtracking)

Attention mass for SFT+RL (grounded w/ backtracking). Rows attend from (query), columns are attended to (key).
promptimageCoTanswer
promptnot shownnot shownnot shownnot shown
imagenot shownnot shownnot shown
CoTnot shown
answer
0.00.85attention mass (mean over heads + full-attn layers)

CoT tokens looking at image tokens: 0.053 pretrained → 0.039 textual (−0.013) → 0.056 grounded (+0.003).

Attention on the image, side by side

The orange-outlined cells as bars on one axis from zero: small shares, so read the change, not the size.

Hover, tap or use the arrow keys on a cell to compare it across the three models; Tab moves between them. Values as published: mean over heads and full-attention layers; dashed cells are not shown in the source. Changes marked ≈ are computed from the rounded values; the image-column changes are the published ones.

123456789

Points at each card

  1. OpenAI. Learning to Reason with LLMs. September 2024. openai.com/index/learning-to-reason-with-llms

  2. J. Wei, X. Wang, D. Schuurmans, et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS 2022. arXiv:2201.11903

  3. DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. arXiv:2501.12948

  4. E. Zelikman, Y. Wu, J. Mu, N. D. Goodman. STaR: Bootstrapping Reasoning With Reasoning. NeurIPS 2022. arXiv:2203.14465

  5. N. Lambert, J. Morrison, V. Pyatkin, et al. Tülu 3: Pushing Frontiers in Open Language Model Post-Training. 2024. arXiv:2411.15124

  6. K. Gandhi, A. Chakravarthy, A. Singh, et al. Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs. 2025. arXiv:2503.01307

  7. S. Bai, Y. Cai, R. Chen, et al. Qwen3-VL Technical Report. 2025. arXiv:2511.21631

  8. DeepSeek-AI. Thinking with Visual Primitives. 2026.

  9. Z. Shao, P. Wang, Q. Zhu, et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. arXiv:2402.03300

@article{perceptron2026visualthinking,
  author = {Jeremy Dohmann and PerceptronAI},
  title = {Teaching VLMs to Think Visually},
  journal = {PerceptronAI Research Blog},
  year = {2026},
  note = {https://perceptron.inc/blog/teaching-vlms-to-think-visually},
}