자기 일관성 샘플링
여러 추론 경로에 대한 투표
자기 일관성 샘플링은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
하나의 연쇄는 취약합니다
하나의 사고 연쇄는 초기에 잘못된 방향으로 들어서서 끝내 회복하지 못할 수 있습니다. 자기 일관성(Wang et al., 2022)은 여러 독립적인 추론 경로를 샘플링하고 최종 답변을 집계하여 이 문제를 해결합니다. 일반적으로 다수결을 사용합니다.
직관은 다음과 같습니다. 올바른 추론은 서로 다른 경로를 거쳐도 같은 답변에 수렴하지만, 오류는 흩어집니다. 집계는 일관된 신호를 증폭합니다.
def self_consistency(prompt, n=20, temperature=0.7):
answers = []
for _ in range(n):
chain = llm(prompt, temperature=temperature)
answers.append(extract_answer(chain))
return majority_vote(answers)경로를 주변화하는 방식이 작동하는 이유
자기 일관성은 추론 경로를 주변화하는 것을 근사합니다. 하나의 잠재적 유도를 신뢰하는 대신 여러 유도에 걸쳐 통합된 최종 답변 중 가장 가능성 높은 답변을 추정합니다.
이는 답변 분포에 대한 몬테카를로 추정입니다. 특히 답변 공간이 작고 이산적일 때, 해당 분포의 최빈값은 일반적으로 단일 샘플 경로보다 더 신뢰할 수 있습니다.
from collections import Counter
def majority_vote(answers):
norm = [normalize_answer(a) for a in answers]
counts = Counter(norm)
answer, votes = counts.most_common(1)[0]
confidence = votes / len(norm)
return answer, confidence온도로 다양성 확보하기
자기 일관성에는 다양한 경로가 필요합니다. 탐욕적 생성이나 0에 가까운 온도는 거의 동일한 연쇄를 만들어 이 방법의 효과를 없앱니다. 적당한 온도(대개 0.5~0.8)를 사용하고, 필요하다면 top-p 샘플링을 사용하여 경로를 다양하게 분산시키십시오.
온도가 너무 높으면 각 개별 연쇄의 품질이 떨어집니다. 단일 연쇄의 품질이 아니라 앙상블 정확도를 최대화하도록 온도를 조정하십시오.
def tune_temperature(prompt, val_set, temps=(0.4, 0.6, 0.8, 1.0)):
best = max(
temps,
key=lambda t: ensemble_accuracy(prompt, val_set, temp=t, n=20)
)
return best답변 정규화는 매우 중요합니다
동등한 답변을 같은 것으로 인식해야만 투표가 집계됩니다. 개수를 세기 전에 정규화하십시오. 단위를 제거하고, 숫자를 표준 형식으로 바꾸며, 텍스트를 소문자로 변환하고, 분수와 백분율을 구문 분석하며, 작업별 동등성 규칙을 적용하십시오.
정규화가 부실하면 표면 형식이 다른 답변들로 정답의 다수가 분산되고, 소수 답변이 투표에서 승리할 수 있습니다.
def normalize_answer(a):
a = a.strip().lower().rstrip('.')
a = a.replace(',', '').replace('$', '').replace('%', '')
try:
return str(round(float(a), 6)) # numeric canonical form
except ValueError:
return a샘플은 몇 개가 필요한가요?
샘플 수 n이 늘어나면 정확도도 높아지지만 수익은 점점 감소하며, 작업 난이도에 따라 대개 10~40개 부근에서 정체됩니다. 샘플 하나를 추가할 때마다 비용과 지연 시간이 선형적으로 증가합니다.
검증 세트에서 n을 바꾸어 가며 측정하고, 샘플을 더 추가해도 비용을 정당화할 만큼 향상되지 않는 곡선의 변곡점을 선택하십시오.
def sweep_n(prompt, val, ns=(1,3,5,10,20,40)):
return {n: ensemble_accuracy(prompt, val, n=n) for n in ns}
# Choose n at the accuracy/cost knee, not the maximum적응형 조기 중단
적응형 샘플링으로 계산량을 절약하십시오. 투표 결과가 결정적인 수준에 이르면 경로 생성을 중단합니다. 5개 샘플을 생성한 뒤 한 답변이 압도적으로 앞선다면, 이후 샘플이 승자를 바꿀 가능성은 낮습니다.
이 방식은 실제로 어렵고 의견이 엇갈리는 항목에 계산량을 집중하고, 쉬운 항목에는 적은 비용으로 답변합니다.
def adaptive_sc(prompt, max_n=40, margin=0.6, min_n=5):
answers = []
for i in range(max_n):
answers.append(extract_answer(llm(prompt, temperature=0.7)))
if i + 1 >= min_n:
ans, conf = majority_vote(answers)
if conf >= margin:
return ans, conf, i + 1
return majority_vote(answers)가중치 및 검증기 지원 투표
단순 다수결은 모든 경로를 동일하게 취급합니다. 경로에 대해 모델이 부여한 가능도, 학습된 검증기의 점수, 또는 각 연쇄의 유효성에 대한 자기 평가를 기준으로 투표에 가중치를 부여할 수 있습니다.
검증기 가중 자기 일관성은 자신 있게 잘못된 답을 내지만 자주 발생하는 실패 유형의 순위를 낮추므로, 가중치를 사용하지 않는 투표보다 좋은 경우가 많습니다.
def weighted_vote(chains):
scores = {}
for c in chains:
a = normalize_answer(extract_answer(c))
scores[a] = scores.get(a, 0.0) + verifier_score(c)
return max(scores, key=scores.get)일치도에서 얻는 신뢰도
투표 격차는 유용한 신뢰도 신호입니다. 만장일치 답변은 6 대 5로 갈린 답변보다 훨씬 신뢰할 수 있습니다. 이 정보를 후속 로직에 전달하십시오. 일치도가 낮은 항목은 상위 단계 처리, 사람의 검토 또는 더 강력한 모델로 보낼 수 있습니다.
이렇게 하면 자기 일관성은 정확도를 높이는 동시에 보정 수단으로도 활용됩니다.
def route(prompt):
ans, conf = adaptive_sc(prompt)[:2]
if conf < 0.5:
return escalate_to_stronger_model(prompt)
return ans한계: 연속형 및 개방형 작업
다수결은 이산적이고 비교 가능한 답변 공간을 전제로 합니다. 자유 형식 생성, 긴 텍스트 또는 어떤 두 샘플도 동일하지 않은 연속형 출력에는 직접 적용할 수 없습니다.
이러한 작업에서는 다르게 집계하십시오. 의미적으로 유사한 출력을 클러스터링하거나, 추출한 구조화된 필드에 대해 투표하거나, 정확히 일치하는 답변의 수를 세는 대신 판정 모델을 사용해 가장 좋은 샘플을 선택하십시오.
def semantic_consistency(samples):
clusters = cluster_by_embedding(samples)
biggest = max(clusters, key=len) # largest agreement cluster
return representative(biggest) # medoid of the cluster비용을 고려한 배포
자기 일관성은 가장 비용이 많이 드는 프롬프트 기법 중 하나이며, 비용은 n에 따라 증가합니다. 이를 중요도가 높거나 어려운 항목에 한정하고, 적응형 중단과 결합하며, 쉬운 요청은 하나의 연쇄로 처리하는 단계별 정책을 고려하십시오.
같은 정도의 향상을 얻을 때 단일 더 강력한 모델 호출이 더 저렴할 수도 있으므로, 항상 자기 일관성의 비용 대비 정확도를 비교하십시오.
def tiered(prompt, q):
if easy(q):
return extract_answer(llm(prompt, temperature=0))
return adaptive_sc(prompt, max_n=20)[0] # SC only when needed처음부터 끝까지 자기 일관성 적용하기
전체 파이프라인은 다음과 같습니다. 온도와 n을 조정하고, 다양한 연쇄를 샘플링하며, 답변을 엄격하게 정규화하고, 투표(선택적으로 검증기 가중)를 수행하고, 격차를 신뢰도로 사용하며, 결과가 결정적이면 조기에 중단하고, 일치도가 낮은 항목은 상위 단계로 보냅니다.
그 결과 단일 연쇄보다 정확하고 스스로 보정되는 추론 시스템을 얻을 수 있습니다.
def solve(prompt):
chains = sample_until_decisive(prompt, max_n=20, temp=0.7)
ans, conf = weighted_majority(chains)
if conf < THRESH:
return escalate(prompt)
return {'answer': ans, 'confidence': conf, 'paths': len(chains)}빠른 확인
성능이 기대에 못 미치는 자기 일관성 설정의 원인을 진단해 보십시오.
복습
핵심 요점:
- 자기 일관성은 다양성이 높은 여러 연쇄를 샘플링하고 투표하여 추론 경로의 주변화를 근사합니다.
- 다양성(적당한 온도)과 엄격한 답변 정규화는 자기 일관성이 작동하기 위한 전제 조건입니다.
n이 늘어나면 정확도가 높아지지만 정체됩니다. 비용을 제어하려면 적응형 조기 중단을 사용하십시오.- 검증기로 투표에 가중치를 부여하고, 투표 격차를 보정된 신뢰도 신호로 사용하십시오.
- 이 방법에는 이산적인 답변 공간이 필요합니다. 개방형 작업에서는 의미적으로 클러스터링하거나 판정 모델을 사용하십시오.
자주 묻는 질문
“자기 일관성 샘플링” 강의는 무료인가요?
네 — “자기 일관성 샘플링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
“자기 일관성 샘플링”에서 뭘 배우나요?
여러 추론 경로에 대한 투표 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“자기 일관성 샘플링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 사고 연쇄 프롬프트
- 자기 일관성 샘플링
- 사고 트리 탐색
- 추론 프롬프트가 도움이 되는 경우