본문 바로가기
Paper Review

[논문리뷰] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

by mjk0618 2023. 11. 24.

 

대규모 언어 모델의 등장 이후 프롬프트 엔지니어링이라는 새로운 학문이 탄생했습니다. 프롬프트 엔지니어링을 단순하게 정의하면 프롬프트를 정교하게 조작하여 언어 모델에게 더 좋은 답변을 얻는 방법을 연구하는 분야입니다. 아마 이와 관련해서 가장 유명한 연구가 Chain of Thought일 것이라고 생각하는데, 실제로 그 논문을 읽고 어떤 연구가 수행되었는지를 공부해보았습니다. AI나 LLM 트렌드에 대해 소개하는 세미나에서도 Chain of Thought에 대한 내용을 몇 번 들은 적이 있었는데, 흔히 프롬프트에 "Let's take step by step"과 같은 표현을 추가하면 언어 모델의 추론 성능이 눈에 띄게 좋아진다고 설명하였습니다. CoT가 실제로 추론에 이르는 과정을 생성하며 출력의 근거를 모델이 스스로 생각하게 하는 프롬프트 기법은 맞지만, 그 설명과는 조금 달랐습니다. 사실 앞선 설명은 Large Language Models are Zero-Shot Reasoners라는 또 다른 논문에서 이루어진 연구이고, Chain of Thought는 엄밀히 말하면 조금 다른 방법입니다. 그렇다면 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 논문을 구체적으로 리뷰하며 어떤 연구가 이루어졌는지 한 번 정리해보겠습니다. 번역을 통해 오히려 이해가 어려워지거나, 원문의 표현을 사용하는 게 원래 의미를 온전히 잘 전달할 것이라고 생각하는 표현은 원문의 표기를 따랐습니다. 오개념이나 오탈자가 있다면 댓글로 지적해주세요. 설명이 부족한 부분에 대해서도 말씀해주시면 본문을 수정하겠습니다.


 

1. Introduction

언어 모델은 규모가 커짐에 따라서 더욱 뛰어난 성능을 보이지만 수리 연산, 상식 추론, 기호 추론과 같이 난이도가 높은 과제에 대한 해결 능력은 단순히 모델 규모를 키우는 것만으로는 부족했습니다. 이 논문은 언어 모델의 추론 능력을 이끌어내기 위해서는 어떤 기법이 필요한지를 연구하였습니다. 이전 연구에서는 자연어로 논리 전개 과정을 생성하는 과정에서 산술 문제를 해결하는 방법이 제안되기도 하였습니다. 정답에 이르는 과정을 생성하게 하거나, 자연어 대신 기호와 수식을 서술하도록 모델을 학습하는 기법이 연구되었습니다. 모델을 파인튜닝하는 대신 프롬프트 조작을 통한 in-context learning을 사용하는 방법도 제안되었습니다.

 

하지만 두 가지 방법은 모두 각자의 한계를 갖고 있습니다. 먼저 파인튜닝은 높은 품질의 논리 전개 과정(rationale)을 포함한 데이터셋을 생성하는 비용이 많이 듭니다. 그리고 few-shot prompting은 추론이 필요한 문제에서는 모델의 성능을 충분히 끌어올리지 못했습니다. 논문에서는 두 방법의 강점만을 따와서 프롬프트 조작만을 통해 언어 모델의 추론 능력을 향상하였습니다. 프롬프트는 입력, 사고 과정(chain-of-thought), 출력으로 이루어집니다. Chain of thought는 정답에 이르는 중간 과정을 자연어를 사용해 논리적으로 전개한 것입니다. 저자는 이와 같은 프롬프트를 chain-of-thought prompting이라고 명명하였습니다.

 

 


 

2. Chain-of-Thought Prompting

여러 단계를 거쳐 해결해야 하는 수학 문제를 풀 때 사람의 머리 속에서 전개되는 사고 과정을 생각해보겠습니다. 일반적으로는 최종 정답에 이르기 전에 문제를 작게 분해합니다. 마찬가지로 이 논문에서도 언어 모델이 이와 비슷한 chain of thought를 생성하도록 하는 능력을 갖게 하는 방법을 연구합니다. 그리고 충분히 큰 규모를 갖는 모델은 그러한 논리 전개 과정을 포함한 few-shot prompt가 주어진다면 chain of thought(CoT)를 생성할 능력을 갖고 있음을 입증합니다.

 

앞에서 본 그림이 바로 모델이 CoT를 생성하여 수학 문제를 풀이한 예시입니다. 이 방법을 사용하지 않았다면 잘못된 답을 내놓았을 것입니다. CoT는 언어 모델이 논리력을 활용할 수 있게 하는 방법이라는 점에서 여러 매력적인 특징을 갖습니다.

 

먼저 CoT는 모델이 복잡한 문제를 작게 분해하여 필요한 경우 중간 단계에 추가적인 연산이 이루어지도록 합니다. 다음으로 CoT는 모델의 행동에 해석 가능성을 부여하여, 어떻게 결론에 이르게 되었는지를 알 수 있게 합니다. 따라서 개발자는 논리의 흐름에서 잘못된 부분을 찾아 디버깅할 수 있습니다. 세 번째로 CoT는 자연어로 묘사된 수학 문제, 상식 추론, 기호 조작과 같이 언어를 사용해서 풀어야 하는 문제에 적용될 수 있습니다. 마지막으로 CoT는 충분히 큰 규모를 가진 언어 모델에서 별도의 학습 없이 사용할 수 있는 기법이라는 점에서 매우 유용합니다.

 


 

3. Arithmetic Reasoning

먼저 앞의 예시에서 본 것과 같은 math word problem에 대해서 살펴보겠습니다. 논문에서는 단순히 수식을 제시하는 문제가 아니라 언어로 서술한 수학적인 문제 상황을 의미하는 math word problem이라는 표현을 사용하였지만, 편의상 앞으로는 수학 문제라고 하겠습니다.

 

3.1 Experimental Setup

Benchmark

5개의 벤치마크(GSM8K, SVAMP, ASDiv, AQuA, MAWPS)가 사용되었습니다. 각 벤치마크 데이터셋에서 포함한 문제 예시는 다음과 같습니다.

 

 

Standard prompting

베이스라인으로는 GPT-3 논문에서와 같은 일반적인 few-shot prompting이 사용되었습니다.

 

Chain-of-thought prompting

논문에서 제안한 방법은 few-shot prompt의 예시를 CoT를 사용하여 보충하는 것입니다. 사용한 데이터셋은 대부분 평가 데이터셋밖에 포함하고 있지 않기 때문에, 8개의 CoT 프롬프트를 직접 작성하였습니다. 여기서 설계한 프롬프트는 특별히 프롬프트 엔지니어링을 거치진 않았습니다. CoT 프롬프트가 일반적으로 사용될 수 있는지 여부를 검증하기 위해 같은 프롬프트를 모든 벤치마크에서 동일하게 사용하였습니다.

 

 

Language models

평가에는 InstructGPT(350M, 1.3B, 6.7B, 175B)와 LaMDA(422M, 2B, 8B, 68B, 137B), PaLM(8B, 62B, 540B), UL2(20B), Codex로 5개 모델을 사용하였습니다. 샘플링을 통해 CoT 성능을 더욱 향상할 수 있음을 발견하였지만, 이 실험에서는 greedy decoding을 통해 결과를 비교하였습니다.

 

Results

CoT는 작은 모델에서는 뛰어난 성능을 보이지 않았습니다. 오히려 일반적인 프롬프트보다 성능이 낮을 때도 있었습니다. 그리고 CoT는 GSM8K와 같이 난이도가 높은 문제에서 더욱 뛰어난 성능을 보였습니다. 반면 MAWPS에서 가장 난이도가 낮은 SingleOp에서는 성능이 거의 향상되지 않았습니다. GPT-3 175B나 PaLM 540B 모델에서는 CoT를 사용했을 때 파인튜닝한 SOTA 모델보다 우수한 결과를 보였습니다.

 

 

CoT가 왜 좋은 성능을 보이는지를 이해하기 위해서, LaMDA 137B 모델을 사용해 GSM8K 문제 50개에 대한 출력을 직접 확인해 본 결과 2개를 제외하고는 논리적, 수학적으로 합리적인 추론 과정을 거친 것을 알 수 있었습니다.

 

 

또한 정답을 맞추지 못한 50개의 출력을 분석해본 결과 46%는 계산 실수, 기호 사용 실수, 논리 과정 누락와 같이 사소한 문제를 겪은 것을 알 수 있었습니다. 나머지 54%는 문제 자체를 잘못 이해했거나 일관성이 없는 답을 보이는 중대한 실수를 포함했습니다.

 

 

3.3 Ablation Study

그렇다면 다른 형태의 프롬프트를 사용해도 같은 효과를 얻을 수 있는지를 검증할 필요가 있습니다. 저자는 세 가지 방법의 다른 프롬프트를 사용하여 결과를 분석해보았습니다.

 

Equation only

CoT가 수학 문제를 잘 풀 수 있게 한 이유 중 하나는 논리 과정 속에 수식을 포함하기 때문입니다. 따라서 CoT 프롬프트에 수식만을 포함하였을 때도 성능이 좋아지는지를 확인해보았습니다. 그런데 GSM8K와 같이 어려운 문제는 프롬프트에 제공된 수식만으로는 성능이 좋아지지 않았습니다. 하지만 여러 단계를 거치지 않고 풀 수 있는 단순한 문제는 이런 방법만으로도 성능이 좋아졌습니다.

 

 

Variable Compute only

또 다른 추측은 CoT가 문제를 푸는 데 더 많은 연산을 거치도록 하기 때문에 성능이 향상되었다는 것입니다. CoT에서 이런 연산(variable computation)과정을 제거하기 위해 모델이 수식의 문자를 출력하는 대신 같은 개수의 점들(sequence of dots, …)을 출력하게 하였습니다. 그런데 이 방법은 베이스라인과는 성능 차이를 보이지 않았습니다.

 

Variable compute가 의미하는 바는 CoT 프롬프트는 입력과 출력의 길이가 일반 프롬프트와 다르게 훨씬 길기 때문에, 단순히 거치는 연산이 많아지기 때문에 성능이 향상되는지를 확인하려고 한 것입니다. 문자를 점으로 치환해도 출력하는 문자의 개수 자체는 변하지 않기 때문에 연산량은 같은데, 성능은 나아지지 않았기 때문에 결국, 연산량이 아니라 어떤 단어를 출력하는지가 중요하다는 것을 알 수 있습니다.

 

Chain of thought after answer

CoT의 또 다른 잠재적인 이점은 모델이 사전 훈련 과정에서 얻은 지식에 접근할 수 있게 해준다는 것입니다. 그래서 저자는 CoT 프롬프트의 few-shot example에서 정답 이후에 논리 과정이 뒤따르도록 하였습니다. 이 실험도 마찬가지로 베이스라인과 성능 차이가 없었는데, 이는 CoT 프롬프트에 포함된 순차적인 논리 전개 과정을 학습하면서 모델이 합리적인 추론을 할 수 있게 되었음을 의미합니다.

 

3.4 Robustness of Chain of Thought

CoT의 유효성을 입증하기 위해서는 프롬프트에 포함된 few-shot 예제에 관계없이 일관된 성능을 보여야 합니다. 저자는 이 기법을 검증하기 위해서 서로 다른 사람이 설계한 프롬프트를 통해 결과를 비교하였습니다. 결과가 정확히 일치하지는 않지만 CoT 프롬프트를 사용했을 때 모든 경우에서 성능이 향상된 것을 알 수 있습니다.

 

 


 

4. Commonsense Reasoning

저자는 CoT가 수학 문제에서 특히 뛰어난 효과를 보이지만 자연어의 특징을 잘 활용한다는 점에서 상식 추론과 같이 배경 지식을 요구하는 문제를 해결하는 데도 도움이 될 것이라고 생각하였습니다.

 

Benchmark

다섯 개의 벤치마크 CSQA, StrategyQA, BIG-bench의 Date와 Sports 문제, SayCan을 사용하였습니다. 다음 그림은 수학 문제와 상식 추론을 포함한 논문 전체에서 수행한 실험에 대한 예시입니다.

 

 

Prompts

이전 실험과 같은 방식으로 프롬프트를 구성하였습니다. CSQA, StategyQA, SayCan은 훈련 세트를 임의로 샘플링하여 few-shot 예제로 사용하였습니다. BIG-bench는 훈련 세트가 따로 없었기 때문에 평가 세트의 일부를 사용하였습니다.

 

Results

PaLM 모델에 대한 실험 결과는 다음과 같습니다. 모든 벤치마크에서 모델의 규모에 따라 CoT의 효과가 더욱 극대화되었습니다. 실험 결과를 통해 CoT는 상식 추론 문제에서도 모델 성능을 크게 향상시킬 수 있음을 알 수 있습니다.

 

 


 

5. Symbolic Reasoning

마지막 실험으로 CoT를 사용한 언어 모델의 기호 추론(symbolic reasoning) 능력을 평가하였습니다.

 

Tasks

Last letter concatenation

모델은 주어진 이름의 각 단어에서 마지막 글자만을 추출하여 연결해야 합니다. 예를 들어 Amy Brown이라는 이름이 주어지면 각 단어의 마지막 글자인 y와 n을 선택해 yn이라는 결과를 생성합니다. 이 문제는 언어 모델의 입장에서 첫 번째 글자를 연결하는 문제보다 난이도가 높습니다.

 

Coin flip

모델은 주어진 문제를 보고 동전이 뒤집어졌는지 그렇지 않은지를 대답해야 합니다. 예를 들어 ‘A coin is heads up. Phoebe flips the coin. Osvaldo does not flip the coin. Is the coin still heads up?’라는 문제가 주어지면 모델은 no라고 답해야 합니다.

 

모델은 few-shot example과 같은 단계를 거쳐 풀 수 있는 문제인 in-domain과 더 긴 사고 과정을 거쳐 풀어야 하는 out-of-domain(OOD) 테스트 세트에 대해 평가되었습니다. 예를 들어 프롬프트에 2단어로 이루어진 이름이 주어졌을 때, 문제에도 같은 개수의 단어로 이루어진 이름이 주어진다면 in-domain, 더 긴 단어의 이름이 주어진다면 OOD 문제입니다.

 

Results

PaLM 540B 모델에 대한 실험 결과는 다음과 같습니다. 여전히 작은 모델은 CoT 프롬프트를 활용하는 데 어려움을 겪는 것을 알 수 있습니다. 반면에 큰 모델은 in-domain 뿐만 아니라 OOD 문제도 잘 해결하는 것을 알 수 있습니다. 따라서 CoT를 통해 모델이 기호 추론 문제를 잘 해결할 수 있게 될 뿐만 아니라, 길이에 따른 일반화도 잘 이루어짐을 알 수 있습니다.

 

 


 

6. Discussion

많은 추론 문제에 대해서 표준 프롬프트 기법(standard prompting)의 성능은 모델 규모에 따라 완만한 추세를 보입니다. 반면 chain of thought prompting은 모델 규모에 따라 모델의 추론 능력을 급격하게 끌어올립니다. CoT 프롬프팅은 대규모 언어 모델이 해결할 수 있는 문제의 영역을 한 층 확장해준다고 볼 수 있습니다. 즉, 일반적인 프롬프트를 사용하면 언어 모델이 가진 능력을 최대한 사용하지 못하는 것입니다. 저자는 이 실험을 통해 새로운 의문을 갖게 되었습니다. 모델 규모가 더욱 커지면 갖게 될 또 다른 능력은 무엇이 있을까요? 또 다른 프롬프팅 기법은 모델이 해결할 수 있는 태스크의 종류를 얼마나 넓힐 수 있을까요?

 

그런데 CoT가 인간의 사고 과정을 모방하기는 하지만, 실제로 신경망 내부에서 추론이 이루어지는지 알 수는 없습니다. 또한 few-shot 환경에서 CoT 프롬프트를 구성하는 것의 비용은 매우 저렴한 편이지만 이를 확장해 모델을 파인튜닝하는 것은 비용은 상당할 것입니다. 게다가 올바른 사고의 과정에 대한 기준이 없고, 항상 모델이 올바른 추론을 통해 결론에 이른다는 보장이 없습니다. 마지막으로 CoT로 인해 모델이 갖게 되는 추론 능력이 대규모 모델에서만 유효하다는 점에서, 실제 어플리케이션에 적용하기에는 한계가 있습니다. 따라서 작은 모델에서도 모델의 추론 능력을 이끌어내는 연구가 필요할 것입니다.

 


 

7. Related Work

CoT는 추론 문제를 해결하기 위해 중간 단계(intermediate step)을 활용하는 연구와 맞닿아 있습니다. 기존의 연구는 중간 단계를 포함하는 대규모 데이터셋을 활용해 모델을 파인튜닝하는 방식으로 이루어졌습니다. 수학 문제 뿐만 아니라 프로그램 작성(program synthesis)과 같은 태스크에서는 파이썬 프로그램의 출력을 예측하기 위해 단계별로 출력을 예측하며 최종 출력에 다가가는 방법을 활용하기도 했습니다.

 

이 연구는 또한 프롬프트 조작과도 깊은 관련이 있습니다. GPT-3 논문에 의해 few-shot prompting이 인기를 얻으면서 다양한 프롬프트 기법이 제안되었습니다. 자동으로 프롬프트를 학습하게 하거나, 새로운 태스크에 대한 가이드를 제시하는 방법이 그 예입니다. 모델이 태스크를 잘 수행할 수 있도록 프롬프트를 보강한다는 개념은 같지만, 이 논문에서는 출력에 이르는 사고 과정을 활용한다는 점에서 새로운 기법을 제안했다고 볼 수 있습니다.

 


 

8. Conclusion

논문은 chain of thought라는 간단하고 일반적으로 사용할 수 있는 프롬프트 설계 방법을 제안하였습니다. 이를 통해 언어 모델의 추론 능력을 극대화할 수 있습니다. 또한 수리, 기호, 상식 추론 문제에 대한 실험을 통해 CoT에 의한 추론 능력이 대규모 언어 모델에서 창발적으로 발생하는 현상임을 밝혔습니다.

 


 

9. Reflection

도입부에 언급했듯이 Chain of Thought 논문에서 "Let’s think step by step"와 같은 표현을 프롬프트에 사용하는 방법이 제안되었다고 잘못 알고 있는 경우가 많은데 실제로는 많이 다릅니다. 저도 논문을 읽어보기 전까지는 오해하고 있던 내용인데, 논문을 리뷰하며 새로운 내용을 알게 되어서 유익했습니다. 이전에 word2vec 논문을 읽는 과정에서도 기존에 잘못 알고 있던 내용을 깨닫게 되었는데, 실제로 논문을 읽으면서 알고 있던 개념을 점검하고 연구자의 인사이트를 살펴볼 수 있다는 점이 정말 좋은 것 같습니다. 

 

사실 프롬프트 엔지니어링이라는 말을 처음 들었을 때는 이것도 어떤 학문이 될 수 있는지가 의문이었습니다. 관련 지식이 많이 없어서 여전히 완벽히 해소하지 못한 의문이긴 하지만, 프롬프트 엔지니어링이 연구적으로 어떤 가치를 갖는지에 대해서 명확하게 받아들여지지가 않는 것 같습니다. 모델을 설계하는 과정에서 어떤 변형을 가하여 성능을 높이는 게 아니라, 입력을 조작함으로써 일관되게 성능을 향상한다는 개념이 조금 생소하다고 느껴집니다. 물론 이 논문을 비롯한 많은 프롬프트 엔지니어링 연구는 정교하게 설계된 실험을 통해 공정하게 결과를 비교했지만, 결과의 해석에 대해 완전하지 못하다는 느낌을 지울 수 없는 것 같습니다. 애초에 딥러닝 모델이 블랙박스이긴 하지만, 프롬프트 엔지니어링은 그런 것과는 또 다른 측면에서 해석 가능성에 의문을 갖게 하는 것 같습니다. 그래도 모델을 처음부터 사전학습하거나 파인튜닝하지 않고 저렴한 비용을 통해 이미 완성된 언어 모델의 성능을 한 층 끌어올리고, 잠재된 능력을 개방한다는 연구 자체는 굉장히 흥미롭다고 느껴집니다.

댓글