https://arxiv.org/pdf/2205.10625
Abstract:
- 이 기법은 복잡한 추론 작업을 하기 위한 프롬프트 기법임.
- 기존의 CoT (chain-of-thought) 프롬프트 기법은 다양한 추론 작업에서 성능 향상을 이끌 수 있다는 걸 증명했음. 하지만 프롬프트에 제시된 예시보다 더 복잡한 작업은 잘 풀지 못하는 한계점이 있었음.
- 이 논문은 보다 어려운 문제를 풀기 위해서 제안된 논문임.
- Least-to-Most Prompting 의 핵심 아이디어는 복잡한 문제를 더 간단한 하위 문제들의 연속으로 분할한 후, 이를 순차적으로 해결해나가는 방법임.
- 이전에 푼 하위 문제가 다음에 풀 하위 문제를 해결하는데 도움을 주는 방식으로 결론적으로 최종 문제를 해결할 수 있도록 하는 것.
Introduction:
- CoT 기법은 언어 모델이 자신의 최종 답에 대한 근거를 내리도록 할 수 있고, 몇 가지 예시 작업으로도 추론을 하게 만들 정도로 큰 진전을 이뤘다고 함. 특히 이 기법과 Self-Consistency Decoding 을 결합하면 많은 복잡한 자연어 처리 작업에서 성능적인 향상을 이뤘다고도 함.
- 하지만 CoT 는 프롬프트에 제안된 데모(예시) 보다 더 어려운 문제를 해결하는 작업에서는 성능이 저하되는 한계가 있음.
- 이를 해결하기 위해 저자들은 Least-to-Most Prompting이라는 새로운 프롬프팅 전략을 제안한 것.
- 이 전략은 크게 두 단계로 구성됨:
- a) 복잡한 문제의 분해: 먼저 복잡한 문제를 더 간단한 하위 문제들의 목록으로 분해한다.
- b) 하위 문제의 순차적 해결: 그런 다음 이 하위 문제들을 순서대로 해결한다. 여기서 각 하위 문제를 풀 때 이전에 해결한 하위 문제들의 답이 도움이 되야함.
- 이 기법은 프롬프트로만 구현되며, 별도의 훈련이나 파인 튜닝이 필요하지 않음
- Least-to-Most Prompting 이라는 용어는 교육 심리학에서 가져온 개념임. 학생이 새로운 기술을 학습할 때 점진적인 프롬프트 시퀀스를 사용하는 기법을 의미함.
Least-to-Most Prompting Example:
Least-to-Most Prompting:
- 작동 원리에 대해서 더 깊게 보자:
-
- 문제 분해 (Decomposition):
- 복잡한 문제를 더 간단한 하위 문제들의 목록으로 분해하는 과정.
- 하나의 하위 문제로만 분할하는게 아니라 한번에 모든 하위 문제로 분할 해야함.
- 프롬프트에는 이러한 분해 과정을 보여주는 고정된 예시들이 포함되어야 한다. 그리고 하위 문제 분해에는 해당 문제를 제시하는 질문이 나와야함.
- 문제 분해 (Decomposition):
-
- 하위 문제 해결(Subproblem Solving):
- 이 단계의 프롬프트는 세 부분으로 이루어짐:
- a. 하위 문제를 어떻게 해결하는지 보여주는 고정된 예시들
- b. 이전에 답변한 하위 질문들과 생성된 해답들의 목록
- c. 다음에 답변해야 할 질문.
- 하위 문제 해결(Subproblem Solving):
- 즉 이 방법의 Least-to-prompting 은 Multi-turn 방식으로 최종 답변을 만들어내는거임.
- LLM 에게서는 하나씩 하나의 하위 문제에 대한 답을 물어보고, 그 답을 추가하는 식으로 반복해나간다. 모든 하위 문제가 끝나면 이제 최종 답변을 만들어 냄.
- 하위 문제를 순차적으로 반복적으로 풀어나가고, 최종 답변을 생성해나가는.
-
- 이 프롬프트 기법은 다른 프롬프트 기법과 충분히 결합할 수 있다. CoT 기법이나 Self Consistency 기법과 충분히 결합할 수 있음.
- Least-to-prompting 은 단일 작업으로도 통합해볼 수 있음. 하위 문제 분할과 하위 문제를 하나씩 해결해나가는 걸 단일 Pass 프롬프트로 만들어볼 수 있다.
Least-to-Most 프롬프팅의 결과 테스트 - 마지막 글자 연결(last-letter-concatenation) 작업
- 이 작업에서 입력은 단어들의 리스트이며, 출력은 그 리스트에 있는 각 단어의 마지막 글자들을 연결한 문자열임.
- 작업 예시:
- 입력: “thinking, machine”
- 출력: “ge”
- 이유: “thinking”의 마지막 글자는 “g”, “machine”의 마지막 글자는 “e”이므로 이를 연결하면 “ge”가 됨.
- CoT 은 프롬프트 예시들과 동일한 길이의 리스트에 대해서는 완벽한 성능을 보임.
- 그러나 테스트 리스트가 더 길어지면 성능이 저하된다.
- 예를 들어, 프롬프트 예시들이 2개의 단어로 이루어진 리스트라면, 3개 이상의 단어로 이루어진 테스트 리스트에서는 정확도가 떨어지기 시작함.
- 즉 CoT 는 일반화 능력이 떨어지는거임.
- 반면 Least-to-Most 프롬프팅의 는 일반화 능력이 강화됨. 리스트가 얼마나 길어지더라도, CoT 보다 훨씬 높은 성능을 보임.
Least-to-Most Prompt: 마지막 글자 연결(last-letter-concatenation) 작업 :
문제 분해(Decomposition):
- 임의의 길이의 리스트를 순차적인 하위 리스트로 분해
Q: "think, machine, learning"
A: "think", "think, machine", "think, machine, learning"
- 이 예시에서, 전체 리스트를 부분 리스트로 나누는 과정을 보여줌.
문제 해결 (Solution):
- 각 하위 리스트를 사용하여 원하는 출력을 생성하는 방법을 보여줌.
- 실제로 프롬프트를 작성할 때 이 예시를 넣으면 될 것.
Q: "think, machine"
A: "think"의 마지막 글자는 "k"입니다. "machine"의 마지막 글자는 "e"입니다. "k"와 "e"를 연결하면 "ke"가 됩니다. 따라서, "think, machine"은 "ke"를 출력합니다.
Q: "think, machine, learning"
A: "think, machine"은 "ke"를 출력합니다. "learning"의 마지막 글자는 "g"입니다. "ke"와 "g"를 연결하면 "keg"가 됩니다. 따라서, "think, machine, learning"은 "keg"를 출력합니다.
CoT 프롬프팅의 결과 테스트 - 마지막 글자 연결(last-letter-concatenation) 작업:
- 이전 하위 문제를 참조하지 않고 한번에 답변을 처음부터 서술하는 식으로 답변이 작성됨.
Q: "think, machine"
A: "think"의 마지막 글자는 "k"입니다. "machine"의 마지막 글자는 "e"입니다. "k"와 "e"를 연결하면 "ke"가 됩니다. 따라서, "think, machine"은 "ke"를 출력합니다.
Q: "think, machine, learning"
A: "think"의 마지막 글자는 "k"입니다. "machine"의 마지막 글자는 "e"입니다. "learning"의 마지막 글자는 "g"입니다. "k", "e", "g"를 연결하면 "keg"가 됩니다. 따라서, "think, machine, learning"은 "keg"를 출력합니다.
마지막 글자 연결(last-letter-concatenation) 작업 결과:
- GPT-3의 code-davinci-002 모델을 이용해서 성능을 테스트 해봤음.
- 사용한 데이터는 Wiktionary에서 무작위로 단어를 샘플링하여 길이가 4에서 12까지 다양한 테스트 리스트를 구성했음.
- 테스트 한 프롬프팅들은 다음과 같다:
- 표준 프롬프팅(Standard Prompting)
- 체인 오브 쏘트 프롬프팅(Chain-of-Thought Prompting)
- Least-to-Most 프롬프팅
- 표준 프롬프팅: 정확도 0%로, 모든 테스트 케이스에서 완전히 실패했음.
- CoT: 표준 프롬프팅보다 성능이 크게 향상되었지만, 리스트 길이가 길어질수록 성능이 급격히 떨어짐.
- Least-to-Most 프롬프팅: 체인 오브 쏘트 프롬프팅에 비해 현저히 높은 정확도를 보였으며, 특히 리스트가 길어질수록 그 우수성이 두드러졌음.
- Least-to-Most 프롬프팅도 오류가 발생한다고 함. 근데 그런 오류는 주로 최종적인 답변에서 틀리는게 아니라 중간 과정에서 실수를 한다고 한다.
- 하위 문제를 여러번 푸는데 이 과정에서 실수가 일어난다고 함.
- 이건 하위 문제 해결과 현재 문제와의 연결 과정에서의 실수가 일어나는 것으로 보인다고 함.
- 이는 긴 문맥에서의 상태 유지나 메모리 제한으로 인해 발생할 수 있다고 함.
- 그래서 연결 과정에서 정확성을 향상하는 다른 기법이 필요하다고 한다.
모델의 성능을 개선하는 방법은 다양하게 있음;
- 특별한 모델 아키텍처 설계, Neural-Symbolic Architectures 설계, Fine-tuning, 특별한 Training
- 다만 소수의 예시를 사용하는 Least-to-Most 프롬프팅 만으로도 성능을 달성할 수 있음.
Limitations:
- 서로 다른 도메인 간에 잘 일반화되지 않는 경향이 있다고 함.:
- 수학 단어 문제를 분해하는 방법을 보여주는 프롬프트(테이블 9에 나오는 것)는 상식 추론 문제(예: “아리스토텔레스가 노트북을 사용했나요?” Geva et al., 2021)를 해결하도록 대형 언어 모델을 가르치는 데 효과적이지 않았다고 함.
- 문제 유형에서 최적의 성능을 달성하려면, 그 문제 유형에 맞는 새로운 분해 프롬프트를 설계해야한다.
- 동일한 도메인 내에서도 어려울 수 있음:
- GSM8K 데이터셋의 거의 모든 문제가, 대형 언어 모델에게 그 어려운 문제들의 올바른 분해를 제공하면 정확하게 해결될 수 있다고 함.
- 하지만 복잡한 수학 문제를 효과적으로 분해하는 프롬프트를 생성하는 것은 꽤 어려운 작업이긴 하다.
- 분해가 상대적으로 명확하고 복잡하지 않다면 쉽게 할 수 있지만, 분해가 복잡한 작업에서 분해를 하다보면 잘못 분해를 할 수 있을거고 이게 성능 증가로 이어지지 않을 수 있음.
- 성능을 위해선 각 문제 유형에 맞는 맞춤형 분해 프롬프트를 개발하는 것이 중요.
Conclusion:
- Least-to-Most 프롬프팅을 통해 간단한 예시 제공만으로 언어 모델이 더 어려운 문제로 일반화할 수 있다는 걸 알아냈음.
- Least-to-Most 프롬프팅이 표준 프롬프팅과 체인 오브 쏘트 프롬프팅보다 현저하게 뛰어난 성능을 보여줌.
- Prompting 기법으로의 성능 향상은 훈련 데이터 셋을 더 넣거나, 모델 신경망을 개선하는 방법에 비해서 훨씬 비용 효율적임.
- Least-to-Most 프롬프팅의 한계점과 어려운 점에 대해서도 알았음.
- Prompt 라는 특징은 한계가 있긴 함. 프롬프팅만으로 대형 언어 모델에게 추론 능력을 가르치는 것이 최적의 방법은 아닐 수 있음을 시사하고 있음. 프롬프팅은 언어 모델에게 피드백을 고려하지 않고 지시를 내리는 단방향적 의사소통이니까. 자연스러운 발전 방향은 프롬프팅을 완전한 양방향 대화로 발전시켜서 언어 모델에게 피드백을 제공해주고, 언어 모델은 이를 기억하고 활용하는 방향이 되야한다고 저자는 생각하는듯.
'Generative AI > Prompt Engineering' 카테고리의 다른 글
What Makes Good In-Context Examples for GPT-3? (0) | 2024.09.30 |
---|---|
Self-Consistency improves Chain-of Thought Reasoning in Language Models (0) | 2024.09.29 |
Automatic Chain of Thought Prompting In LLM (0) | 2024.09.28 |
Better Zero-Shot Reasoning with Role-Play Prompting (0) | 2024.09.23 |
Strategic Chain-of-Thought: Guiding Accurate Reasoning in LLMs throughStrategy Elicitation (0) | 2024.09.23 |