dhkim0225 / 1day_1paper

read 1 paper everyday (only weekday)
53 stars 1 forks source link

[14] The Power of Scale for Parameter-Efficient Prompt Tuning #41

Open dhkim0225 opened 3 years ago

dhkim0225 commented 3 years ago

paper code code2

T5에 prompt tuning 했더니 GPT3 의 few-shot prompt design 보다 좋더라 image 파란색은 GPT-3 빨강, 주황, 초록은 T5 초록은 추가로, 모든 task에 대해 single frozen model을 reuse 하도록 했는데, 이래 됨.

Prompt Tuning 은 inference 시나리오에서도 효과적임. prompt만 저장해 두면 되기 때문. image

해당 논문 contribution.

  1. prompt tuning 을 제안하고 LLM (Large Language Models) 에 대한 효과 분석
  2. 많은 design choice 에 대한 ablation study
  3. prompt tuning 이 domain shift problems 도 해결함.
  4. prompt ensembling 을 제안함

Prompt Tuning

T5의 원칙대로 text-to-text 즉, text-generation으로 모든 task 수행 classification 도 generation task 로!

보통 prompting은 model parameter는 froze 시켜놓고, input 의 앞부분에 token 들을 붙여서 수행한다. GPT-3 에서는, prompt token들의 representation P = {p1, p2, . . . , pn} 가 frozen 모델의 embedding table이었다. 그러다 보니, optimal prompt 를 찾아나가려면 prompt token들을 manual하게 사용해보거나 non-differentiable 하게 search 하는 방법이 필요했다.

Prompt-Tuning 에서는 pompt P 가 model parameter 로 국한되는 제한을 풀어버린다. Prompt Design 은 고정된 embedding, 고정된 vocab에서 prompt token을 선택해야한다. Prompt Tuning은 fixed special token prompt을 사용하는 것인데, 요 special token 들의 embedding은 learnable 한 것이다.

n개의 token이 주어졌을 때 {x1, x2, . . . , xn} T5는 token embedding 부터 수행한다. embedding 이 만들어지고, prompt tuning 을 위해서 soft-prompt embedding 이 만들어진다. 그러고 나선 간단하게 concat 시켜준다. 업데이트 되는 건 오직 P_e 뿐. token embedding은 업데이트 되지 않는다. image

Design Decisions

prompt token을 initialize 어떻게 할 지, 고민을 하게 되는데, 3가지 방법이 있다.

  1. random initialize
  2. word embedding 중에 랜덤하게 가져와서 initialize
  3. verbalizer 처럼 classification output 을 갖고 initialize 하기

prompt 길이 또한 중요한 옵션이다. embedding 개수가 늘어나는 거라, computation을 고려해야 한다. 관련 실험결과는 result에서 다루자.

Unlearning Span Corruption

GPT-3 와 다르게, T5 는

  1. encoder-decoder 구조를 사용
  2. span-corruption objective 로 학습됨 (masked span reconstruction)

예를 들어, Thank you for inviting me to your party last week 문장이 있다면 T5에서 input, output은 다음과 같음 input: Thank you <X> me to your party <Y> week output: <X> for inviting <Y> last <Z>

이렇게 학습시키는게 효율적이긴 하지만, 멀쩡한 input을 본 적 없기 때문에 frozen single model을 만들기에는 적합하지 않음. finetuning 으로는 충분히 좋은 성능을 내고 있지만, 우린 zero-shot을 해봐야 하지 않겠냐. 그래서 3가지를 실험해 보았다.

  1. Span Corruption : pretrained T5 활용
  2. Span Corruption + Sentinel : pretrained T5 + downstream 도 전부 sentinel로 만들어버리기.
  3. LM Adaptation : T5 를 갖고 LM objective 로 pretraining 을 쬐끔만 더 했음.

LM-objective ==> 아래 그림 처럼 다음 output 예측하는 오래된 방식. image

Results

Ablations

image a) prompt token length 는 20이면 충분해 보인다. b) Initialize 는 random 하게만 안 하면 된다. c) LM 을 조금 섞어주는게 좋다 d) LM은 50k 정도만 더 해주면 되더라.

Zero-Shot performance

image

Domain Shift Problem

image Prompt Tuning 과 함께라면, QQP로 학습하고 MRPC 로 eval 하든, 거꾸로 하든 잘 된다!

Prompt Ensemble

image single frozen T5-XXL model 에서 만들어낸 five-prompt tuning 성능. 5개 prompt 각각의 mean, best 성능을 뛰어넘는다.

kwonmha commented 1 year ago

코드에 대한 링크는 https://github.com/google-research/prompt-tuning 여기가 더 좋아 보입니다.

dhkim0225 commented 1 year ago

@kwonmha 감사합니다~