테스트 시간 연산 (Test-time compute): 다수결(majority vote), Best-of-N, 그리고 "더 오래 생각하기"
요약
언어 모델의 추론 시 연산량(test-time compute)을 늘려 정확도를 높이는 방법론을 다룹니다. 다수결(majority vote) 방식과 검증기를 활용한 Best-of-N 방식의 수학적 원리와 한계를 비교 분석합니다.
핵심 포인트
- 테스트 시간 연산은 추가 연산량을 통해 모델의 정확도를 향상시키는 전략임
- 다수결 방식은 모델의 기본 정답 확률(p)이 0.5 미만일 경우 성능이 저하됨
- Best-of-N은 검증기를 통해 어려운 문제에서도 높은 정확도를 달성 가능함
- 연산량 증가에 따른 정확도 향상은 로그 스케일에서 수확 체감의 법칙을 따름
언어 모델(language model)의 단일 샘플은 노이즈가 섞인 추측입니다. 어려운 질문의 경우, temperature > 0에서 한 번의 추출(draw)이 정답일 확률은 일부에 불과합니다. 테스트 시간 연산 (test-time compute, 추론 시간 스케일링 (inference-time scaling))의 핵심 아이디어는 더 큰 모델을 훈련하지 않고도, 답변 시점에서의 추가적인 연산량을 정확도와 맞바꿀 수 있다는 것입니다. 여기 세 가지 주요 방법의 작동 방식과, 각 방법이 어디에서 정체되는지를 결정하는 놀라울 정도로 간단한 수학적 원리가 있습니다.
단일 샘플 정확도로 질문 모델링하기
각 질문에 대해 샘플링된 하나의 답변이 정답일 확률을 p라고 합시다. 쉬운 질문은 p가 1에 가깝고, 진정으로 어려운 질문은 0.5 미만입니다. 즉, 단일 추측은 맞을 때보다 틀릴 때가 더 많습니다. 테스트 시간 연산 (test-time compute)이 활용하는 것이 바로 이 노이즈입니다. 답변을 한 번 대신 N번 추출하여 집계하십시오. N은 여러분의 연산 예산(compute budget)이며, 비용과 지연 시간(latency)은 N에 따라 대략 선형적으로 증가합니다.
자기 일관성 (Self-consistency): 다수결 (majority vote)
가장 저렴한 집계 방식 (Wang et al., 2022)입니다. N개의 샘플을 추출하고 가장 흔한 답변을 유지합니다. 검증기(verifier)가 필요 없습니다. 만약 정답이 확률 p로 모델이 가장 선호하는 오답보다 더 많은 표를 얻는다면, 다수결 정확도는 이항 꼬리 (binomial tail), 즉 정답 투표수가 N/2를 초 exceed할 확률이 됩니다.
from collections import Counter
from math import comb
...
이 값은 p > 0.5일 때 1을 향해 상승하지만, p < 0.5일 때는 0을 향해 수렴합니다. 투표는 모델이 가장 자주 믿는 것이 무엇이든 증폭시킬 뿐이므로, 어려운 질문에서는 모델이 틀린 답변을 확신하며 고착시킬 수 있습니다. 이것이 근본적인 한계입니다. 다수결 (majority vote)은 모델이 평균적으로 맞히는 질문의 비율을 결코 넘어설 수 없습니다.
Best-of-N: 검증기가 최상의 샘플을 선택하게 하기
보상 모델 (reward model), 단위 테스트 (unit test), 증명 검사기 (proof checker)와 같은 검증기(verifier)가 있다면 다수결이 필요하지 않습니다. 검증기가 인식할 수 있는 _단 하나_의 좋은 샘플만 있으면 됩니다. 완벽한 검증기가 있다면, 정확도는 pass@N이 됩니다.
def best_of_n(samples, verifier):
return max(samples, key=verifier) # 가장 높은 점수를 받은 것을 유지
...
1 - (1 - p)^N은 p > 0인 어떠한 경우에도 1을 향해 상승합니다. 이는 다수결(majority vote) 방식이 포기해버리는 어려운 질문들조차 해결해 줍니다. p = 0.42일 때: N=1이면 0.42이지만, N=8이면 0.98이 됩니다. 하나의 정답 샘플은 건더미 속의 바늘과 같으며, 검증기(verifier)의 역할은 그것을 찾아내는 것입니다. 다만 주의할 점은, 실제 검증기는 불완전하며, 그 정확도가 이론적인 pass@N보다 훨씬 낮은 수준에서 이득을 제한한다는 것입니다.
두 곡선 모두 오목함 — 수확 체감 (diminishing returns)
N을 변화시키며 질문 세트에 대해 평균을 내보면 핵심적인 그림이 나타납니다. 처음 몇 개의 추가 샘플은 정확도를 크게 높여주지만, 나중에는 거의 아무런 효과가 없습니다. N을 로그 축(log axis)에 플로팅하면 꼬리 부분이 눈에 띄게 평탄해지는 것을 볼 수 있습니다. 다수결 방식은 100% 미만에서 정체(plateau)되는 반면, Best-of-N은 계속해서 상승합니다. 두 정체 지점 사이의 간격이 바로 검증기를 가질 때 얻는 가치입니다.
"더 오래 생각하기" — 순차적 연산 (sequential compute) (o1 / DeepSeek-R1)
샘플링 후 투표(Sampling-and-voting) 방식은 병렬적 (parallel) 테스트 시간 연산입니다. o1과 DeepSeek-R1은 순차적 (sequential) 연산을 추가합니다. 즉, 최종 결론을 내리기 전에 접근 방식을 탐색하고, 스스로 점검하며, 되돌아가는(backtracks) 하나의 긴 사고 사슬(chain of thought) — 즉, 수천 개의 숨겨진 추론 토큰(reasoning tokens)을 사용합니다. 이는 N개의 샘플을 반복하는 루프 형태가 아니라, 단일 샘플 내에서 이루어지는 암묵적 탐색(implicit search)이며, 단순한 노력 조절 노브(effort knob)로 노출됩니다.
# OpenAI o1 / o3는 이를 reasoning_effort로 노출합니다:
client.chat.completions.create(model="o3", reasoning_effort="high", ...)
# DeepSeek-R1은 최종 답변 전에 긴 <think>...</think> 흔적을 생성합니다.
...
추론 연산이 더 큰 모델을 이기는 시점
DeepMind는 이 트레이드오프(tradeoff)를 구체화했습니다 (Snell et al., 2024). 많은 문제에서 작은 모델에 큰 테스트 시간 예산(test-time budget)을 부여하는 것이, 훨씬 더 큰 모델이 한 번 답변하는 것과 대등한 성능을 보여준다는 점을 입증했습니다 — 어느 지점까지는 말이죠. 더 큰 베이스 모델(base model)은 모든 샘플의 p를 높여 곡선 전체를 위로 이동시킵니다. 따라서 진짜 질문은 "더 큰 모델인가, 아니면 더 열심히 생각하는 것인가"가 아닙니다. 주어진 고정 예산을 사전 학습(pretraining)과 추론(inference) 사이에 어떻게 나눌 것인가의 문제이며, 연산 최적화 스케일링(compute-optimal scaling)은 심지어 질문의 난이도에 따라 질문당 N을 선택하기도 합니다. 이것이 바로 현재 연구소들이 단순히 파라미터(parameters)뿐만 아니라 추론 연산(inference compute)을 확장하는 이유입니다.
연산 예산(compute budget)을 1개에서 64개 샘플로 늘려가며 정확도 곡선이 상승하다가 평탄해지는 과정을 확인해 보세요 — 브라우저 내에서 동작하는 결정론적(deterministic) 모델을 사용한 self-consistency(자기 일관성) 대 best-of-N 비교: https://dev48v.infy.uk/ai/days/day53-test-time-compute.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기