Super Kawaii Cute Cat Kaoani

NLP/paper

[paper] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (NeurIPS 2022)

zozni 2023. 3. 30. 23:26
728x90
반응형
SMALL

대형 모델이 많이 연구되고 있고 일부는 상용화가 되고 있다.

우선 간단한 배경먼저 설명. 자연어처리 분야에서 최근 혁신을 일으켰던 것 중 하나가 large scale LM이었음.

초대형 혹은 거대 모델이라고도 불리는데 흔히 GPT3, lamda같이 이런 모델사이즈가 상당히 큰 모델들을 가지고 연구 많이 진행.

이런 것들이 잘된 이유는 결론적으로 진행해왔던 자연어처리의 많은 태스크들은 많은 학습데이터 필요 없이 단순히 모델 사이즈만 키웠을 때

모든 태스크에서 대부분의 성능이 좋게 나온 것을 알 수 있다. 대부분 모델 사이즈를 키워서 연구를 진행하고 있고 앞으로 더 초거대형모델들이 발전할 가능성이 높다. 하지만 이럼에도 불구하고 자연어처리 분야에서 잘 처리를 못했던 분야가 있는데 그 중 하나가 arithmetic이라고 해서 수학산술문제이다.

딥러닝 자연어처리분야에서 자연어로 서술된 수학문제같은 경우나 서술되는 공식들이 있는 경우에는 해당 정보를 인코딩에서 학습시켰을 때 거의 수행을 못할 정도로 매우 어려운분야중 하나다.

또 하나는 commonsense reasoning이라고 하는데 말 그대로 상식을 추론하는 분야이다. 예를 들어서 어떤 아이가 어항을 깨뜨려서 물이 흐르고 있는데 결과적으로 아이가 울고 있다. 과연 아이는 어항을 깨뜨려서 울었을 것이냐라는 단순히 두 사실만 가지고 추론할 수 없는 부분이 있을 수 있다. 이를 테면 아이가 운 이유에 대해서는 엄마한테 혼날까봐 울수도 있고 자기가 키우던 금붕어가 죽어서 슬퍼서 울수도 있고 이런 것들을 commonsense reasoning이라고 하는데 사람 입장에서는 당연히 추론할 수 있지만 딥러닝에게는 엄청 어려운 분야 중 하나다.

세 번째는 symbolic reasoning이라고 하는데

일단 chain-of-thought라는 이론,매커니즘 이라고 볼 수 있는데 GPT3를 시작으로 퓨샷러닝으로 대부분 많은 학습데이터없이 단순히 몇 개의 샘플만 가지고 그 해당 샘플을 prompting engineering을 활용해서 몇 개의 샘플만 학습을 시키면 바로 그 해당 태스크를 수행할 수 있는 기법중 하나이다. prompting이라고 하는거는 모델에게 이런이런 태스크를 수행해라 라고하는 앞에 prefix sentence나 혹은 prephrase 같은 것들이 접두사로 붙게 되어있고 그 다음에 다음 실제 내용들을 같이 덧붙여서 붙이는 기법을 prompting이라고 한다.

[그림 1] 예제를 보면 standard prompting은 기존의 GPT3에서 활용하던 prompting이다. 이를테면 이러한 문장들이 들어가고 결국은 그가 가지고있는 테니스공은 몇 개 있냐라고 질문을 던져보는 것. 정답은 11개다 라고 답변을 하게 되는 방식이 기존에 GPT3에서 활용되었던 방식이다.

 

chain-of-thought는 말 그대로 생각의 연결고리라고 번역할 수가 있는데 우리가 추론하는 과정에서 추론하는 절차가 있는데 일단 질문을 한번 보면,

로저는 5개의 테니스공이 있고, 테니스볼이있는 캔2개를 샀는데 그 해당 캔에는 테니스공이 총 3개씩있다. 그러면 총 그가 가지고 있는 테니스공의 개수는 몇 개일까요라는 질문인데 일단 처음에 5개를 가지고 있었고 캔을 2개를 샀고 근데 한캔당 공이 3개씩 있으니까 총 6개가 된다. 그러면 총 11개가 된다. 이러한 센텐스를 하나 더 추가를 해서 그 해당 대답을 이끌어 내는 방식을 chain-of-thought라고 부른다.

그래서 쉽게 설명하면 기존에는 단순한 Q&A라는 인풋아웃풋 단일 구조 학습을 했다고 하면 중간 한 단계를 거쳐서 근데 그 단계가 단순히 다른 정보가 아닌 해당 질문에 대한 추론과정을 다룬 내용을 한번 더 학습을 시킨다고 보면 된다. 그 중간 단계를 chain-of-thought, 간단하게는 COT라고 부른다.

이런 것들을 이제 구글에서 데이터를 만들어서 학습을 시켰는데 좀 더 학술적으로 보자면

Decompose multi-step problems 이라고 하면 여러 절차들의 문제들을 분해해서 학습을한다고 보는건데 방금처럼 캔을 두 개를 샀고 한캔에는 공이 3개있고 기존에 공 5개 있었고 이런 정보들을 스텝을 멀티스텝으로 보는 것이다. 그래서 여러 문제를 갖고 있는 것들을 분해한 다음에 기존에는 한 문장이었지만 이거를 분해를 해서 하나의 중간 정도 단계 스탭으로 바꿔서 학습을 한다고 보면되고

모델 자체는 인풋에는 문장이 들어가지만 기존에는 문장만 들어가고 그 해당 정보를 찾아서 추론을 하는 방식이었으면 이 방식은

2. 중간에 secondary window(중간단계)를 하나 더 추가를 한다. 그래서 해당 질문이 들어왔을 때 바로 그 해당 질문을 찾으려고 노력하는 것보다 중간 단계 COT의 정보들을 우선적으로 한번 추론하도록 학습을 시킨다. 그래서 중간단계 한번 무조건 거치도록 하고 최종 결과물을 답하기 전에 한번 더 생각을 해봐라라는 식의 맥락으로 보면 된다.

3. 그래서 이 논문의 경우 크게 (math, symbolic, commonsense) 3가지 분야에 대해 연구를 진행했다. 그리고 이거를 모든 자연어를 통해서 적합한 모델을 내놨다라고 보면 된다.

4. 그리고 당연히 퓨샷 러닝을 가지고 몇 개의 센텐스만 가지고 수행할 수 있고.

 

해당 논문의 실제 다뤘던 내용을 간단히 보면 방금처럼 수학문제를 푸는 것이다. (arithmetic reasoning)

여기서도 여러 가지 수학문제를 포함하고 있는 데이터셋을 여러 개 가지고 실험을 진행했다. 당연히 비교대상인 GPT3 이거를 베이스라인으로 가지고 왔고,

그리고 COT prompting을 활용을 했을 때 비교 평가를 진행.

 

[그림 3] 그래서 과연 어떤 수학문제들이 있느냐

아까 봤던 샘플들인데 그러면 math word problem이라고 여기서는 정의를 내리고 있는데 아까 본 테니스공 같은 문제가 이런식으로 푼다. 결국 방정식(equation) 문제를 푸는 거겠죠? 다른 샘플을 보면(CSQA) 새미는 사람이 있는 곳을 가고 싶은데 어디를 가야하느냐 하면 여기에는 객관식 문제가 들어가는 것이다. 그러면 단순히 객관식에 문제를 바로 답하기 전에 중간 단계 정보를 하나 더 추가를 하는 겁니다. 결국은 사람들이 많은 장소로 가고 싶어 한다. 라는 질문에 목표를 먼저찾고 그러면 이게 항목들이 있겠죠 그러면 뭐 answerb겠죠 populated area. 이런식의 학습 방법을 착안했다고 보면 된다. 대부분은 계량으로 표현할 수 있는 숫자들, 셀 수 있는 것들 그런 문제들을 여러 샘플들을 가지고 시도해 봤다. date understanding보면 날짜 계산하는 문제들이 있고 이런식으로 여러 문제들이 있다. 그래서 이 논문도 샘플만 보여주고 바로 결과를 보여준다.

 

결과는 [그림 2] standard prompting, GPT3방식을 사용했을 때 그리고 그 이건 해당 prompt방식이고 해당 lambdaPaLM모델을 기본 backbone으로 해서 비교 했을 때 COT가 얼마나 효과적이었나를 비교해보는 건데 성능차이가 상당히 많이 난다.

[그림 4] 모델 사이즈를 키우면 키울수록 성능도 올라간다. 기존에 supervised 방식으로 했을 때보다 일부 태스크는 이제 지도학습보다도 파란동그라미가 붙어있는게 COT인데 COT를 적용했을 때는 기타 모델들보다 성능이 월등하게 오른다. 그래서 여러 가지 태스크를 비교해봐도 COT방식이 매우 유효하다는 것을 보여줬다. 기존에 딥러닝이 힘들어했던 그 문제들을 상당히 성능이 70~80%가 나오는 걸 봐서는 자연어로 된 수학문제를 줘도 잘 푼다고 볼 수 있다.

 

두 번째는 symbolic reasoning이라고 해서 [Table 22] 샘플을 보면 일론 머스크라는 단어가 있는데 마지막 단어를 빼서 concat에 붙여라 이런건데 이거를 프로그래밍으로 풀면 아주 쉬운문제이지만 근데 이거를 자연어로 줬을 때 이거를 추론할 수 있냐라고 하면 이런 과정을 주는 것이다. 일론이란 단어의 마지막 글자는 n이고 그 다음에 musk의 마지막 글자는 k이다. 그러면 nk를 붙이면 된다. 결국 답은 nk이다. 라는 이런 결과를 추론해내는 것이다.

reverse list라는 문제 샘플들이 있는데 첫 번째는 glasses고 두 번째는 pen이고 세 번째는 alarm이고 세 번째는 license이고 이거를 뒤집으면 이런 순서가 되더라 라고 알려주면 license, alarm, pen, glasses 이런식으로 추론하는 것이다. 매우 쉬운 내용이라고 하더라도 모델이 얼마나 사람처럼 생각할 수 있느냐.이런거죠.

하나 더 찾아보면 coin flip이라고 해서 코인은 앞면이 있고 메이벨리가 코인을 뒤집었다. 그 다음에 샬론다가 그 코인을 뒤집지않았다. 그러면 코인은 앞일까 뒷일까 이런질문이죠 그러면 똑같이 코인은 한번뒤집어졌고 뭐 이런식으로 추론하는 것이다. 결국은 동전이 앞면을 보고있는거냐라고 질문했기 때문에 대답은 no가 되죠. 그래서 이런 정보들을 추가해서 학습을 시켰을 때 대답을 잘하더라~ 이런 것들을 symbolic reasoning이라고 부른다. 결과도 기존 GPT3보다 훨씬 월등하게 모델 사이즈가 커질수록 성능이 좋아지는 것을 볼 수 있다.

 

마지막으로 commonsense reasoning은 예시를 아까봤었지만 다시보면 commonsenseQA는 그 새미문제, strategyQA를 보면 yes or no문제인데 배트남전쟁에서 2번 태어날수있냐라고 하면 이러이러한 정보들을 넣고 대답은 뭐 아니다. 이런식으로 우리가 상식으로 알 수 있는 내용들을 직접 맥락을 찾아서 그리고 나서 대답을 하는 방식으로 학습진행. 성능은 당연히 [그림 7] GPT3보다 훨씬 좋다. 그리고 사람이 풀어봤을 때도 비교했을 때 사람과 비슷한 수준까지 추론하는 것을 볼 수 있다. 도메인에 상관없이 모든 사이즈가 커지면 커질수록 성능은 월등하게 올라가고 있다.

 

[discussion]

그동안 우리가 많이 딥러닝 아키텍처는 성능을 높이는거는 데이터를 늘리는거죠. 이런 문제들과는 상당히 다르게 이번 구글에서 진행한 실험은 COT라는 매커니즘을 이용해서 학습데이터를 직접만들어보고 실험을 했는데 실험의의는 간단한 매커니즘만 활용해서도 멀티스텝으로 구성되어 있는 문제를 잘 학습할 수 있다라는 하나가 있고 기존에 딥러닝이 전혀 수행할 수 없었던 arithmetic reasoning을 매우 좋은 성능으로 이끌어냈다. commonsense reasoning도 어느정도는 우리가 자연어라는게 실제로 서비스되었을 때 우리가 어느정도 활용할 수 있다. 라는 것을 강조하고 있다. 그리고 OOD라는 것은 out of domain인데 도메인에 상관없이 더 긴 문장을 집어넣을 때도 일반화 성능이 매우 뛰어나다. 그리고 단순히 prompting만 가지고도 매우 reasoning할 수 있는 그런 언어모델을 만들수있다는 가능성을 보여줬다는거고 COT라는 매커니즘자체도 라지모델에서는 특히 reasoning분야에서는 적용이 가능하고 이게 실제로 효과가 있었다는 것을 보여줬다.

 

[Limitation]

여전히 뉴럴 네트워크는 사람처럼 reasoning하는거냐? -> 우리도 모른다.

COT 태스크를 수행하기 위해 최소한의 데이터를 만드는 것도 나름 비교적 비용이 많이 든다. 결국 데이터를 직접 사람들이 만들어서

여전히 reasoning한 결과물이 과연 옳은 대답이냐라고 했을 때 -> 보장할 수 없다. 성능은 70~80% 나오더라도 여전히 2~30%의 틀리는 정답들에 대해서는 추론을 했을 때

여전히 큰 모델이기 때문에 실제 상황에서 좋은 성능을 낼 수있는가는 -> 의문.

 
 
 
 
728x90
반응형
LIST