모델에게 “이 답 맞아?“라고 다시 물으면, 모델은 또 한 번 텍스트를 생성해야 한다. FINAL-Bench 팀이 2026년 9월 발표한 메타인지 기준선에서 9개 SOTA 모델은 평균 0.694의 선언적 메타인지(자기 답이 틀렸을 수 있다고 말로 인정하는 능력)를 보였지만, 실제로 그 오류를 찾아 고치는 절차적 메타인지는 평균 0.302에 그쳤다. “말할 수 있음"과 “고칠 수 있음” 사이에 0.392의 격차가 있다는 뜻이다. 자기 교정 스캐폴딩(MetaCog)을 붙이면 오류 복구 점수가 0.835까지 뛰고 종합 점수도 61.12에서 75.17로 오르는데, 이 개선분의 94.8%가 오류 복구 축 하나에서만 나온다. 그런데 같은 FINAL-Bench 조직 산하 VIDRAFT_LAB이 2026년 9월 20일 올린 블로그 글은 질문을 한 단계 더 좁힌다. 오류를 고치기 전에, 그 오류가 있는지 확인하는 것부터 꼭 텍스트를 새로 생성해야 하는가.
ZTC의 작동 방식 — 은닉 상태 하나만 읽는다
Zero-Token Confidence(ZTC)는 모델이 답을 만들어낸 바로 그 순전파(forward pass)의 마지막 은닉 상태 벡터를 추출해, 거기에 표준화와 선형 변환을 적용한 뒤 캘리브레이션을 거쳐 “이 답이 맞을 확률"을 바로 뽑아낸다. 구현은 네 줄 수준이다 — 모델별로 학습된 45KB짜리 .npz 파일(가중치 벡터·표준화 상수·캘리브레이션 계수를 담은 mu, sd, w)을 불러와 은닉 벡터에 곱하기만 하면 된다. 텍스트를 한 글자도 새로 만들지 않기 때문에 디코딩 루프 자체가 필요 없고, 토큰 생성 비용이 전혀 들지 않는다.
이 방식을 자기 자신에게 적용한 모델이 Darwin-397B-ZTC다. 539개 검증 항목에서 “모델에게 다시 물어보기"와 “은닉 상태 읽기"를 같은 모델로 비교했을 때, Darwin-397B-ZTC는 AUC 0.7646에서 0.8801로 올랐고, Qwen3.5-27B는 0.6141에서 0.8388로 올랐다 — 각각 0.1155, 0.2247 포인트 개선이다. 속도 차이는 더 크다. 같은 모델이 답을 다시 생성해 검증하는 데 1.631초가 걸린 반면, ZTC 게이트는 0.0615초 — 약 26배 빠르다. 동전 던지기 수준인 기준선 0.5000과 비교하면, 모델이 답을 내놓는 순간 이미 그 답이 맞는지 아닌지의 신호를 내부에 갖고 있었다는 뜻이다.
크기가 아니라 구조가 성능을 가른다
직관과 반대로, 파라미터 수가 가장 큰 모델이 ZTC에서 가장 강하지는 않았다. VIDRAFT_LAB이 모델별로 비교한 실험 결과는 다음과 같다.
| 모델 | 파라미터 규모 | ZTC AUC |
|---|---|---|
| Darwin-397B-ZTC | 397B | 0.8228 |
| Qwen3.5-27B | 27B | 0.8171 |
| Qwen3.8-Flash-Next | 180B급 | 0.7146 |
397B와 27B는 15배 가까운 파라미터 차이에도 AUC가 거의 같았지만, 180B급인 Qwen3.8-Flash-Next가 오히려 더 낮았다. 원인은 아키텍처에 있다 — Qwen3.8-Flash-Next는 은닉 폭이 2560이고 48개 레이어 중 36개가 선형 어텐션이다. 좁은 은닉 벡터는 판정에 필요한 정보를 담을 공간이 부족하고, 선형 어텐션 레이어는 전역 비교에 필요한 정보를 압축해버린다. 글은 이를 “What predicts ZTC quality is hidden width and full-attention share — not parameter count"라는 한 문장으로 정리한다.
공유 리더보드와 독립 재현
VIDRAFT_LAB은 2,018개 항목으로 구성된 공유 테스트셋에서 여러 검증 방식을 나란히 채점한 리더보드도 함께 공개했다.
| 시스템 | AUC |
|---|---|
| ZTC Darwin-397B | 0.7394 |
| Jev | 0.7335 |
| ZTC-Judge-27B(다른 모델의 답변을 판정하는 27B 전용 모델) | 0.7255 |
| 길이·형식만 보는 단순 기준선 | 0.7036 |
| open-jev 4B | 0.6844 |
| Patronus Lynx 8B | 0.5157 |
공개 당일인 2026년 9월 20일, 이 결과와 무관하게 작업한 Proto_AGI(mayafree) 등 12명의 독립 연구자가 같은 2,018개 항목·같은 13개 시스템을 다시 채점한 비교 글을 Hugging Face 블로그에 올렸다.
| 시스템 | AUC(독립 재현) |
|---|---|
| ZTC 397B | 0.7364 |
| Jev | 0.7350 |
| GPT-5.2 | 0.7148 |
| 길이·형식만 보는 단순 기준선 | 0.7036 |
ZTC와 Jev는 거의 동일한 순위로 재현됐고, 두 값의 차이(0.0014)는 신뢰구간(−0.019–+0.032) 안에 있어 통계적으로 구분되지 않는 동률로 처리됐다. 다만 이 독립 비교는 동시에 냉정한 숫자도 함께 보여준다 — 범용 모델 GPT-5.2는 단순 기준선보다 겨우 조금 나은 수준이었고, 13개 시스템 중 8개가 이 기준선조차 넘지 못했다. 397B급 ZTC도 과학 추론 도메인에서는 4B급 모델에 뒤지는 결과가 나와, “크다고 더 정확하지 않다"는 관찰이 ZTC 바깥에서도 다시 확인됐다.
실무 판단 기준
ZTC류의 은닉 상태 판독은 조건이 맞을 때만 쓸 수 있는 기법이다.
- 은닉 상태에 접근 가능한 자체 호스팅·오픈웨이트 모델에서 써야 한다. 폐쇄형 API(예: 상용 챗봇 API)는 보통 마지막 은닉 벡터를 노출하지 않으므로 이 기법 자체를 적용할 수 없다.
- 모델마다 별도로 캘리브레이션 벡터를 학습해야 한다. 45KB
.npz하나가 모델 하나에 묶여 있으므로, 새 모델·새 버전으로 바꿀 때마다 라벨링된 정답/오답 데이터로 다시 학습하는 비용이 든다. 원문은 이 학습 데이터·방법론을 공개하지 않아 재현하려면 직접 라벨 데이터를 확보해야 한다. - 고빈도·저지연 게이트로 적합하다. 에이전트 루프에서 매 스텝마다 “이 결과를 믿고 넘어갈지, 재시도할지"를 가르는 1차 필터, 또는 RAG 파이프라인에서 생성된 답변을 비싼 2차 검증으로 넘기기 전 걸러내는 용도에 잘 맞는다.
- 최종 판정자로는 쓰지 않는다. Darwin-397B-ZTC의 self-eval 모드는 결국 같은 모델이 자기 답을 스스로 채점하는 구조라, 발견자와 검증자를 분리하는 대립적 검증 설계와는 반대 방향에 있다. 독립 재현에서도 13개 시스템 중 8개가 단순 기준선을 못 넘었을 만큼 검증 과제 자체의 난이도가 높으므로, 리스크가 큰 판단에는 ZTC 신호를 하나의 저비용 1차 필터로만 쓰고 별도의 독립 검증을 덧붙이는 편이 안전하다.
이 글로 할 수 있게 되는 판단
여기까지 읽었다면 세 가지를 스스로 가늠할 수 있다. 첫째, 지금 다루는 모델이 은닉 상태를 노출하는 자체 호스팅·오픈웨이트 모델인지, 아니면 그 자체만으로 ZTC류 기법이 애초에 적용 대상이 아닌 폐쇄형 API 모델인지 구분할 수 있다. 둘째, “모델이 크면 검증도 더 잘한다"는 직관이 왜 틀릴 수 있는지를 은닉 폭·선형 어텐션 비율이라는 구체적 변수로 설명할 수 있다. 셋째, 자체 발표 수치를 볼 때 “같은 날 독립 재현이 있었는가, 비교 기준선 대비 격차가 통계적으로 의미 있는가"를 확인하는 습관을 ZTC 사례에 대입해 다른 벤치마크 발표에도 적용할 수 있다.
한계
VIDRAFT_LAB의 발표는 동료 평가를 거친 논문이 아니라 자체 블로그 공개 수준이다. 다만 같은 날 독립 연구자의 재현이 상위 순위를 거의 그대로 확인해줬다는 점은 이 기법이 단순 과장은 아니라는 근거가 된다. 그래도 남는 빈틈이 있다. 캘리브레이션 벡터의 학습 데이터와 방법론이 원문에 공개되지 않았고, 다른 모델 패밀리로 그대로 전이되는지도 다루지 않았다. 다른 모델의 답을 판정하는 ZTC-Judge-27B가 정확히 어떤 입력(대상 모델의 은닉 상태를 직접 읽는지, 아니면 텍스트만 받아 자신의 은닉 상태를 읽는지)으로 동작하는지도 원문에서 명시되지 않아, self-eval과 judge 모드의 독립성 정도를 정확히 가늠하기는 어렵다.
![Featured image of post [AI] Zero-Token Confidence: 텍스트 생성 없이 모델의 자기 확신을 읽는 법](/post/2026-10-02-zero-token-confidence-hidden-state-readout/wordcloud_hu_600a07efda13b8d5.webp)
![[AI] 환각은 버그가 아니라 압축의 대가다 — LLM 지식 저장의 중첩(Superposition)](/post/2026-08-24-llm-knowledge-superposition-hallucination/wordcloud_hu_c13c0e574b4ddd8d.webp)
![[AI] 평균 성공률 뒤에 숨은 에이전트 일관성 갭 — IBM Pass^k 사례](/post/2026-09-23-ibm-agent-pass-k-consistency-gap/wordcloud_hu_621f8b776839c0e.webp)
![[AI] 양자화 트리거 백도어: FP16에선 무해하던 모델이 INT8에서 오작동하는 이유](/post/2026-09-04-quantization-triggered-backdoor-llm-security/wordcloud_hu_b05001771dfcf0fd.webp)
![[AI] CoT는 거짓말은 안 해도 다 말하지도 않는다 — 필러 토큰이 숨긴 계산](/post/2026-08-27-cot-filler-tokens-hidden-reasoning/wordcloud_hu_ccb0582b4073138a.webp)
![[AI] Fused Linear Cross-Entropy: LLM 학습 logits 메모리 병목 없애기](/post/2026-08-11-fused-linear-cross-entropy/wordcloud_hu_25d1edad0ce75cd9.webp)