콘텐츠로 이동

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의 이점이 더 크게 나타남
  • 일반성: 수학, 상식 추론 등 다양한 작업에서 효과 입증

작동 원리

  1. 모델이 문제를 분석
  2. 단계별 중간 결론 도출
  3. 최종 답변에 도달

이러한 과정이 모델의 추론 능력을 활성화시킵니다.

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) 이후, 매우 간단한 방식이 효과적임이 밝혀졌습니다:

프롬프트:
문제: 만약 현재 온도가 25도이고, 
1시간마다 3도씩 올라간다면, 
4시간 후 온도는 몇 도일까요?

단계별로 생각해봅시다.

한국어 버전

프롬프트:
문제: 어느 가게에서는 사과를 한 개에 2000원에 판다.
10개를 사면 한 개당 500원을 할인해준다.
10개를 샀을 때 총 가격은?

단계별로 생각해봅시다.

모델의 추론 과정:

단계 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 예시를 생성하는 방법:

  1. 클러스터링: 문제들을 임베딩 공간에서 그룹화
  2. 다양성 선택: 각 클러스터에서 대표 문제 선택
  3. CoT 자동 생성: 선택된 문제들에 대해 모델이 추론 과정 생성
  4. 예시로 활용: 생성된 CoT를 few-shot 예시로 사용

이 방법의 장점: - 수동 노력 감소 - 확장성 개선 - 일관된 품질

Korean 예제들

한국 문화 관련 논리 문제

프롬프트:
다음 문제를 단계별로 풀어주세요.

문제: 설날에는 세배를 한다. 
민준이는 설날에 세배를 했다.
그러면 민준이가 한 일은 무엇일까요?

단계별로 생각해봅시다.

한국식 단위 변환 문제

프롬프트:
다음 문제를 단계별로 계산해주세요.

문제: 어머니가 쌀 20kg을 사셨습니다.
하루에 300g씩 사용한다면, 
이 쌀은 몇 일 동안 쓸 수 있을까요?

단계별로 생각해봅시다.

모델의 추론:

1단계: 단위 일치시키기
쌀의 총량: 20kg = 20,000g
하루 사용량: 300g

2단계: 나누기
사용할 수 있는 날짜 = 20,000g ÷ 300g = 66.67일

3단계: 반올림
약 67일 동안 사용 가능

답변: 약 67일

CoT의 한계와 개선

한계

  • 추론 도중 오류: 초반 단계에서 실수하면 최종 답이 틀림
  • 토큰 소비: CoT는 더 많은 토큰 사용
  • 모든 작업에 필요한 것 아님: 간단한 작업에는 불필요

개선 방법

  1. Self-Consistency: 여러 추론 경로로 앙상블 (다음 장에서)
  2. Verification: 생성된 추론 과정 검증
  3. Iterative Refinement: 잘못된 부분 수정

💡 실전 팁

효과적인 CoT 프롬프트

  1. 명확한 단계 분리: "1단계:", "2단계:" 등으로 명확하게 구분
  2. 중간 과정 표시: "따라서", "그러므로" 등 논리 연결사 사용
  3. 단위 확인: 수학 문제에서는 반드시 단위 명시
  4. 검증 요청: "답변을 확인해주세요" 추가
  5. 역할 설정: "당신은 수학 선생님입니다" 등으로 성능 향상

CoT 프롬프트 템플릿

다음 문제를 단계별로 풀어주세요.

문제: [문제 설명]

단계별 풀이:
1단계: [첫 번째 단계 설명이 필요하면 예시 제시]
2단계: [두 번째 단계]
...

최종 답변: [답 형식]

주의사항

  • 너무 긴 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로 자동 예시 생성 가능
  • 복잡한 추론 작업에서 성능 대폭 향상
  • 수학, 논리 추론, 다단계 문제 해결에 필수
  • 토큰 소비 증가와 오류 전파의 위험이 있으므로 주의 필요