생각의 사슬: 추론 단계가 도움이 되는 이유
모델에게 "단계적으로 생각하라"고 시키면 어려운 문제를 눈에 띄게 더 잘 풉니다. 곰곰이 따져 보면 이상한 일입니다. 그것이 왜 작동하는지 짚어 봅니다.
언어 모델에서 더 나은 답을 끌어내는 가장 유용한 요령 중 하나는 거의 민망할 만큼 단순합니다. 최종 답을 내놓기 전에 문제를 단계적으로 풀어 나가게 하는 것이죠. 이것을 생각의 사슬(chain-of-thought)이라 부르며, 어려운 문제에서는 놀라운 차이를 만들어 낼 수 있습니다. 이상한 점은 그것이 작동한다는 사실 자체입니다. 모델은 이미 자신이 아는 것은 무엇이든 "알고" 있습니다. 추론을 서술하게 하는 것이 어째서 결론의 품질을 바꿔 놓을까요? 그 답은 이 모델들이 어떻게 연산하는지에 관한 근본적인 무언가를 드러냅니다.
짧게 말하면 이렇습니다. 모델은 출력을 한 번에 한 조각씩, 조각마다 고정되고 한정된 양의 연산으로 만들어 내며, 생각의 사슬은 어려운 답에 도달하는 데 쓸 조각을, 따라서 연산을 더 많이 줍니다. 그 단계들은 장식이 아닙니다. 그것들은 작업 공간입니다.
한꺼번에 답하는 것의 문제
누군가에게 다단계 산술이나 논리 질문을 던지면서, 아무것도 풀어 볼 기회 없이 최종 답을 즉각 요구하는 장면을 그려 보세요. 쉬운 질문이라면 괜찮습니다. 어려운 질문이라면 가혹합니다. 모든 중간 추론을 보이지 않게, 한꺼번에, 무엇 하나 펼쳐 놓을 여지도 없이 일어나도록 강요하는 셈이니까요.
언어 모델도 이 제약의 한 버전에 직면합니다. 다음 텍스트 조각을 생성할 때, 모델은 고정된 양의 연산을 수행하고 하나의 출력에 확정합니다. 어떤 문제가 의존적인 여러 추론 단계를 요구하는데 답을 즉각 요구하면, 그 모든 단계가 그 단 한 번의 연산 폭발 안으로 압축되도록 강요됩니다. 정말로 어려운 문제에서는 그 한 단계 안에 작업을 할 공간이 그저 충분치 않습니다. 모델은 다단계 추론을 단번에 하라는 요구를 받고 있고, 사람이 그러하듯 같은 이유로 비틀거립니다.
단계를 적어 내는 것이 상황을 어떻게 바꾸는가
생각의 사슬은 그 병목을 영리한 방식으로 제거합니다. 모델이 추론을 단계적으로 적어 내면, 그것이 만들어 내는 각 단계가 다음 단계를 만들기 위해 읽어 들이는 텍스트의 일부가 됩니다. 중간 결과들은 숨겨지고 고정된 크기의 메모지에 담아 둘 필요가 없습니다. 그것들은 적혀 나오고, 그 적힌 버전이 이어서 쌓아 올릴 재료로 쓸 수 있게 됩니다.
그래서 다섯 단계짜리 문제를 한 번의 연산 폭발로 압축하는 대신, 모델은 그것을 다섯 번(혹은 그 이상)의 폭발에 펼쳐 놓으며, 각각이 이전 단계들의 결과를 읽을 수 있습니다. 첫 단계는 사실 하나를 세우고, 둘째 단계는 그 사실을 사용하며 또 하나를 더하고, 그렇게 이어져, 최종 답은 각각 제 몫의 노력으로 계산된 중간 결과들의 사슬 위에 놓입니다. 모델은 사실상, 연산할 텍스트를 스스로에게 더 줌으로써 연산을 스스로에게 더 주고 있는 것입니다.
생성된 추론은 사후에 만들어진 설명에 그치지 않습니다. 그것은 연산이 실제로 일어나는 매체입니다. 그것을 치우면 작업할 공간을 치우는 것입니다.
왜 더 많은 텍스트가 더 많은 연산을 뜻하는가
이것이 핵심이며, 신중하게 말할 가치가 있습니다. 모델은 자신이 생성하는 출력 조각마다 대략 고정된 양의 연산을 씁니다. 따라서 한 문제에 끌어올 수 있는 총 연산은 그 과정에서 얼마나 많은 텍스트를 만들어 내느냐에 묶여 있습니다.
한 단어짜리 답은 그 연산을 한 단위 받습니다. 길게 풀어낸 해법은 여러 단위를 받습니다. 추론을 적어 냄으로써 모델은 단지 작업 과정을 보여 주는 것이 아니라, 결론에 도달할 더 많은 총 연산을 스스로에게 사들이는 것입니다. 각 중간 단계는 문제에 적용되는 또 한 덩어리의 처리이고, 앞 단계들의 적힌 기록은 뒤 단계들이 그것을 다시 하지 않고 그 위에 설 수 있게 해 줍니다. 이것이 생각의 사슬이, 의존적인 여러 단계가 필요한 바로 그런 문제에서 가장 도움이 되고, 즉각적인 답이 이미 처리하는 문제에서는 거의 의미가 없는 이유입니다. 쉬운 질문은 여분의 공간이 필요 없고, 어려운 질문은 필요로 합니다.
왜 단계는 생각만으로는 안 되고 적혀야 하는가
자연스러운 질문 하나. 모델에 어차피 내부 연산이 있다면, 왜 단계를 텍스트로 외부화해야 할까요? 왜 조용히 추론하고 답만 내놓지 않을까요? 그 이유는 단계마다 고정된 한계로 되돌아갑니다. 단일 출력에 대한 모델의 숨겨진 내부 처리는 유한합니다. 한 단계 안에서, 임의로 긴 추론의 사슬을 내부적으로 돌릴 수 없습니다.
단계를 적어 내는 것이 모델이 그 단계별 한계를 벗어나는 방식입니다. 적힌 각 단계는 예산을 초기화합니다. 다음 단계는 제 몫의 새로운 연산 할당을 받고, 지금까지 적힌 모든 것을 읽을 수 있습니다. 텍스트는 짧고 한정된 연산 폭발이 더 긴 무언가로 사슬처럼 이어지게 하는 메커니즘입니다. 외부화하지 않으면 사슬 잇기가 없습니다. 모델은 단일 단계의 한계 안에서 모든 것을 하는 데 갇히고 맙니다. 말하자면 그 종이가 확장된 추론을 가능하게 하는 것입니다.
생각의 사슬이 보장하지 않는 것
이것을 지나치게 낭만적으로 보지 않는 것이 중요합니다. 모델이 적어 내는 추론은, 그것이 답에 어떻게 도달했는지를 충실히 보여 주는 보장된 창이 아닙니다. 모델은 자신의 결론을 이끈 연산과 실제로는 대응하지 않는, 그럴듯해 보이는 단계의 사슬을 만들어 낼 수 있고, 완벽하게 정연하게 들리는 추론을 거쳐 틀린 답에 도달할 수 있습니다. 보이는 단계들은 모델이 적는 다른 모든 것과 같은, 오류를 범할 수 있는 과정으로 생성됩니다.
이는 생각의 사슬이 성능을 향상시키되 기본적으로 출력을 신뢰할 만하게 만들지는 않는다는 뜻입니다. 확신에 차고 잘 구조화된 추론의 흐름도 여전히 틀린 단계를 품을 수 있고, 최종 답은 엄밀하게 들리면서 그 오류를 물려받습니다. 생각의 사슬은 모델에 연산할 공간을 더 주어, 풀 수 있는 것의 천장을 높입니다. 그것이 정확함이나 정직함을 설치해 주지는 않습니다. 그 추론은 작업 공간이지, 증명이 아닙니다.
언제 꺼내 들고, 언제 들지 말아야 하는가
메커니즘을 알면 생각의 사슬이 그 비용을 치를 만한 때가 언제인지 알 수 있습니다. 그것은 의존적인 여러 단계가 있는 문제에서 빛납니다. 다단계 수학, 논리 퍼즐, 신중한 분석, 답이 회상되기보다 쌓아 올려지는 모든 것 말이죠. 이런 문제에서는 중간 결과를 펼쳐 놓을 공간을 모델에 주는 것이 성공률을 진짜로 높여 줍니다.
하지만 단순한 조회나 단일 단계 질문에서는 낭비입니다. 여분의 단계가 답을 개선하지 못한 채 길이와 비용만 더하니까요. 그리고 적힌 추론은 연산과 출력을 소모하므로 공짜가 아닙니다. 텍스트가 많을수록 시간도 비용도 더 듭니다. 요령은 도구를 문제에 맞추는 것입니다. 문제가 실제로 필요로 하는 곳에 여분의 작업 공간을 쓰고, 즉각적인 답이 이미 충분한 곳에서는 건너뛰는 것이죠.
정리
생각의 사슬이 작동하는 이유는 모델이 만들어 내는 텍스트 조각마다 고정된 양의 연산을 얻고, 추론을 적어 냄으로써 더 많은 조각을, 따라서 어려운 답에 도달할 더 많은 총 연산을 스스로에게 주기 때문입니다. 그 단계들은 나중에 덧붙인 설명이 아닙니다. 그것들은 연산이 일어나는 작업 공간이고, 그것을 외부화하는 것이야말로 짧은 처리의 폭발들이 확장된 추론으로 사슬처럼 이어지게 하는 것입니다. 그것은 모델이 풀 수 있는 것의 천장을 높이지만, 단계들이 충실하다거나 답이 정확하다고 보장하지는 않습니다. 문제에 의존적인 여러 단계가 정말로 있는 곳에 쓰면, 그것은 모델에서 더 많은 것을 끌어내는 가장 지렛대 효과가 큰 방법 중 하나입니다.
