대조적 사고 사슬 (Contrastive Chain-of-Thought): 각 정답 추론에 레이블이 지정된 오답을 쌍으로 묶어 모델에게 추론
요약
대조적 사고 사슬(Contrastive CoT)은 정답 추론과 함께 레이블이 지정된 오답 예시를 쌍으로 제공하여 모델의 추론 능력을 향상시키는 기법입니다. 정답만 제공하는 기존 CoT의 한계를 극복하기 위해 의도적으로 손상된 추론 경로를 학습시켜 모델이 오류를 식별하도록 돕습니다.
핵심 포인트
- 정답과 레이블링된 오답을 쌍으로 구성하여 추론 경계를 명확히 함
- 연산자 뒤집기, 순서 섞기 등을 통해 자동화된 부정적 예시 생성 가능
- 추가 파인튜닝 없이 단 한 번의 추론 호출로 성능 향상 가능
- 모델이 흔히 범하는 논리적 함정을 효과적으로 방지
일반적인 사고 사슬 (Chain-of-Thought, CoT) 방식은 모델에게 몇 가지 정답 예시를 제공하고 모델이 올바른 단계를 일반화하기를 기대합니다. 이는 진정으로 강력한 방식이지만, 저는 모델이 다단계 산술 문제에서 동일한 함정에 빠지는 것을 계속 목격했습니다. 빼야 할 때 더하거나, 단계 순서를 뒤섞거나, 잘못된 숫자를 가져오는 식입니다. 문제는 정답만 포함된 프롬프트는 선의 _한쪽 면_만을 그린다는 점입니다. 모델은 좋은 추론이 어떤 모습인지는 보지만, 나쁜 추론이 어떤 모습인지는 결코 보지 못합니다. 대조적 CoT (Contrastive CoT, Chia et al., 2023)는 그 경계를 닫아주며, 저는 이를 증명하기 위해 실시간 프롬프트 빌더를 구축했습니다. 작동 방식은 다음과 같습니다.
정답 전용 프롬프트가 놓치는 실수
퓨샷 CoT (Few-shot CoT)는 몇 개의 질문과 각 질문에 대해 단계별 추론 (rationale) 및 정답이 포함된 방식입니다. "크루아상 23개, 15개 판매, 30개 추가로 구움"과 같은 3단계 문제에서, 깨끗한 사고 사슬만 본 모델은 여전히 실수를 저지릅니다. 유출된 양을 먼저 빼는 대신(38) 모든 숫자를 더해버립니다(68). 예시들은 "모든 것을 더하는" 경로가 틀렸다는 것을 _입증_하지 않았기 때문에, 프롬프트의 어떤 것도 이를 배제하지 못합니다.
// STEP 1 — 일반적인 퓨샷 CoT: 정답 추론, 그 다음 정답.
const shots = examples.map(e =>
`Q: ${e.q}\nA: ${e.rationale} So the answer is ${e.answer}.`
...
정답 사슬을 손상시켜 부정적 예시(negative) 생성하기
오답을 직접 손으로 쓰는 것이 아니라, 정답을 통제된 방식으로 망가뜨리는 것입니다. 논문에서는 연결 객체와 추론을 손상시키는데, 제 데모에서는 세 가지 저렴하고 자동화된 변환을 사용합니다: 연산자 뒤집기, 단계 순서 섞기, 또는 두 숫자 바꾸기입니다. 각 방식은 그럴듯해 보이지만 유효하지 않은 사슬을 만들어냅니다.
function corrupt(rationale, kind) {
if (kind === "operation") return flipAnOperator(rationale); // − 가 + 로 변함
if (kind === "order") return lumpStepsOutOfOrder(rationale);
...
레이블은 핵심적인 역할을 합니다
이것이 가장 중요한 단 하나의 세부 사항입니다. "이것은 틀렸습니다"라는 표시 없이 손상된 추론 사슬을 보여주는 것은 단순히 실수만을 가르치는 꼴이 됩니다. 각 예시는 하나의 쌍(pair)이 됩니다. 즉, 올바른 설명과, 피해야 할 경로라고 명시적으로 표시된 잘못된 설명이 쌍을 이루며, 바로 이 쌍을 만드는 것이 경계(boundary)를 그려냅니다.
const pair = e => ({
q: e.q,
correct: { rationale: e.rationale, answer: e.answer },
...
프롬프트 조립하기 — 단 한 번의 호출, 파인튜닝 불필요
예시별로 다음과 같이 교차 배치합니다: 질문 → 올바른 설명 → 레이블이 지정된 잘못된 설명. 그런 다음 짧은 가이드 라인과 함께 정답을 배치합니다. 이것이 기술의 전부입니다. 더 풍부한 프롬프트를 사용하면서도, 여전히 단 한 번의 추론 (inference) 호출만 필요하며, 추가적인 모델도 필요하지 않습니다. 이것이 바로 사용자가 토글을 조작할 때 라이브 빌더(live builder)가 조립하는 방식입니다.
const block = p =>
`Q: ${p.q}\n` +
`Correct explanation: ${p.correct.rationale} So the answer is ${p.correct.answer}.\n` +
...
활용 가치
대조적 사고 사슬 (Contrastive CoT)은 오류가 체계적이고 반례 (counter-examples)로 구성하기 쉬운 다단계 산술 및 기호 추론 (symbolic reasoning)에서 가장 큰 효과를 발휘합니다. 이는 일반적인 사고 사슬 (CoT)의 엄격한 업그레이드 버전입니다. 동일한 작동 예시 (worked examples)에 레이블이 지정된 부정적 예시 (labelled negatives)를 추가한 형태이며, 자기 일관성 (self-consistency) 기법과 결합할 수 있습니다. 대조를 통해 각 샘플의 오류율을 낮춘 다음, 샘플들 사이에서 투표를 진행하는 방식입니다. 부정적 예시는 명확하게 레이블을 지정하고 예시당 한두 개만 사용하십시오. 너무 많거나 레이블이 없으면, 배제하려 했던 바로 그 실수를 가르치게 될 위험이 있습니다. 오류를 오류로서 보여주는 것이, 모델이 결코 오류를 범하지 않기를 바라는 것보다 훨씬 효과적입니다.
Contrastive를 켜고 조립된 프롬프트가 재구성되는 것을 지켜보세요. 그리고 정답이 68에서 38로 바뀌는 것을 확인하십시오:
https://dev48v.infy.uk/prompt/day47-contrastive-cot.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기