Chain-of-Thought Prompting으로 Large Language Model의 추론 능력 끌어내기
Chain of Thought Prompting Elicits Reasoning in Large Language Models
TL;DR Highlight
LLM한테 '생각하는 과정'을 예시로 보여주면 수학·상식·기호 추론 성능이 극적으로 올라간다는 걸 실험으로 증명한 논문.
Who Should Read
GPT-4, Claude 같은 LLM을 써서 복잡한 추론이 필요한 기능을 만드는 개발자. 프롬프트만으로 모델 성능을 끌어올리고 싶은 AI 엔지니어.
Core Mechanics
- 답만 주는 대신 '풀이 과정'을 함께 보여주는 few-shot 예시(chain-of-thought)를 프롬프트에 넣으면 모델이 복잡한 추론을 훨씬 잘 함
- PaLM 540B에 chain-of-thought 예시 8개만 넣었더니 GSM8K(수학 문제 벤치마크)에서 파인튜닝된 GPT-3보다 높은 정확도(56.9%) 달성
- 이 효과는 '대형 모델 전용'임 — 100B 파라미터 이하 모델에서는 오히려 성능이 떨어지거나 효과 없음. 모델 규모의 emergent ability(특정 규모 이상에서 갑자기 나타나는 능력)
- 수학뿐 아니라 상식 추론(StrategyQA 75.6% vs 기존 최고 69.4%), 스포츠 상식(95.4% vs 인간 전문가 84%), 기호 조작 등 다양한 태스크에서도 효과 확인
- 추론 과정이 먼저 나온 뒤 정답이 오는 순서가 핵심 — 정답 뒤에 설명을 붙이거나, 점(...)으로 칸만 채우거나, 수식만 쓰면 효과가 없음
- 파인튜닝 없이 프롬프트만으로 달성 — 특정 태스크용 학습 데이터셋 없이도 다양한 추론 태스크에 하나의 모델로 대응 가능
Evidence
- PaLM 540B + chain-of-thought: GSM8K 56.9% (표준 프롬프팅 17.9% 대비 +39%p, 파인튜닝된 GPT-3 55% 초과)
- Codex + chain-of-thought: GSM8K 63.1% (표준 19.7% 대비 +43.4%p), SVAMP 76.4%, ASDiv 80.4%
- StrategyQA에서 PaLM 540B chain-of-thought 75.6% — 기존 supervised SOTA 69.4% 초과
- 스포츠 상식 이해에서 PaLM 540B chain-of-thought 95.4% — 스포츠 전문가 인간 수준 84% 초과
How to Apply
- 복잡한 계산·추론이 필요한 프롬프트라면 few-shot 예시에 답만 쓰지 말고 '단계별 풀이 과정 → 최종 답' 형식으로 바꿔라. GPT-4급 모델 사용 시 즉시 효과를 볼 수 있음.
- 산술 오류가 잦다면 chain-of-thought로 생성된 수식 부분만 Python eval로 재계산하는 후처리를 추가하면 정확도가 추가로 올라감 (LaMDA 137B 기준 GSM8K 14.3% → 17.8%).
- zero-shot으로 쓰고 싶다면 '단계별로 생각해봐(Let's think step by step)' 같은 문구를 붙이는 zero-shot CoT를 시도해보고, 그래도 부족하면 8개 내외의 풀이 과정 예시를 직접 작성해 few-shot으로 전환하면 됨.
Code Example
# Chain-of-Thought 프롬프트 예시 (OpenAI API)
from openai import OpenAI
client = OpenAI()
cot_prompt = """
Q: 사과가 23개 있었는데 점심에 20개를 쓰고 6개를 더 샀다. 사과는 몇 개인가?
A: 원래 23개가 있었다. 점심에 20개를 써서 23 - 20 = 3개가 남았다. 6개를 더 샀으니 3 + 6 = 9개다. 정답은 9.
Q: Roger는 테니스공 5개를 갖고 있다. 공 3개짜리 캔 2개를 샀다. 지금 테니스공은 몇 개인가?
A: Roger는 5개로 시작했다. 캔 2개 × 3개 = 6개가 추가됐다. 5 + 6 = 11개다. 정답은 11.
Q: 주차장에 차가 15대 있었다. 오전에 8대가 나가고 오후에 12대가 들어왔다. 지금 차는 몇 대인가?
A:"""
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": cot_prompt}]
)
print(response.choices[0].message.content)
# 예상 출력: 15대로 시작했다. 8대가 나가서 15 - 8 = 7대가 남았다. 12대가 들어와서 7 + 12 = 19대다. 정답은 19.Terminology
Related Resources
Original Abstract (Expand)
We explore how generating a chain of thought -- a series of intermediate reasoning steps -- significantly improves the ability of large language models to perform complex reasoning. In particular, we show how such reasoning abilities emerge naturally in sufficiently large language models via a simple method called chain of thought prompting, where a few chain of thought demonstrations are provided as exemplars in prompting. Experiments on three large language models show that chain of thought prompting improves performance on a range of arithmetic, commonsense, and symbolic reasoning tasks. The empirical gains can be striking. For instance, prompting a 540B-parameter language model with just eight chain of thought exemplars achieves state of the art accuracy on the GSM8K benchmark of math word problems, surpassing even finetuned GPT-3 with a verifier.