LLM을 5번 샘플링하고 다수결 투표를 취하면 정확도가 35포인트 상승합니다
요약
본 글은 LLM의 '자기 일관성(self-consistency)' 기법을 소개하며, 동일한 프롬프트를 여러 번 병렬 샘플링하고 다수결 투표를 취하는 방법을 설명합니다. 이 방법은 단일 호출 대비 정확도를 크게 향상시키며, 특히 수학적 추론 문제에서 유용함을 보여줍니다.
핵심 포인트
- LLM의 자기 일관성 기법을 활용하여 여러 번 샘플링 후 다수결 투표로 정확도 향상 가능
- 샘플 수가 많아질수록 정확도는 높아지나, 일정 수준 이상에서는 수익률 감소(diminishing returns)가 발생함
- Temperature는 0.7 정도의 '스위트 스팟'을 유지하는 것이 가장 효과적임
- 결과에 대한 신뢰도 점수(votes/N)를 계산하여 자동 승인 또는 인간 검토 여부를 결정할 수 있음
🌐 실시간 데모 (LOOK · UNDERSTAND · BUILD): https://dev48v.infy.uk/prompt/day3-self-consistency.html
제가 진행하는 PromptFromZero 시리즈의 3일차입니다. 50일 동안 50가지 LLM 기법을 다루며, 각각 LOOK / UNDERSTAND / BUILD로 시각화했습니다.
오늘의 주제는 **자기 일관성(self-consistency)**입니다. 작은 모델에 부여할 수 있는 가장 간단하면서도 +35점의 정확도 향상 효과를 가져옵니다. 이는 Chain of Thought (2일차)와 자연스럽게 연결됩니다.
설정 (The setup)
동일한 수학 문제, 동일한 모델, 다섯 번의 실행입니다.
A train leaves at 60 km/h. 30 minutes later, a second train
leaves the same station at 80 km/h on the same track. How
how many minutes after the second train leaves do they meet?
정답: 90분. (첫 번째 기차가 30km 앞서 나갑니다. 두 번째 기차는 시간당 20km로 따라잡습니다. 30÷20 = 1.5시간.)
gemini-2.5-flash 모델을 온도(temperature) 0.7로 사용하여 CoT를 한 번 호출했을 때:
Run 1: 90 ✓
맞아 보입니다. 하지만 다시 실행해 보면:
Run 2: 22 ✗ (모델이 20 대신 80으로 나누었습니다)
단 한 번의 호출만으로는 어떤 결과가 맞는지 알 수 없습니다. 잘못된 결과 역시 맞는 것처럼 자신감 있게 보입니다. 싱글-롤은 주사위가 보여주는 대로 받아들일 수밖에 없습니다.
해결책 (The fix)
동일한 프롬프트를 N번 병렬로 샘플링하고, 각 숫자 답변을 추출하여 다수결 투표를 취합니다.
import { generateText } from
- 1개의 샘플: 정확도 60%
- 3개 샘플 + 다수결 투표: $1 - P( ext{2개 또는 3개가 틀릴 확률}) allingdotseq 1 - (0.4^3 + 3 imes 0.4^2 imes 0.6) = **65%**$
- 5개 샘플 + 다수결 투표: 이 분포에서 $allingdotseq$ **68%**
- Chain-of-Thought가 제로샷(zero-shot) 대비 높이는 정확도($ ext{~}+25$ 포인트)를 곱하면: **초등학교 수학에서 95%의 정확도**.
숫자는 모델과 문제에 따라 다릅니다. 형태는 항상 같습니다: **샘플 수가 많을수록 → 실수가 적어지지만, N=10을 넘어서면 수익률이 감소합니다(diminishing returns)**.
## Temperature가 중요합니다 (Temperature matters)
- **temp = 0** $
ightarrow$ 결정론적(deterministic)이며, 모든 5개 샘플이 동일하여 의미가 없습니다.
- **temp = 0.7** $
ightarrow$ 최적의 지점(sweet spot)으로, 다양한 추론 경로를 가지면서 수학적 타당성을 유지합니다.
- **temp = 1.5** $
ightarrow$ 너무 무작위적이어서 모델이 말도 안 되는 내용을 쓰기 시작합니다.
능력은 유지하면서 다양성을 확보하는 것이 중요합니다. 0.7이 표준입니다.
## 무료로 얻는 신뢰도 (Confidence for free)
`votes / N`을 사용하면 무료 신뢰도 점수를 얻을 수 있습니다:
- **5/5** $
ightarrow$ 신뢰하고 자동 승인합니다(auto-accept).
- **3-4/5** $
ightarrow$ 사용하되 인간 검토를 위해 플래그 지정합니다.
- **≤2/5** $
ightarrow$ 모델이 추측하는 것이므로 답변을 거부합니다.
이 신호만으로도 보정된(calibrated) AI 제품을 구축할 수 있습니다.
## 트레이드오프 — 비용 (The trade-off — cost)
N=5는 단일 호출의 5배 토큰을 사용합니다. 요청당:
- 단일 CoT: $ ext{~}1 ext{k}$ 토큰, 어려운 수학 문제에서 정확도 60%
- Self-consistency (N=5): $ ext{~}5 ext{k}$ 토큰, $ ext{~}95$\%의 정확도
높은 중요도를 가진 문제(의료, 금융, 코드 검토, 판단)에서는 정확도를 $60
ightarrow 95$로 높이기 위해 5배를 지불합니다. 낮은 중요도의 작업(채팅, 요약, 창작 글쓰기)의 경우 단일샷 CoT로 충분합니다.
## 숫자 외 답변 (Non-numeric answers)
텍스트 답변(예/아니오, 다중 클래스)의 경우, 집계하기 전에 **정규화(normalize)**해야 합니다.
5개의 병렬 호출(parallel calls). 집계(Tally). 승자(Winner).
## 직접 시도해보기 (Try it now)
한 페이지에 세 개의 탭:
**[https://dev48v.infy.uk/prompt/day3-self-consistency.html](https://dev48v.infy.uk/prompt/day3-self-consistency.html)**
- **LOOK**: 실시간 집계 막대 차트와 함께 애니메이션화된 5개 샘플 실행(5-sample run)
- **UNDERSTAND**: 작동 원리에 대한 9단계 클릭 학습 과정
- **BUILD**: 전체 Node 스크립트, 복사하여 실행 가능
## PromptFromZero에서 다음에 다룰 내용 (What's next in PromptFromZero)
Day 4: **퓨샷 프롬프팅(Few-shot prompting)**. 프롬프트에 작동했던 예시 2~3개를 추가하면 → 모델이 실제 질문에 대해 형식과 추론 깊이를 복사합니다. '가난한 사람을 위한 파인튜닝(The poor man's fine-tune)'입니다.
🌐 모든 기법: [https://dev48v.infy.uk/promptfromzero.php](https://dev48v.infy.uk/promptfromzero.php)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기