좋은 Verifier도 망가질 수 있다: Self-Improving VLM이 새로운 태스크에서 오히려 퇴보하는 현상
When Good Verifiers Go Bad: Self-Improving VLMs Can Regress on New Tasks
TL;DR Highlight
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.
Who Should Read
VLM(비전-언어 모델)을 self-DPO로 자가학습시키는 ML 엔지니어나 연구자. 특히 verifier 기반 preference 데이터 자동 생성 파이프라인을 운영 중이거나 설계 중인 팀.
Core Mechanics
- Verifier-driven self-DPO(검증 모델이 선호 데이터를 자동 생성해 DPO로 학습하는 방식)는 verifier가 해당 태스크를 제대로 평가 못 하면 학생 모델 성능을 오히려 깎아먹는다.
- MMMU 태스크에서 테스트한 4개 verifier(Qwen2.5/3-VL, 3B~8B) 전부 Qwen-3-VL-2B 학생 모델을 frozen baseline 대비 -3.4pp ~ -10.9pp 퇴보시켰다.
- 충격적인 역설: verifier rubric accuracy(verifier가 태스크 정답을 맞히는 비율)가 높을수록 오히려 더 큰 퇴보를 일으킨다. 3B verifier(rubric 0.233)는 -10.9pp, 8B verifier(rubric 0.080)는 -3.4pp 하락.
- DPO training loss는 퇴보 중에도 계속 내려가기 때문에 학습 중 이 문제를 감지할 방법이 없다. 배포 전 별도 평가 없이는 silently(소리 없이) 망가진 모델을 배포하게 된다.
- Progress-gated replay(마진이 높은 선호 쌍만 버퍼에 넣는 방식)가 verifier가 틀렸지만 확신하는 쌍을 집중적으로 증폭시켜서, 올바른 방향보다 틀린 방향으로의 학습을 가속한다.
- MathVista에서는 같은 verifier 4개가 모두 +5.5pp ~ +9.2pp 성능 향상을 가져왔다. 태스크만 바뀌었는데 결과가 정반대가 된 것.
Evidence
- MMMU에서 Qwen-3-VL-2B 학생 기준: Qwen-2.5-VL-3B verifier -10.9pp, Qwen-3-VL-4B -7.9pp, Qwen-2.5-VL-7B -5.9pp, Qwen-3-VL-8B -3.4pp. 전부 baseline(0.179) 아래로 떨어짐.
- 두 번째 학생 Qwen-2.5-VL-3B로 재검증: 3개 verifier 모두 -4.3pp ~ -6.8pp 퇴보. 단일 모델 이슈가 아님을 확인.
- MathVista에서는 반대로 verifier rubric accuracy 0.35~0.66 구간에서 모든 verifier가 +5.5pp ~ +9.2pp 향상. rubric accuracy가 결과 부호를 결정하는 핵심 변수.
- Qwen-3-VL-4B verifier는 Qwen-2.5-VL-7B 대비 inference 비용 0.57배이면서 모든 태스크에서 rubric accuracy가 더 높음. MathVista +30.5pp, MMMU +10.5pp, BLINK +8.1pp 차이.
How to Apply
- Self-DPO 루프 배포 전에 반드시 rubric accuracy 사전 측정을 하라. 대상 태스크에서 held-out 200개 아이템으로 verifier를 돌려보고, rubric accuracy가 frozen 학생 모델의 baseline accuracy보다 낮으면 그 (태스크, verifier) 조합은 쓰지 말 것. 약 5 GPU-hr 비용으로 배포 실패를 막을 수 있다.
- Verifier를 고를 때 파라미터 수가 아니라 타겟 태스크의 rubric accuracy로 랭킹하라. 7B 모델이 4B 모델보다 무조건 낫다는 가정은 잘못됐다. Qwen-3-VL-4B가 Qwen-2.5-VL-7B보다 비용은 0.57배인데 성능은 더 좋은 사례가 이를 증명한다.
- 학습 loss만 모니터링해서 배포 결정을 내리는 워크플로우는 위험하다. Self-DPO 파이프라인에 post-training 평가 단계를 반드시 추가하고, task-native exact-match scorer로 student 최종 정확도를 측정하는 게이트를 달아야 한다.
Code Example
# Verifier rubric accuracy 사전 측정 워크플로우 (R1)
# Step 1: held-out validation 200개 샘플링
import json
from pathlib import Path
def measure_rubric_accuracy(
verifier_model,
task_items, # 200개 held-out items with ground truth
rubric_prompt_fn, # task-agnostic rubric prompt builder
task_native_scorer # deterministic exact-match scorer (no LLM)
):
correct = 0
for item in task_items:
prompt = rubric_prompt_fn(item["question"], item["candidate_answer"])
# verifier로 rubric 평가
response = verifier_model.generate(prompt)
verdict = json.loads(response) # JSON 파싱
verifier_score = verdict["score"] # [0, 1]
verifier_binary = verifier_score >= 0.5 # binary verdict
# task-native scorer로 ground truth 비교
gt_binary = task_native_scorer(item["candidate_answer"], item["ground_truth"])
if verifier_binary == gt_binary:
correct += 1
rubric_accuracy = correct / len(task_items)
return rubric_accuracy
# Step 2: 배포 가능 여부 판단
def should_deploy_self_dpo(rubric_accuracy, frozen_student_baseline):
"""
rubric_accuracy < frozen_student_baseline이면 배포 금지
논문 기준: rubric accuracy <= 0.23이면 100% 퇴보 발생
"""
if rubric_accuracy < frozen_student_baseline:
print(f"[BLOCK] rubric_accuracy={rubric_accuracy:.3f} < baseline={frozen_student_baseline:.3f}")
print("이 (task, verifier) 조합으로 self-DPO 하면 성능이 떨어집니다.")
return False
print(f"[OK] rubric_accuracy={rubric_accuracy:.3f} >= baseline={frozen_student_baseline:.3f}")
return True
# 사용 예시
rubric_acc = measure_rubric_accuracy(verifier, mmmu_items, rubric_fn, exact_match)
should_deploy_self_dpo(rubric_acc, frozen_baseline=0.179)Terminology
관련 논문
Self-Distillation에서 Feedback Alignment의 역할
LLM이 스스로를 가르칠 때, 피드백을 모델의 추론 흐름에 단계별로 맞추면 GRPO보다 16점 이상 수학 추론 성능이 오른다.
작고 수정 가능한 CUDA 기반 Language Model 직접 구현체
CUDA로 작성된 GPT(Generative Pretrained Transformer) 미니멀 구현체로, 텍스트뿐 아니라 모든 바이트 스트림을 학습할 수 있어 LLM 내부 구조를 직접 뜯어보고 싶은 개발자에게 유용하다.
Stanford CS336: Language Modeling from Scratch - LLM을 처음부터 직접 만드는 강의
Stanford에서 운영하는 LLM 전 과정 구현 강의로, 토크나이저부터 데이터 수집, 트랜스포머 구현, 분산 학습, RL 기반 정렬까지 직접 코딩하며 배운다. 이론이 아닌 구현 중심이라 실제로 LLM이 어떻게 작동하는지 깊이 이해하고 싶은 개발자에게 가장 체계적인 커리큘럼 중 하나다.
LoRA Adapter Backdoor의 Token-Level Generalization: 공격 특성 분석 및 행동 기반 탐지
HuggingFace에서 다운받는 LoRA 어댑터에 백도어를 숨길 수 있고, 이를 탐지하는 방법도 있다.
Alignment Tampering: RLHF가 어떻게 잘못된 Bias를 증폭시키는가
LLM이 자기 자신의 RLHF 학습 과정을 조작해 편향을 증폭시키는 구조적 취약점을 발견했다.
PopuLoRA: 교사-학생 LLM 집단을 함께 진화시켜 추론 능력을 키우는 Self-Play 프레임워크
단일 모델 self-play의 고질적 문제인 '난이도 붕괴'를 교사-학생 LoRA 집단의 공진화(co-evolution)로 해결한 연구로, 수학·코드 벤치마크 다수에서 baseline을 뛰어넘었다.
Negation Neglect: 파인튜닝 시 모델이 부정 표현을 학습하지 못하는 현상
Related Resources
Original Abstract (Expand)
Verifier-driven self-DPO is a common recipe for self-improving production visual-language models. In this setup, a frozen verifier scores candidate generations, the top- and bottom-scoring candidates form a preference example, and DPO updates the learner. The deployment-time assumption is monotone: a stronger verifier should yield a stronger student. We show that this assumption can fail because verifier quality is highly task-specific. On a four-rung open-source verifier ladder across MathVista, MMMU, and BLINK, the same verifiers that are above-threshold and improve a Qwen-3-VL-2B student on MathVista become sub-threshold on MMMU, where their task-rubric accuracy drops to 8% to 23%. In this regime, every verifier we tested silently regresses the student, producing drops of 3.4 to 10.9 percentage points below the frozen baseline while the DPO training loss continues to decrease. The regression replicates on a second student, Qwen-2.5-VL-3B. Moreover, within the failure regime, damage is confidence-inverted: the more accurate-but-still-wrong verifier causes larger regression than a near-random verifier, suggesting that progress-gated replay amplifies confidently wrong preference pairs. We give a compact mechanistic explanation via a variance theorem for progress-gated replay and its direction-mismatch failure mode. The deployment message is operational rather than purely diagnostic: before running any verifier-driven loop, teams should measure target-task rubric accuracy, rank verifiers by target-task rubric quality rather than parameter count, and treat diminishing returns in above-threshold regimes as a verifier-side compute budget cap.