Chain-of-Thought Prompting¶
개념¶
Chain-of-Thought (CoT)는 모델에게 최종 답변을 직접 제시하도록 요구하기보다는, 단계별로 추론 과정을 명시적으로 표현하도록 유도하는 기법입니다. 복잡한 문제에서 모델의 성능을 획기적으로 향상시킵니다.
원리: Wei et al. (2022) 연구¶
핵심 발견¶
Wei et al. (2022)의 논문 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models"은 다음을 증명했습니다:
- 추론 과정 표현의 중요성: 단순히 답만 요구하는 것보다 중간 단계를 거치면 정확도 대폭 향상
- 스케일 효과: 모델이 클수록 CoT의 이점이 더 크게 나타남
- 일반성: 수학, 상식 추론 등 다양한 작업에서 효과 입증
작동 원리¶
- 모델이 문제를 분석
- 단계별 중간 결론 도출
- 최종 답변에 도달
이러한 과정이 모델의 추론 능력을 활성화시킵니다.
Few-Shot Chain-of-Thought¶
기본 구조¶
프롬프트:
문제를 풀기 위해 단계별로 생각해주세요.
예시:
문제: 만약 홍철이가 3개의 사과를 가지고 있고,
미영이가 5개의 사과를 가지고 있다면,
둘이 가진 사과는 총 몇 개일까요?
생각 과정:
1단계: 홍철이의 사과 개수 = 3개
2단계: 미영이의 사과 개수 = 5개
3단계: 총 개수 = 3 + 5 = 8개
답변: 8개
이제 다음 문제를 풀어보세요:
문제: 한 가게에서 책 2권을 사고,
다음 날 3권을 더 샀다면,
총 몇 권을 샀을까요?
복잡한 수학 문제 예제¶
프롬프트:
다음 문제를 단계별로 풀어주세요.
예시:
문제: 어떤 수에 5를 더하면 20이 됩니다. 이 수는 무엇입니까?
생각 과정:
1단계: 미지수를 x라고 하자
2단계: 식을 세우면: x + 5 = 20
3단계: 양변에서 5를 빼면: x = 20 - 5
4단계: x = 15
답변: 15
이제 다음 문제를 풀어보세요:
문제: 어떤 수를 3배로 늘린 후 4를 빼면 11이 됩니다.
이 수는 무엇입니까?
논리 추론 예제¶
프롬프트:
다음 문제를 논리적으로 풀어주세요.
예시:
문제: 모든 인간은 죽는다. 소크라테스는 인간이다.
따라서 소크라테스는?
생각 과정:
1단계: 대전제: 모든 인간은 죽는다
2단계: 소전제: 소크라테스는 인간이다
3단계: 결론: 소크라테스도 인간이므로 죽는다
답변: 소크라테스는 죽는다
이제 다음 문제를 풀어보세요:
문제: 모든 금속은 전기를 전도한다. 구리는 금속이다.
따라서 구리는?
Zero-Shot Chain-of-Thought¶
"단계별로 생각해봅시다" (Let's Think Step by Step)¶
Wei et al. (2022) 이후, 매우 간단한 방식이 효과적임이 밝혀졌습니다:
한국어 버전¶
모델의 추론 과정:
단계 1: 원래 가격 계산
한 개의 가격: 2000원
10개의 원래 가격: 2000 × 10 = 20,000원
단계 2: 할인 계산
한 개당 할인: 500원
10개에 대한 총 할인: 500 × 10 = 5,000원
단계 3: 최종 가격 계산
최종 가격: 20,000 - 5,000 = 15,000원
답변: 15,000원
Automatic Chain-of-Thought (Auto-CoT)¶
Zhang et al. (2022) 방법¶
수동으로 예시를 만드는 것 대신, 자동으로 CoT 예시를 생성하는 방법:
- 클러스터링: 문제들을 임베딩 공간에서 그룹화
- 다양성 선택: 각 클러스터에서 대표 문제 선택
- CoT 자동 생성: 선택된 문제들에 대해 모델이 추론 과정 생성
- 예시로 활용: 생성된 CoT를 few-shot 예시로 사용
이 방법의 장점: - 수동 노력 감소 - 확장성 개선 - 일관된 품질
Korean 예제들¶
한국 문화 관련 논리 문제¶
한국식 단위 변환 문제¶
프롬프트:
다음 문제를 단계별로 계산해주세요.
문제: 어머니가 쌀 20kg을 사셨습니다.
하루에 300g씩 사용한다면,
이 쌀은 몇 일 동안 쓸 수 있을까요?
단계별로 생각해봅시다.
모델의 추론:
1단계: 단위 일치시키기
쌀의 총량: 20kg = 20,000g
하루 사용량: 300g
2단계: 나누기
사용할 수 있는 날짜 = 20,000g ÷ 300g = 66.67일
3단계: 반올림
약 67일 동안 사용 가능
답변: 약 67일
CoT의 한계와 개선¶
한계¶
- 추론 도중 오류: 초반 단계에서 실수하면 최종 답이 틀림
- 토큰 소비: CoT는 더 많은 토큰 사용
- 모든 작업에 필요한 것 아님: 간단한 작업에는 불필요
개선 방법¶
- Self-Consistency: 여러 추론 경로로 앙상블 (다음 장에서)
- Verification: 생성된 추론 과정 검증
- Iterative Refinement: 잘못된 부분 수정
💡 실전 팁¶
효과적인 CoT 프롬프트
- 명확한 단계 분리: "1단계:", "2단계:" 등으로 명확하게 구분
- 중간 과정 표시: "따라서", "그러므로" 등 논리 연결사 사용
- 단위 확인: 수학 문제에서는 반드시 단위 명시
- 검증 요청: "답변을 확인해주세요" 추가
- 역할 설정: "당신은 수학 선생님입니다" 등으로 성능 향상
CoT 프롬프트 템플릿
주의사항
- 너무 긴 CoT는 모델을 혼동시킬 수 있음
- 문제에 맞지 않는 CoT 형식은 성능 저하
- 때로는 간단한 문제에 CoT가 불필요할 수도 있음
성능 비교¶
정확도 비교 (수학 문제 벤치마크):
일반 프롬프팅: ████░░░░░░ 40%
Zero-Shot CoT: ████████░░ 80%
Few-Shot CoT: ██████████ 95%
Self-Consistency: ██████████ 99%
📝 핵심 정리¶
- Chain-of-Thought는 모델에게 추론 과정을 명시적으로 표현하도록 유도
- Wei et al. (2022)의 연구로 효과성 입증
- Zero-Shot CoT("단계별로 생각해봅시다")도 효과적
- Auto-CoT로 자동 예시 생성 가능
- 복잡한 추론 작업에서 성능 대폭 향상
- 수학, 논리 추론, 다단계 문제 해결에 필수
- 토큰 소비 증가와 오류 전파의 위험이 있으므로 주의 필요