Chain-of-thoughts는 large language model(LLM)이 최종적인 답까지 도달하기 전에 중간 reasoning 단계들을 더해줌으로써 LLM의 reasoning 능력과 함께 정확한 답을 도출할 수 있게 하는 것을 의미하고, 줄여서 CoT라고도 한다. 비교적 최근에 나온 모델 중 하나인 GPT-o1이 이러한 CoT를 기반으로 아래 그림처럼 다양한 문제를 해결하는 성능을 굉장히 많이 끌어 올렸다고 해 화제가 되기도 하였다. 나보다 IQ 높은 듯.. 이번 글에서는 최근 LLM의 핵심적인 성능 향상 기반 중 하나인 CoT가 무엇인지에 대해 알아보겠다.
Overview
CoT는 앞서 설명한 것처럼 여러 단계의 중간 reasoning 단계들을 통해 답을 더 쉽게 도출할 수 있게 하는 프레임워크를 말한다. 답을 바로 말하는 것이 아닌, 사람이 복잡한 문제를 해결하는 방법처럼 step-by-step reasoning을 통해서 문제를 해결함으로써, 정확한 답을 도출하는 데에 도움을 준다. 뿐만 아니라, LLM이 어떻게 답을 도출하는지의 과정을 보여줌으로써 black-box였던 LLM의 답 도출 과정의 interpretability를 올리는 데에도 기여하고 있다고 할 수 있다.
예를 들어, 우리가 12+13+17=?라는 문제를 풀고 있다고 하자. 물론 이러한 간단한 문제는 우리가 바로 암산을 할 수도 있겠지만, "12+13=25이고, 25+17=42이니까 최종 정답은 42이다."라는 중간 reasoning 단계들을 거치면 훨씬 더 복잡한 문제들을 더 정확하게 해결할 수 있을 것이다. 이러한 단계들을 넣어주거나, LLM이 만들 수 있도록 유도하는 것이 CoT의 생성 과정이라고 할 수 있다.
Few-shot CoT
가장 먼저 제시된 CoT의 개념은 few-shot CoT이다. Few-shot CoT는 여러 개의 비슷한 문제를 해결하는 예시 CoT들을 LLM에 입력해서, 이를 기반으로 LLM이 비슷한 reasoning 단계를 따라갈 수 있도록 유도하는 것이다. 아래 그림을 살펴보자.
우선, 위 그림은 풀려고 하는 문제와 비슷한 문제들의 예시와 함께 현재 해결하려고 하는 문제를 model input에 넣고, LLM이 해당 문제의 정답을 output으로 도출하는 상황이다. 기존의 few-shot standard prompting 방법(그림에서 왼쪽)을 보면, 답을 만들어야 하는 A (answer): 부분에 직접적인 답만 제시했기 때문에, LLM이 이러한 문제를 푸는 데에 어려움을 겪고 있는 것을 알 수 있다. 이에 반해 few-shot chain-of-thought prompting 방법(그림에서 오른쪽)은 비슷한 문제들의 예시를 넣을 때, 답만 제시하는 것이 아닌 이를 해결하는 데에 필요한 reasoning 단계들까지 함께 넣어주어 LLM이 이를 따라할 수 있게 유도한다.
그 결과, 상식 문제, 간단한 수학 문제, 기호 문제 등에서 전반적으로 성능이 올랐음을 확인할 수 있다.
하지만 이러한 방법에는 비슷한 예시 CoT를 하나씩 manual하게 입력해주어야 한다는 한계점이 있다. 그래서 우리가 풀고자 하는 문제와 비슷한 문제가 존재하지 않거나, 새로운 도메인에 이를 적용해야 한다면 적용이 힘들다는 문제가 생기는 것이다. 이러한 문제를 해결하기 위해서 zero-shot CoT가 등장하였다.
Zero-shot CoT
Zero-shot CoT는 정말 간단하게 prompt에 "Let's think step by step."이라는 문장을 넣어준다. 즉, LLM이 예시 없이 스스로 step-by-step으로 생각할 수 있도록 유도하는 것이다. 아래 그림을 보자.
위 그림을 보면, few-shot CoT는 예시에 reasoning 단계들을 manual하게 넣어주어야 했지만, zero-shot CoT는 그냥 단계별로 생각해보라는 prompt를 넣음으로써 reasoning이 자동으로 되도록 유도하는 것을 확인할 수 있다. 구체적으로는, 다음과 같은 two-stage 방법을 통해 최종 정답을 도출한다.
즉, 1) question과 "Let's think step by step."을 LLM의 input으로 넣어 reasoning을 생성하고, 2) 이 reasoning을 이전의 input에 붙여서 LLM에 넣어 최종 정답을 도출한다. 이러한 간단한 방법으로도 아래 표처럼 few-shot CoT에 비해 성능을 향상시켰다.
Conclusion
이번 글에서는 CoT가 무엇인지에 대해 가장 기본적인 두 논문의 설명을 통해 알아보았다. 이후 다양한 CoT를 향상시키는 방법들 뿐만 아니라, 최근 o1의 성능을 향상시키는 데에 결정적인 역할을 한 tree-of-thought까지 등장하였는데, 이들에 대해 다음 글들에서 다루어보겠다.
References
1. Wei, J., et al. (2022). Chain-of-thought prompting elicits reasoning in large language models. NeurIPS 2022.
2. Kojima, T., et al. (2022). Large language models are zero-shot reasoners. NeurIPS 2022.
최근댓글