본문 바로가기
NLP

[논문 리뷰] Finetuned Language Models Are Zero-Shot Learners

by cuda 2023. 5. 16.

이번 게시물에서는 기존 LLM을 instruction(지시문)으로 fine-tuning 한 instruction-tuned model, FLAN을 제안한 Finetuned Language Models Are Zero-Shot Learners 논문에 대해 다뤄보겠다.

 

원문 링크는 아래와 같다.

 

Finetuned Language Models Are Zero-Shot Learners

This paper explores a simple method for improving the zero-shot learning abilities of language models. We show that instruction tuning -- finetuning language models on a collection of tasks described via instructions -- substantially improves zero-shot per

arxiv.org

 

 

Introduction

GPT-3와 같은 LLM의 등장으로 few-shot(여기서의 few-shot은 in-context learning 기반의 few-shot을 의미) setting에서의 성능이 전반적으로 향상되었지만, 논문이 작성될 당시애는 zero-shot에서의 성능은 few-shot만큼 향상되진 못하였다.

 

본 연구에서는 이러한 한계를 극복하고 LLM의 zero-shot setting 성능을 끌어올리기 위해, NLP task를 instruction, 즉 지시문의 형태로 변환하여 fine-tuning을 진행하는 방법론을 제안한다.

NLP task를 instruction으로 변환한다는 것에 대해 이해가 안될 수 있는데, 아래의 예시를 보자.

Input : What's your name?
Output : wie heißen sie?

위 예시는 영어-독일어 번역 task이다. 기존의 fine-tuning 방법론은 input sequence를 입력하고 output을 산출해 냈지만 instruction으로 변환하면 아래와 같이 변경된다.

Input : translate 'What's your name?' into German
Output : wie heißen sie?

예시를 보면 'What's your name?'을 독일어로 번역하라 라는 지시가 추가된 것을 확인할 수 있다.

논문에서는 위와 같은 방식으로 변환된 60개 이상의 NLP dataset을 사용하여, 137B parameter를 가진 LaMDA-PT model에 fine-tuning을 진행한 FLAN(Finetuned Language Net)을 제안한다. 아래는 FLAN과 기존 방법론들의 차이점을 나타내주는 figure이다.

BERT와 T5같은 model들은 앞서 잠깐 이야기했듯이 task에 대한 input-output data를 그대로 이용하여 fine-tuning을 진행한 뒤에 task를 수행하고, GPT-3의 경우, in-context learning을 이용하여 task를 수행한다.

FLAN의 경우, 앞서 언급된 기존 요소들을 조금씩 섞었다고도 볼 수 있는데, pretrained LM에 fine-tuning을 진행하긴 하되 prompt 형식(instruction)으로 변환하고, 이를 이용하여 fine-tuning 하기 때문이다.

 

저자들은 FLAN model이 대부분의 dataset에서 GPT-3의 zero-shot 성능을 뛰어넘었으며, 몇몇 dataset에서는 GPT-3의 few-shot 성능까지 뛰어넘었다고 주장한다. 동시에, 저자들은 다음과 같은 두 가지의 발견을 소개한다.

  1. Instruction data안의 task-cluster 개수가 많을수록 unseen task에서의 성능이 향상됨
  2. Instruction tuning의 효과는 일정 수준 이상 크기의 model에서만 발생함

이에 대한 자세한 설명은 리뷰를 진행하면서 차근차근 이야기하도록 하겠다.

 

 

FLAN : Instruction Tuning Improves Zero-Shot Learning

앞서 언급했듯이, 본 연구에서 제안하는 FLAN model의 핵심은 기존 LLM을 instruction tuning했다는 것이다. 그렇다면, 이 instruction tuning은 구체적으로 어떻게 하는 것이며, 성능에 어떠한 영향을 미치게 될까? 

하나씩 차근차근 다뤄보도록 하겠다.

 

 

Task & Templates

먼저, 저자들은 기존에 존재하던 dataset(STS-B, NQ, SQuAQ...등)들을 instructional format으로 변경한다.

총 62개의 dataset을 사용하였으며, 이는 아래와 같다.

figure를 보면, dataset들이 task별로 묶여있는 것을 확인할 수 있다. 본 연구에서는 이렇게 task별로 dataset을 묶어 하나의 cluster를 형성한다고 한다. 이렇게 12개의 task cluster를 형성한 다음, 각각의 dataset에 대해서 instructional format으로 변경해 준다.

이때, 하나의 형태로 변경해 주는 것이 아닌, 10개의 template으로 변경해 준다. 이는 아래 figure에서 직관적으로 나타내준다.

Figure는 NLI task를 instructional format으로 변환하는 과정을 보여준다. 원본 data는 premise와 hypothesis가 주어지고, 이에 대해 entailment 하는지 여부를 산출하는 format이었지만, instructional formatting을 통해 지시문이 추가된 data로 변환된다.

 

논문에서는 다양성을 높이기 위해 각 dataset에 대해 "작업을 전환"한 template도 최대 3개(10개의 template 중)까지 포함한다고 한다. (Ex: 감정 분류의 경우 원래 task인 영화 리뷰에 대한 감정 label을 생성하는 것이 아닌, 영화 리뷰 자체를 생성하도록 요청하게끔 하는 template을 포함) 이후 개별 dataset에 대해 무작위로 선택된 template을 통해 format 하고, 이를 이용해서 training을 진행한다.

 

 

Evaluation Splits

저자들은 FLAN이 instruction tuning때 보지 못했던(unseen) task를 잘 수행하는지에 대해 관심이 있었다. 즉, FLAN이 training에서 다루지 않은 task인 unseen task를 잘 수행하는지를 확인해보고자 한 것이다.

 

이를 알아보기 위해, 본 연구에서는 어떠한 task에 대한 성능 측정(evaluation)을 진행할 때, instruction tuning에서 사용하지 않은 task만 evaluation을 진행했다. 예를 들어, Summarization task에 대해 evaluation을 진행한다고 하면, instruction tuning때에는 summarization task를 포함하지 않은 채로 tuning을 진행한 뒤에 evaluation을 진행하고, Closed-book QA에 대한 evaluation을 진행할 때는 마찬가지로 해당 task는 instruction tuning에서 사용하지 않고 evaluation을 진행한다.

 

즉, 만약 $c$개의 task에 대해 evaulation을 진행한다고 하면, 각각의 $c$개 task를 제외하고 instruction tuning을 진행한 $c$개의 model로 evaluation을 진행하는 것이다.

 

 

Classification with Options

FLAN에서는 classification task를 위해 instruction format에 "options"이라는 suffix를 추가해 준다. 아래의 figure를 살펴보자

premise와 hypothesis가 entail 했는지 아닌지를 classification 하는 NLI task에서 yes나 no의 선택지를 주는 것처럼, Options suffix 뒤에 선택지를 제공해 주는 개념이다.

 

 

Training Details

앞서 잠깐 언급했듯이, FLAN은 LaMDA-PT model에 instruction tuning을 진행한 model이다.

LaMDA-PT는 구글에서 발표한 decoder-only model이며, 137B개의 parameter를 가지고 있다.

(그냥 LaMDA model은 LaMDA-PT model에 dialog를 위해 fine-tuning 된 model이다.)

 

이러한 LaMDA-PT에 instruction tuning을 진행할 때, 모든 dataset을 섞은 뒤 각각의 dataset에서 random 하게 sample 하여 tuning을 진행한다. (이때, 모든 dataset의 대상에서 evaluation을 할 task는 제외된다)

이 과정에서, 각 dataset의 크기가 다르다는 문제가 발생한다. 만약 각 dataset의 크기를 고려하지 않고 그대로 tuning을 진행하게 된다면, tuning 과정에서 model은 상대적으로 크기가 큰 dataset을 많이 보게 될 것이고, 자연스럽게 다른 dataset보다 해당 dataset에 치우치게 될 것이다.

 

본 연구에서는 이러한 문제를 해결하기 위해, 우선 각각의 dataset에서 sampling 되는 training example의 개수를 30k로 제한한 이후, T5에서 제안한 examples-proportional mixing scheme을 사용한다. 

 

 examples-proportional mixing 방법론에서는 dataset size에 "limit"을 걸어놓는다.

수행해야 할 여러 task의 개수를 $N$이라고 해보자. 그리고, 각각의 task에 대응되는 dataset을 $e_{n}, n \in \{1, \dots , N\}$이라고 하자. 또한, 여러 task들 중 임의의 task를 뽑았을 때, 해당 task의 index를 $m$이라고 한다.

이때, 임의의 $m$번째 task의 dataset로부터 sampling 할 확률은 $r_{m}$이라고 하며, $r_{m}$은 다음과 같이 정해진다.

예시와 함께 살펴보자. 

다음과 같은 크기의 dataset들이 존재한다고 가정해 보자, 이때 $e_n$의 경우 막대그래프의 높이이며, 이는 오른쪽에 명시되어 있다.

이에 대한 $r_n$은 다음과 같이 구하게 된다. 이렇게 구하게 된 $r_n$는 전체 dataset에서 $r_n$ 확률만큼 해당 dataset에서 data를 추출한다는 의미이다. 즉, 다음과 같이 training dataset이 sampling 되게 된다.

결론적으로는, dataset size limit $K$를 설정하고, 해당 $K$보다 큰 dataset의 경우 $K$개만큼만 sampling 하고, 작은 dataset은 그대로 sampling 하는 방법론인 것이다. (본 연구에서는 dataset size limit $k$는 3k)

 

이는 아래의 T5 논문 리뷰 링크에서도 살펴볼 수 있다.

 

[논문 리뷰] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

이번 게시물에서는 구글에서 연구하고 발표한 T5를 다룬 논문인 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer에 대해 다뤄보겠다. 해당 모델의 경우, BART와 같이 Encoder-Decoder 구조

gbdai.tistory.com

 

이후, 아래와 같은 hyperparameter로 instruction tuning을 진행한다.

  • Adafactor Optimizer (learning rate 3e-5)
  • Input sequence length : 1,024
  • Target sequence length : 256
  • Batch size : batch size of 8,192 tokens (input sequence length가 1,024이기에 8로 추정)
  • Final checkpoint : 30k steps
  • TPUv3 (128 cores), 60 hours training

 

Results

그렇다면, FLAN은 어떠한 결과를 보여줄까? 논문에서는 FLAN과 GPT-3, FLAN과 GLaM의 성능을 비교하였다.

우선, FLAN의 Zero-shot 성능은 25개의 dataset 중 20개에서 GPT-3의 zero-shot 성능을 능가했고, 심지어 10개의 dataset에서는 GPT-3의 few-shot 성능까지 능가하는 성능을 보였다고 한다.

 

또한, 19개의 dataset들 중, 13개의 dataset에서 GLaM model의 zero-shot 성능을 능가했으며, 11개 dataset에서는 one-shot 성능보다 더 좋은 성능을 보였다고 한다.

 

종합적으로, 저자들은 instruction tuning을 통해 매우 효과적으로 성능을 끌어올릴 수 있었다고 말한다. 그러나, NLI, QA와 같이 자연스럽게 instruction으로 변환되는 task에서는 효과적인 성능 향상을 보였던 것과는 반대로, 불완전한 문장이나 문단을 완성하는 task인 commonsense reasoning이나 conference resolution과 같은 task에서는 효과적인 성능 향상이 이루어지지 않았다고 한다.

 

(이는 instruction이 있다고 하더라도, 결국 문장이나 문단을 완성하는 것은 language modeling이기에, instruction을 따르는 objective라기보다는 기존 language modeling objective로 인식하여 발생하는 현상이라고 생각한다. 논문에서는 이러한 현상에 대해 뒷부분에 Additional task 항목을 통해 해당 현상과 원인에 대해 추가적인 설명을 하며, Appendix에 해당 task들에 대한 결과를 공개한다.)

 

저자들은 NLI, Reading comprehension, closed-book QA, translation task에 대한 zero-shot 성능 비교 figure를 제시하는데, 이는 아래와 같다.

해당 figure와 함께 각 task를 살펴보자.

먼저, NLI task부터 살펴보겠다. FLAN은 NLI task를 구성하는 5가지 dataset 전부에서 가장 좋은 성능을 보였다.

추가적으로, 논문에서는 NLI task의 성능을 높이기 위해 "Does <premise> mean that <hypothesis>?"와 같이 자연스러운 의문문으로 NLI task를 변환시켰다고 한다.

 

FLAN은 Reading comprehension task에서도 높은 zero-shot 성능을 보인다. 다만, BoolQ dataset에서는 GLaM model보다 약간 저조한 성능을 보였다

 

Closed-book QA에서도, NQ와 TQA dataset에서는 GLaM에 비해 저조한 성능을 보이지만, 다른 dataset에서는 가장 좋은 성능을 보였다.

 

Translation task에서는 모든 dataset에 대해 가장 좋은 성능을 보였다.

 

Ablation Studies & Further Analysis

저자들은 성능 측정 실험 외에도, FLAN model 내부적인 요소들에 대해서도 비교 실험을 진행하였다. 논문에서 저자들이 진행한 비교 실험은 총 3개이다.

 

 

Number Of Instruction Tuning Clusters

먼저, 저자들은 instruction tuning에 사용되는 cluster(같은 task로 묶인 dataset들의 집합)의 개수가 unseen task에서의 성능에 어떠한 영향을 미치는지를 측정하였다.

 

이를 위해, instruction tuning에 사용되는 cluster의 수를 점진적으로 늘려가며, unseen task의 성능을 측정하였다. 결과는 아래와 같다.

Instruction tuning에 사용되는 cluster의 수가 많아질수록, unseen taskdptjdml 성능이 증가하는 것을 확인할 수 있다.

 

 

Scaling Laws

다음으로, 저자들은 instruction tuning을 진행하는 base model의 크기가 tuning이 주는 성능 향상에 영향을 미치는지를 측정하였다.

이를 위해 422M, 2B, 8B, 68B, 137B의 model에 각각 instrunction tuning을 진행한 뒤, 성능 측정을 진행하였다.

결과는 아래와 같다.

결과를 살펴보면, 8B 크기까지는 instruction tuning model이 오히려 저조한 성능을 보이는 것을 확인할 수 있다.

그러나 8B 이상의 크기를 가지는 순간, tuning을 통해 많은 성능 향상이 이루어지는 것을 확인할 수 있다.

저자들은 이러한 결과를 바탕으로, instruction tuning의 효과를 얻기 위해서는 일정 수준 이상의 크기를 가진 model에 적용되어야 한다고 주장한다.

 

(Instruction tuning도 결국 새로운 정보를 model에 넣어주는 행위이다. Model의 크기가 작으면 이러한 tuning 과정으로 model의 capacity를 전부 소모하게 되고, 새로운 task에 대해서는 잘 대응하지 못한다. 반면 충분한 크기의 model은 tuning 과정을 거쳐도 남는 capacity가 존재하게 되고, 이러한 잔여 capacity로 새로운 task에 대한 generalize를 수행할 수 있게 되는 원리이다.)

 

 

Role of Instruction

저자들이 수행한 마지막 비교 실험은, FLAN의 성능 향상이 과연 fine-tuning으로부터 오는 것인지, instruction으로부터 오는 것인지에 대한 측정이다. 이를 측정하기 위해 instruction 없이 fine-tuning을 수행한 model을 만들고, FLAN과의 성능을 비교하였다.

이때, 다음과 같은 두 가지의 setting으로 각각의 model을 만들었다.

  • No template setting : template 없이 원본 dataset의 input 그대로 model에 넣음
  • dataset name : task와 dataset의 이름을 input에 prepend (T5의 prefix 개념과 비슷함)

(참고로, no-template setting의 경우 input이 별다른 정보 없이 그대로 들어가기 때문에 model이 어떠한 task를 해야 할지 모르기에, evaluation때는 앞에 instruction을 붙여서 진행한다. Training은 그대로, evaluation은 instruction과 함께)

결과는 아래와 같다.

위에서부터 차례대로, no-template setting, dataset name (eval: instruction), dataset name (eval: dataset name), FLAN의 결과이다. FLAN의 성능이 가장 좋은 것을 확인할 수 있다. 이와는 반대로, no-template setting은 매우 저조한 성능을 보이는 것을 확인할 수 있다.

따라서, 위의 비교 실험을 통해 unseen task의 zero-shot 성능은 단순한 fine-tuning이 아닌, instruction과 함께하는 fine-tuning이 중요하다는 것을 입증할 수 있다.

 

 

Instruction with Few-Show Exemplars

 이제까지는 zero-shot setting에 대한 실험들이었다. 저자들은 이에 더해 few-shot setting에서도 instruction tuning이 성능에 긍정적인 영향을 미치는지 확인하고자 추가적인 실험을 진행하였다.

이를 위해, 아래와 같은 형태로 exemplar들을 추가한 few-shot setting을 설계하였다.

instruct($x_1$) $\oplus$ $y_1$ $\oplus$ instruct($x_2$) $\oplus$ $y_2$ $\oplus$ $\dots$ instruct($x$)

간단히 말하자면, instruction $x_k$와 이에 대응하는 $y_k$의 쌍인 exemplar를 $k$개만큼 prepend 한 뒤, 수행하고자 하는 instruction $x$를 두는 것이다. 아래는 그에 대한 예시이다. ($k=3$)

한국어를 영어로 번역해 : 안녕하세요 Hello! 
한국어를 영어로 번역해 : 이름이 뭐에요? What's your name? 
한국어를 영어로 번역해 : 읽을 논문이 있나요? Do you have any papers to read? 
한국어를 영어로 번역해 : FLAN을 제시한 논문을 읽어보시겠어요? 

수행하고자 하는 instruction은 "한국어를 영어로 번역해 : FLAN을 제시한 논문을 읽어보시겠어요?"이며, 앞에 이에 해당하는 exemplar를 prepend 하였다.

 

논문에서는 이와 같은 형태로 few-shot 성능을 측정하였다. 이때, $k=16$, 전체 sequnce length(exemplar와 수행하고자 하는 instruction 포함)는 960 미만으로 두었다고 한다. 결과는 아래와 같다.

전반적으로, few-shot exemplar들의 추가가 성능 향상에 긍정적인 영향을 미친 것을 확인할 수 있다. 특히, target sequence가 길고 복잡한 task인 struct-to-text, translation, closed-book QA와 같은 task에서는 타 task에 비해 높은 성능 향상이 이루어진 것을 확인할 수 있다.

논문에서는 이러한 현상에 대해, exemplar들이 model로 하여금 output format에 대한 이해를 높여주어서 나타난 현상이라고 설명한다.

추가적으로, 모든 task들에서 각각의 template에 대한 결과의 standard deviation이 zero-shot setting에 비해 줄어든 것을 확인할 수 있다.

댓글