explainer-skill

PPO clipped-surrogate explainer — final review

Reviewed from frames only (review/*.png sheets and singles, plus 17 extra frames extracted from final.mp4 with ffmpeg). Math checked against the formulas in scenes.py; all plotted shapes and all 16 numbers in the worked example are correct. No files were modified.

Verdict

fix first — one layout fix (Ratio_06 text flush with the frame edge) and one small tick-label overlap; everything else is polish. No math, sign, or axis errors anywhere.

Issues (most severe first)

Checked and clean: every narrated object is on screen when named (ratio definition, L^CPI, policy-gradient identity, clip definition, band, flat parts, ∇=0 regions, min line, both “smaller” comparisons in both advantage scenes, all table cells, the ≤ bound, the with/without-min comparison, the piecewise gradient in the recap). No three-sentence dead stretches. No LaTeX errors. Colour meaning is constant across scenes (blue = unclipped, yellow = clipped, green = min/L^CLIP, red = zero gradient, grey band = [1-ε, 1+ε]); the orange “nothing says stop” and the grey “estimate reliable” fuzz are one-off and do not collide with those meanings.

Viewer judgment

Pacing. The plot scenes (Clip, PositiveAdv, NegativeAdv) are well paced: each sentence adds one thing and the dots/arrows/regions land inside the sentence that names them. Three soft spots: (1) Numbers is 57 s of the same cadence repeated four times (case label, two inputs, two products, box, gradient); by case 3 the viewer is ahead of the narration. Cases 3–4 could run ~30% faster, or the plot-dot idea above gives the eye something new per row. (2) WhyMin_07–08: 5 s of text. (3) Recap_03: formula finishes writing at ~14.6 s and the frame then holds for ~6 s to the end — acceptable as an outro. Nothing is too fast; the longest single-sentence reveal (Ratio_01, 9.7 s, three sub-animations) is fine.

Visual hierarchy. Strong wherever there is a plot: the thick green min line over dimmed blue/yellow, one red region, one label, one moving dot. Weak in three frames: Ratio_06 (a wall of four equal-weight formula rows), Ratio_10 (two labels stacked at the top-left while the dot is at the top-right), and WhyMin_05 (two plots, each with two red regions and two labels, plus a caption — ten text items at once; the dimmed “gain ignored” helps but the frame is still the busiest in the video).

3b1b-ness. Motion that carries meaning is present and well chosen: the θ dot drifting from θ_old (Intro_03), the dot riding the line past the reliable band with the readout (Clip_05), the min line being drawn over the two dimmed terms (PositiveAdv_05), the dot being pulled back inside the band in both advantage scenes, and the green→yellow Transform when the min is removed (WhyMin_04). The two most slide-like scenes:

  1. Numbers — FadeIn cells in a table; nothing moves, nothing is derived visually. Fix: the per-case dot on a mini plot described above, and have the min box slide from the unclipped cell to the clipped cell (or vice versa) rather than appear, so “the min picks it” is a motion.
  2. Recap — three bullets fade in, then a formula. Fix: morph instead of list: bring back the A>0 plot, and as each item is narrated transform the formula piece into its geometric meaning — r_t(θ) → the x-axis label and a dot; the clip(...) block → the grey band; min → the green line — then let the piecewise-gradient formula’s two cases highlight the red regions and the sloped segment. The recap then re-uses the picture the viewer already owns. Runner-up: NegativeAdv should literally flip the A>0 lines (see the issue above); that one Transform would make “both terms flip” a thing the viewer sees.

Colour accessibility (red/green). The red zero-gradient fill is 18%-opacity red on black; for a protanope that reads as near-black, so the shaded region disappears in Clip_04–05, PositiveAdv_07–11, NegativeAdv_05–09 and WhyMin_02–05. The information survives only through the text tags (“∇ = 0”, “gain ignored”) — which is why those tags matter and should stay. Red-vs-green text pairs that carry a sign by colour alone: “∇L = 0” (red) vs “slope = Â_t > 0” (green) in PositiveAdv_10; “gain ignored” (red) vs “worse: counted in full” (green) in WhyMin_03; the “0” vs “Â_t∇r_t” gradient cells in Numbers. In each case the words also carry the meaning, so nothing is lost outright, but the at-a-glance read is. Green min line vs dimmed yellow clip line (a hard pair for deuteranopes) is separated by width (9 vs 5) and opacity, which is enough. Recommended encodings, in order of payoff:

Scene scores

Intro 4 · Ratio 4 · Clip 5 · PositiveAdv 5 · NegativeAdv 4 · Numbers 3 · WhyMin 4 · Recap 4

Files opened