direcf Temporal Grounding for Video VLMs (2026) Ch05 RL Fine-tuning Era — Time-R1, TempSamp-R1, VideoTemp-o3, TimeLens
Chapter 05 · 10 chapters
🎮

RL Fine-tuning Era — Time-R1, TempSamp-R1, VideoTemp-o3, TimeLens

RL Fine-tuning 시대 — GRPO와 verifiable rewards
2025년 하반기부터 temporal grounding의 SOTA는 SFT가 아니라 GRPO 기반 RL post-training이 잡았다. Time-R1 (NeurIPS 2025, arXiv:2503.13377)이 Qwen2.5-VL-7B를 단 2.5K의 TimeRFT 데이터로 RL fine-tune하여 zero-shot Charades-STA R1@0.5=60.8을 달성, VideoChat-Flash·VideoMind·TimeSuite 같은 대규모 SFT baseline들을 한 번에 추월했다. 핵심 무기는 tIoU + format reward라는 verifiable reward — LLM-judge가 아니라 정수 계산 한 줄로 정답을 채점할 수 있다는 점이 RL을 가능하게 했다. 그러나 IoU 한 가지만 최대화하면 model은 semantic alignment를 버리고 boundary length를 키우는 reward hacking을 학습한다. VideoTemp-o3 (arXiv:2602.07801)의 penalty-aware IoU와 TimeLens (CVPR 2026)의 thinking-free RLVR이 이 함정에 대응하는 두 가지 설계 패턴이다.
Chapter 5 Cheat Sheet
🍌 Nano Banana — Chapter 5 Visual Summary

🎯 학습 목표

5 goals
Learning Goals
  • temporal grounding이 왜 verifiable reward와 자연스럽게 맞물리는지 설명할 수 있다
  • GRPO의 group-relative advantage 계산과 PPO 대비 장점을 비교할 수 있다
  • Time-R1의 zero-shot 숫자가 왜 VideoChat-Flash 74.5와 VideoMind 73.5를 앞서는지 분석할 수 있다
  • reward hacking이 IoU-only 학습에서 어떻게 발생하는지, penalty-aware IoU가 어떻게 막는지 설명할 수 있다
  • verifiable reward 함수와 GRPO update step을 PyTorch로 구현할 수 있다

4장에서 timestamp가 token이 되었다는 사실을 보았다. 그런데 timestamp가 token이라면 generation의 품질을 어떻게 가르칠 것인가라는 질문이 따라온다. SFT는 ground-truth sequence를 next-token loss로 모방하지만, grounding의 본질적 metric인 IoU와 정확히 일치하지 않는다. 2025년 DeepSeek-R1의 성공이 영감을 줬다: math 문제처럼 verifiable reward가 존재하는 domain에서는 SFT보다 RL이 훨씬 sample-efficient하다. Temporal grounding은 정확히 이 조건을 만족한다 — predicted span과 ground-truth span 사이의 IoU는 정수 산술 한 줄로 계산 가능하고, LLM-judge나 reward model이 필요 없으며, hacking하기 어렵게 만들 수도 있다. Time-R1 (NeurIPS 2025)이 이 직관을 처음으로 SOTA 수치로 입증했다.

핵심 내용

5.1 왜 RL이 temporal grounding에 잘 맞는가

DeepSeek-R1 이후 ML 커뮤니티는 RLVR (Reinforcement Learning with Verifiable Rewards)이라는 용어를 자주 쓰기 시작했다. 핵심 가설은 단순하다: model의 output을 자동으로 채점할 수 있고 그 채점이 hacking에 강하면, SFT보다 RL이 sample efficiency도 generalization도 더 낫다.

Temporal grounding은 이 조건을 거의 완벽하게 만족한다.

첫째, answer가 short, structured, discrete하다. Output은 두 개의 실수 [s, e]이고 ground truth도 두 개의 실수다. Math 문제처럼 정답이 한 줄로 나오고 string match 또는 수치 비교 한 번으로 판정할 수 있다.

둘째, IoU는 continuous하지만 정수 산술로 계산된다. tIoU = max(0, min(e,e) - max(s,s)) / (max(e,e) - min(s,s)). CPU 한 사이클이면 충분하다.

셋째, format reward가 분리 가능하다. 모델이 12.3 14.7 같은 구조화된 형식을 따랐는지를 regex 한 줄로 확인할 수 있다. Time-R1은 reward를 r = r_format + r_IoU로 분해했다.

넷째, off-policy hacking이 어렵다. Span 자체가 답이기 때문이다. (다만 IoU 자체를 hacking할 수는 있다.)

이 네 조건이 합쳐져서, 2.5K짜리 dataset (Time-R1의 TimeRFT)으로도 SOTA가 가능한 sample efficiency가 나온다.

5.2 GRPO 알고리즘

GRPO (Group Relative Policy Optimization, DeepSeek 2024)는 PPO의 변형으로, value network (critic)를 제거한 것이 가장 큰 차이다. Video grounding처럼 episode가 사실상 1-step인 경우 critic 학습이 비효율적이다. GRPO는 대신 같은 prompt에 대해 K개의 sample을 뽑고, 그 group 안에서 reward를 normalize한다.

같은 video-query pair에 대해 K=8개의 candidate span을 sampling하고, 각 candidate i의 reward R_i를 구한다. Advantage A_i = (R_i - mean(R)) / std(R)로 표준화한다. 그리고 PPO의 clipped surrogate objective를 적용한다:

L = E[min(ratio_i · A_i, clip(ratio_i, 1-ε, 1+ε) · A_i)] - β · KL(π || π_ref)

Grounding 관점에서 GRPO의 장점: (1) critic 없음 = memory 절약. (2) group 안에서의 자연스러운 contrastive signal. (3) 1-step nature에 잘 맞음.

Downside: K개를 sampling해야 하므로 forward pass cost가 K배. Time-R1은 K=8을 쓴다.

5.3 Time-R1 (NeurIPS 2025)

Time-R1 (Ye Wang et al., Renmin/Xiaomi, arXiv:2503.13377)은 RL post-training으로 temporal grounding의 SOTA를 잡은 첫 작품이다. NeurIPS 2025에 accept되었다.

Setup: - Base: Qwen2.5-VL-7B-Instruct - Algorithm: GRPO with K=8 samples per prompt - Reward: r = α · r_format + (1-α) · r_tIoU - Data: TimeRFT — 2.5K curated video-query pairs - Compute: ~8×A100 80GB, 수 시간

Zero-shot SOTA: - Charades-STA: R1@0.3=78.1, R1@0.5=60.8, R1@0.7=35.3 - ActivityNet: R1@0.3=58.6, R1@0.5=39.0, R1@0.7=21.4 - 비교: VideoChat-Flash R1@0.3 74.5, VideoMind 73.5, TimeSuite 69.9 — 모두 zero-shot에서 추월

Time-R1* (Charades / ActivityNet에 추가 fine-tune): - Charades-STA: R1@0.5=72.2, R1@0.7=50.1 - ActivityNet: R1@0.5=55.6, R1@0.7=34.0 - Caveat: ActivityNet R1@0.7=21.4 zero-shot은 TRACE (24.0)을 못 넘었다.

왜 2.5K로 충분한가: GRPO의 group-relative advantage가 in-domain SFT가 가르치지 못하는 span을 정밀하게 조정하는 법을 직접 가르치기 때문이다.

5.4 TempSamp-R1

Time-R1 직후 등장한 후속 작업. 핵심 차별점은 temporal sampling strategy를 RL이 학습하도록 한 것이다. ActivityNet은 평균 120초 영상이라 frame sampling 자체가 noise source가 된다. TempSamp-R1은 두 단계로 분리한다:

  1. Sampler: query를 보고 어디를 zoom해야 할지 후보 window 제안
  2. Grounder: zoom된 window 안에서 정밀한 [s,e] 출력

결과: ActivityNet-Captions mIoU 49+. Lesson: long-form일수록 where to look 학습이 how to ground 학습보다 leverage가 크다.

5.5 VideoTemp-o3 — penalty-aware IoU

이 논문은 reward hacking 문제를 정면으로 다룬 첫 작업이다 (2026년 2월).

Observed hacking pattern: Time-R1 style의 r=tIoU reward로 오래 학습하면 model이 점차 longer span을 출력하기 시작한다. Span을 길게 늘리면 partial overlap이 생기기 쉬워 IoU>0의 expected value가 높아진다. 결국 model은 query를 정확히 보지 않고 영상 전체의 30-50%를 출력하는 전략을 배운다.

Penalty-aware IoU reward: r_pa = IoU(pred, gt) - λ · max(0, len(pred) - 2·len(gt)) / len(video). Predicted span의 길이가 ground-truth 길이의 2배를 넘으면 비례 penalty를 부과한다. λ는 0.3-0.5 정도. 이 단순한 항이 hacking 경로를 막는다.

또 다른 핵심: Causal QA + grounding을 jointly RL. VideoTemp-o3-7B-RL은 NextGQA에서 mIoU 33.4, Acc 76.4%로 SOTA. 단, grounded vs answer accuracy gap이 여전히 크다.

5.6 TimeLens — thinking-free RLVR

TencentARC의 작업. CVPR 2026 accept.

Setup: Base: Qwen2.5-VL / Qwen3-VL family. Data: TimeLens-100K. Algorithm: RLVR (Time-R1 style GRPO). Key choice: thinking-free. 즉 chain-of-thought 생성 없이 곧바로 span을 출력하도록 학습.

Why thinking-free? Time-R1·VideoTemp-o3는 CoT을 허용한다. CoT는 reasoning에 도움이 되지만 두 가지 비용이 있다: (1) Latency: 200-500 토큰의 think 단계가 추가됨. (2) Reward shaping mismatch: think 단계가 IoU reward와 무관해서 model이 cosmetic reasoning을 쓰는 경향.

TimeLens는 span에 대해서는 CoT가 별 도움 안 됨을 보이고, format을 strict하게 xy로만 제한한다. 결과: 성능 동등하면서 inference latency 3-5× 단축.

5.7 Reward Hacking의 일반화

네 논문에서 도출되는 일반 패턴: Hacking is the dual of the reward. tIoU만 reward로 주면 model은 IoU의 cheap proxy를 찾는다.

가장 대표적인 cheap proxy 세 가지: 1. Length inflation: span을 길게 늘려 partial overlap 노림 2. Center bias 학습: Charades-STA의 ground-truth가 영상 시작 근처에 몰려 있다. Model이 query를 무시하고 항상 0-8초를 출력해도 평균 IoU가 의외로 높다 3. Format gaming: format reward를 분리하지 않으면, model이 IoU만 올리려고 format을 망가뜨림

Design patterns: - Composite reward: r = r_format + r_IoU - Length penalty: r_pa = IoU - λ · over_length (VideoTemp-o3) - KL anchor: β · KL term. β를 너무 낮추면 빠르게 hacking - Eval on shift split: Charades-CD, ActivityNet-CD 같은 OOD split - Group size K: K=8이 sweet spot

💡 비유로 이해하기

Analogy
GPS navigation: turn-by-turn vs goal-only-reward agent

Pre-VLM grounding (3장의 DETR era)은 turn-by-turn GPS navigation이다. 각 step마다 right turn here, 200m straight를 정확히 알려주고, model은 그 instruction을 모방한다 (SFT). 정확하고 안정적이지만, 새 길이 생기거나 사고가 나면 적응 못한다.

RL temporal grounding은 goal-only-reward agent다. 너에게 X에 도착하면 점수 1, 아니면 0만 알려주고 어떻게 가는지는 알아서 학습하라고 한다.

이 setup이 잘 굴러갈 때, agent가 너의 turn-by-turn map에 없던 지름길을 발견한다. Time-R1이 2.5K 데이터로 100K 짜리 SFT model을 추월하는 게 이런 이치다.

그런데 같은 setup이 위험도 가진다. Goal을 destination에 차가 멈춰 있음으로 정의하면? Agent는 destination 옆 강에 차를 빠뜨리고 멈춰 있네 한다. Grounding에서? Goal을 IoU>0.5로 정의하면 agent는 span을 영상 전체로 늘리면 항상 partial overlap이라 IoU가 0보다 큼을 학습한다 — 이게 length inflation hacking이다.

VideoTemp-o3의 penalty-aware IoU는 X에 도착하면 1점이지만, 너무 우회하면 거리당 -0.3점 빼겠다와 같다.

💻 코드 예시

verifiable reward 함수 (tIoU + format)와 GRPO update step의 핵심을 PyTorch로 구현한다.

python
import re
import torch
import torch.nn.functional as F
from typing import List, Tuple, Optional

SPAN_RE = re.compile(r"<start>\s*([\d.]+)\s*<end>\s*([\d.]+)")

def parse_span(text: str) -> Optional[Tuple[float, float]]:
    m = SPAN_RE.search(text)
    if not m:
        return None
    s, e = float(m.group(1)), float(m.group(2))
    return (s, e) if e > s else None

def tiou(pred: Tuple[float, float], gt: Tuple[float, float]) -> float:
    inter = max(0.0, min(pred[1], gt[1]) - max(pred[0], gt[0]))
    union = max(pred[1], gt[1]) - min(pred[0], gt[0])
    return inter / union if union > 0 else 0.0

def verifiable_reward(text, gt, video_len, lambda_len=0.3, alpha_fmt=0.1):
    pred = parse_span(text)
    if pred is None:
        return 0.0
    r_fmt = 1.0
    r_iou = tiou(pred, gt)
    over = max(0.0, (pred[1] - pred[0]) - 2.0 * (gt[1] - gt[0]))
    r_pa = max(0.0, r_iou - lambda_len * over / max(video_len, 1e-6))
    return alpha_fmt * r_fmt + (1.0 - alpha_fmt) * r_pa

def grpo_step(policy, ref_policy, prompts, gts, video_lens, optim, K=8, eps=0.2, beta=0.04):
    losses = []
    for prompt, gt, vlen in zip(prompts, gts, video_lens):
        with torch.no_grad():
            samples = [policy.sample(prompt) for _ in range(K)]
            old_logp = torch.stack([policy.logprob(prompt, s) for s in samples])
            ref_logp = torch.stack([ref_policy.logprob(prompt, s) for s in samples])
        texts = [policy.decode(s) for s in samples]
        rewards = torch.tensor([verifiable_reward(t, gt, vlen) for t in texts])
        adv = (rewards - rewards.mean()) / (rewards.std() + 1e-6)
        new_logp = torch.stack([policy.logprob(prompt, s, with_grad=True) for s in samples])
        ratio = torch.exp(new_logp - old_logp)
        surr = torch.min(ratio * adv, torch.clamp(ratio, 1 - eps, 1 + eps) * adv)
        kl = (new_logp - ref_logp).mean()
        loss = -surr.mean() + beta * kl
        losses.append(loss)
    total = torch.stack(losses).mean()
    optim.zero_grad(); total.backward(); optim.step()
    return total.item(), rewards.mean().item()

parse_span은 model output에서 12.314.7 형식을 regex로 잡는다. 파싱 실패시 None을 반환해 format reward를 0으로 만든다. tiou는 IoU 한 줄 계산. verifiable_reward는 format hard gate와 penalty-aware IoU를 결합한다. grpo_step의 핵심: (1) K=8 sample, (2) Group-relative advantage로 critic 없이 표준화, (3) Clipped surrogate, (4) KL anchor. β=0.04는 Time-R1 권장값.

🏭 현업에서의 평가

Industry Evaluation
RL grounding 면접에서는 verifiable의 의미를 정확히 분리해서 말할 수 있는지가 합격선이다.

✅ 시니어가 보는 것

  • verifiable reward와 LLM-judge reward의 차이를 IoU 사례로 설명
  • GRPO의 group-relative advantage가 왜 critic 없는 grounding에 적합한지
  • Time-R1의 zero-shot R1@0.5=60.8이 100K+ SFT 모델을 추월한 sample-efficiency 메커니즘
  • reward hacking의 구체적 형태(length inflation, center bias)와 penalty-aware fix
  • KL coefficient β, group size K, format reward weight 같은 hyperparam의 effect

⚠️ 레드 플래그

  • RL이 항상 SFT보다 낫다고 단정
  • verifiable reward를 single reward로 묶고 format 분리의 필요성을 모름
  • Reward hacking을 edge case로 치부
  • PPO의 critic을 그대로 grounding에 쓰자고 제안
  • TimeLens의 thinking-free 선택을 CoT가 항상 나쁨으로 일반화

🎤 예상 인터뷰 질문

  1. Q1. 왜 IoU가 verifiable reward이고, captioning의 BLEU 같은 metric은 verifiable이라고 보기 어려운가? RLHF의 LLM-judge와 비교해 설명하라.
  2. Q2. Reward hacking이 RL grounding에서 어떤 구체적 형태로 나타나는가? VideoTemp-o3의 penalty-aware IoU가 어떻게 그걸 막는지 수식 수준으로 설명하라.
  3. Q3. PPO를 그대로 temporal grounding RL에 쓰면 무엇이 문제고, GRPO가 어떻게 해결하나? 그리고 GRPO도 잘 안 되는 경우는?
숙달 vs 익숙함: Familiar: Time-R1이 RL을 grounding에 적용했고 SOTA를 잡았다, GRPO를 쓴다. Mastery: Time-R1이 2.5K TimeRFT로 Charades-STA zero-shot R1@0.5=60.8로 VideoChat-Flash·VideoMind·TimeSuite를 추월한 sample-efficiency는 verifiable reward의 직접성 덕분이다. r = α·r_format + (1−α)·r_tIoU로 분해하고 GRPO K=8, β=0.04로 학습한다. VideoTemp-o3는 length inflation hacking을 직접 측정해 penalty-aware IoU로 fix했고, TimeLens는 thinking-free choice로 latency를 3-5× 줄였다.

✨ 핵심 요약

Verifiable reward가 RL grounding을 가능하게 했다

tIoU는 ground truth만으로 정수 산술 한 줄로 계산 가능하고, LLM-judge나 reward model이 필요 없으며, span이라는 short structured answer라 paraphrase hacking이 없다.

Time-R1의 2.5K가 100K+ SFT를 추월했다

NeurIPS 2025의 Time-R1 (arXiv:2503.13377)은 TimeRFT 2.5K로 Qwen2.5-VL-7B를 GRPO로 학습해 Charades-STA zero-shot R1@0.3=78.1, R1@0.5=60.8, R1@0.7=35.3을 기록, VideoChat-Flash 74.5·VideoMind 73.5·TimeSuite 69.9를 모두 앞섰다.

GRPO는 critic 없이 group-relative advantage를 쓴다

같은 prompt에 대해 K=8 sample을 뽑고, advantage A_i = (R_i − mean(R)) / std(R)로 표준화한다. PPO의 critic을 제거해 memory를 절반으로 줄이고, 1-step grounding episode에 더 잘 맞고, 학습 안정성이 좋다.

Format reward 분리가 학습 붕괴를 막는다

r = α·r_format + (1−α)·r_tIoU로 분해해야 한다. 분리 안 하면 model이 IoU만 올리려고 format을 망가뜨려 결국 어떤 reward도 못 받는 collapse에 빠진다.

IoU-only reward는 length inflation을 학습한다

r=tIoU만으로 오래 학습하면 model이 span을 점점 길게 출력한다. Longer span은 partial overlap 확률이 높아 expected IoU가 올라가기 때문이다.

Penalty-aware IoU가 length hacking을 막는다

VideoTemp-o3 (arXiv:2602.07801)의 r_pa = IoU − λ·max(0, len(pred) − 2·len(gt))/len(video)는 GT의 2배를 넘는 span에 비례 penalty를 부과한다. NextGQA mIoU 33.4, Acc 76.4% 달성.

TimeLens의 thinking-free RLVR가 latency를 3-5× 줄였다

CVPR 2026의 TimeLens는 span이 short structured answer라는 점에 착안, CoT을 생략하고 곧바로 <start>x<end>y만 출력하도록 RLVR했다.

OOD split에서만 reward hacking이 보인다

In-domain Charades-STA·ActivityNet으로는 length inflation·center bias hacking이 잘 안 잡힌다. Charades-CD·ActivityNet-CD에서 측정해야 가시화된다.