Abstract
- Fine-tuining
- Fine-tuining은 large pre-trained language models(LM)로 downstream tasks를 수행하기 위해 널리 사용되는 방법
- 하지만 LM의 parameters를 모두 update해야해서 각 task마다 LM의 full copy를 필요로 함
- Prefix-tuning
- fine-tuning 보다 더 가벼운 대안으로 LM의 parameters는 freezing 시킨 채, prefix라고 불리는 작은 continuous task-specific vector를 최적화하는 방법
- prompting에서 영감을 받았으며, prefix는 virtual tokens 처럼 동작하며 prefix 뒤에 나오는 tokens에 영향을 줌
- Experiment
- tasks: table-to-text task (GPT2), summerisation task (BART)
- results:
- full dataset setting에서는 fine-tuning 결과와 comparable
- low dataset setting, extrapolation에서는 fine-tuning 결과를 outperform
1.Introduction
- Fine-tuning
- LMs을 downstream tasks에서 활용하기 위한 일반적인 방법
- 하지만 각 task마다 별도의 LMs 두어야해서 매우 비쌈
- e.g. GPT2(774M), GPT3(175B)
- Adapter-tuning
- pre-trained LMs 내 layers 사이에 task-specific layers를 추가하는 방법
- 약 2-4%의 추가 parameters를 필요로 함
- Prompting (= in-context learning)
- GPT3에 사용된 방법으로 task-specific tunning을 사용하는 대신, 자연어로된 instruction과 몇 가지 examples를 input text에 덧붙이는 방법
- 약 2-4%의 추가 parameters를 필요로 함
- Prefix-tuning
- natural language generation (NLG) tasks를 위한 fine-tuning을 대체할 수 있는 비교적 가벼운 방법
- 하나의 data table의 description을 생성해내는 task를 고려할 때 (table-to-text task), input은 linearised table이 되고 output은 textual description이 됨 (e.g. input = {name: starbucks, type: coffee shop}, output = starbucks serves coffee)
- 정확히는 prefix라고 불리는 continuous task specific vectors를 input에 덧붙이는 방법
- Transformer는 prefix 이후에 오는 tokens를 위해 prefix를 virtual tokens처럼 첨조 (하지만 prompting과는 다르게 prefix는 실제 tokens로 이루어지지 않음)
- task마다 LM의 모든 parameters를 tuning 시켜 각 copy를 따로 저장해야하는 fine-tuning 과는 다르게, prefix-tuning은 prefix만 optimisation 시키면 돼서 훨씬 효율적임
- prefix-tuning은 task마다 prefix를 별도로 저장할 수 있어서 모듈화 관점에서도 더 나은 모델
- personalisation 문제에 측면에서 각 user를 task라고 생각했을 때, data cross-contamination을 막을 수 있는 등 여러 이점이 존재
- table-to-text generation task과 summerisation task를 downstream tasks로 실험 했고, 각각 GPT2와 BART가 pre-trained LM으로 사용됨
- full dataset setting에서는 fine-tuning고 필적할만한 결과를 보여줬고, low dataset setting과 extrapolation에서는 fine-tuning 보다 더 나은 성능을 보여줌
2. Replated Work
Fine-tuning for natural language generation
- NLG tasks와 관련된 기존 연구들 소개
- 이 논문에서는 prefix-tuning에 table-to-text generation과 summerisation만 실험하지만 machine translation과 dialogue generation 같은 다양한 tasks에도 적용 가능함
Lightwiehgt fine-tuning
- pre-trained model의 parameters 대부분을 freezing 시키고, 작은 trainable moudles를 추가하여 model을 update 하는 방법
- key challenge: 높은 성능을 낼 수 있는 modules의 architecture 및 pre-trained model 내 parameters를 알아내는 것
- removing parameters: pre-trained model 내 몇몇 weights를 masking 시켜 무력화시킴
- adding parameters: task-specific layers(adapters)를 pre-trained LM의 layers 사이에 추가 (약 3.0% 추가 parameters 필요하고 이는 prefix-tuning 대비 약 30배에 해당하는 수치)
Prompting
- 자연어로된 instruction과 예제 몇개를 text input에 덧붙여서 output을 생성시키는 방법
- GPT3는 prompt를 manually 설계하여 각기 다른 tasks 결과를 생성시키는데 사용하고, in-context learning이라고도 불림
- 하지만 in-context learning은 LMs이 처리할 수 있는 sequence의 길이에 제약을 받음
- prompt engineering:
- topic이나 sentiment를 control 할 수 있는 keywords를 이용해 prompting하는 방법
- e.g. AutoPrompt: sentiment 내 factual knowledge를 유도할 수 있는 discrete한 형태의 sequence를 찾는 방법
- prefix-tuning은 discrete보다 더 expressive한 continous vectors를 사용
- continuous vectors 예시
- input text를 continuous vector represention으로 최적화하여 pre-trained LM이 임의의 문장을 reconstruct 할 수 있는 방식이 존재 (input-specific)
- prefix-tuning은 task-specific한 방법으로 하나의 task 내 instances에 적용가능
Contorallable generation
- pre-trained model을 sentence-level atrribute에 충족하도록 유도하는 방법
- e.g. training time: pre-trained LM을 keyword나 URL 같은 metadata도 고려할 수 있도록 학습
- e.g. decoding time: weighed decoding이나 과거의 activations를 지속적으로 udpate 시킬 수 있음
- 하지만 NLG 같은 tasks 적용할 수 있는 이렇다 할만한 정교한 방법이 없음
3. Problem Statement
- input: a context $x$
- output: a sequence of tokens $y$
- table-to-text: $x$ = a linearised data table, $y$ = a textual description
- summerisation: $x$ = an article, $y$ = a short summary3.1. Autoregressive LM
3.1. Autoregressive LM (GPT)
- $P_{\phi}(y|x)$: Transformer-based autoregressive model parameterised by $\phi$
- $z=[x;y]$: concatenation of $x$ and $y$
- $\mathtt{X_{idx}}$: a sequence of $x$ indicies
- $\mathtt{Y_{idx}}$: a sequence of $y$ indicies
- $h_i = [h_i^{(1)}; ... ; h_i^{(n)}]$: concatenation of all activation layers at time step $i$
$$ h_i = LM_{\phi}(z_i, h_{<i})$$ - autoregressive Transformer model은 $z_i$의 $h_i$와 left context에 해당하는 지난 activations을 계산
- $h_i$의 마지막 layer는 다음 token을 예측하기 위해 사용
- $P_{\phi}(z_{i+1}|h_{\leq i}) = softmax(W_{\phi}h_i^{(n)})$: pre-trained matrix인 $W_{\phi}$는 $h_i^{(n)}$과 mapping되어서 vocabulary의 logits을 구하게 됨
3.2. Encoder-Decoder Architecture (BART)
- $x$: bidirectional encoder에 의해 인코딩 됨
- $y$: decoder에 autoregressively predict 됨
- 이외 notations는 상동
3.3. Method: Fine-tuning
- $\phi$: pretrained parameters
- $p_{\phi}$: trainable LM distribution으로 다음 log-likelihood를 objective function으로 설정하여 학습
$$\max_{\phi} \log p_{\phi}(y|x) = \sum_{i\in\mathtt{Y_{idx}}} \log p_{\phi}(z_i|h_{<i})$$
4. Prefix-Tuning
- conditonal generation tasks를 위해 fine-tuning을 대체할 수 있는 방법
4.1. Intuition
- prompting은 모델 내부에 존재하는 parameters를 직접적으로 update 하지 않아도 모델을 원하는 방향으로 유도할 수 있다는 것을 보여줌
- e.g. 특정한 toaken($Obama$)를 생성시키고 싶을 때, 같이 등장하는 collocation($Barack$)을 context로 input에 덧붙일 수 있음
- prefix-tuning은 단순히 하나의 단어나 문장을 넘어서, NLG tasks를 잘 풀 수 있는 context를 찾는것
- context 역할: $x$를 인코딩할 때는 무엇을 extract 할지 가이드를 해주고, $y$를 생성할 때는 next token distribution에 영향을 줌 (하지만 이러한 context가 실제로 존재하는지는 미지수)
- prompting처럼 자연어로 instruction을 주는 것은 사람에게는 효과적이지만 대부분은 pre-trained model에서는 큰 효과를 보기 힘듦
- data 기반으로 context를 구하는건 도움이 될 수 있지만, discrete한 경우에는 계산상에 어려움을 겪을 수 있음
4.2. Method
- prefix-tuning은 $z=[prefix;x;y]$ 혹은 $z=[prefix;x;prefix';y]$ 를 pre-trained LM에 input으로 사용할 수 있도록 prefix를 붙임
- $\mathtt{P_{idx}}$: a sequence of $prefix$ indicies
- $|\mathtt{P_{idx}}|$: the length of $prefix$
- prefix parameters를 저장하기 위해 $\theta$로 표현되는 $P_{\theta} \in \mathbb{R}^{|\mathtt{P_{idx}}| \times dim(h_i)}$를 initialisation
- cost function은 3.3. 에서 언급한 log-likelihood 사용하지만, pre-trained LM의 parameters인 $\phi$은 fixed된 상태에서 $\theta$만 학습시킴
- $h_i$
- $i \in \mathtt{P_{idx}}$ 일 때 $P_{\theta}[i,:]$: $P_{\theta}$의 값을 그대로 복사해옴
- $i \notin \mathtt{P_{idx}}$ 일 때 $LM_{\phi}(z_i, h_{<i})$: prefix activations이 항상 left context로 존재해서 오른쪽에 존재하는 activations에 영향을 끼치기 때문에, 이 경우에도 $h_i$는 여전에 $P_{\theta}$에 depent함
4.3. Parameterasation of $P_{\theta}$
- 실험적으로 $P_{\theta}$를 직접적으로 학습시키는 것은 학습을 불안정하게하고 성능을 하락 시킴
$$P_{\theta}[i,:] = MLP_{\theta}(P'_{\theta}[i,:])$$ - 사이즈가 더 작은 matrix $P'{\theta}$와 large feed-forward network을 이용해서 $P{\theta}$를 reparameterisation 함
- $P_{\theta}$와 $P'_{\theta}$의 row 수는 동일하고 column의 dimension만 다름
- traning이 완료되면, $P'{\theta}$는 제거하고 $P{\theta}$만 저장해서 사용가능
5. Experimental Setup
5.1. Datasets and Metrics
- table-to-text task
- datasets: E2E, WebLNG, DART
- metrics: BLUE, METEOR, TER, ROUGE, BertScore, BLEURT etc
- summarisation task
- datasets: XSUM
- metrics: ROUGE family
5.2. Methods
- table-to-text task: fine-tuning, fine-tuning only the top 2 layers, and adapter-tuning
- summarisation task: fine-tuning BART
5.3. Architectures and Hyperparameters
6. Main Results
6.1. Table-to-text Generation
- prefix-tuning을 위해 단 0.1%의 task-specific parameters를 추가해서 fine-tuning에 상응하고 lightweight baselines 보다는 높은 성능 기록
- parameter 수를 조정하여 실험한 결과, prefix-tuning이 더 Pareto efficient 함을 알 수 있음
- training 시 보지 못한 categories와 domains에 대한 일반화 능력도 더 뛰어남 (extrapolation performance)
- more time- and space-efficient, more epressive
- scales from GPT to GPT_large
6.2. Summerisation
- fine-tuning 보다는 낮은 결과 기록
- 논문 저자는 XSUM(summerisation task에 사용된 dataset)이 table-to-text task에 사용된 datasets가 다르기 때문이라 설명
- XSUM은 4배 이상 많은 examples을 가지고 있고 text 길이 또만 약 17 배 이상 더 길면서, summerisation task 자체가 더욱 복잡한 task이기 때문
6.3. Low-data Setting
- 매우 적은 수의 parameters 추가만으로 fine-tuning 기록을 모두 상회 (추가되는 parameters 수를 늘리면 격차도 더 벌어짐)
- qulititive evaluation에서도 더욱 신뢰할만한 결과를 보여줌
6.3. Extrapolation
- 두 tasks에서 모두 extrapolation에 대해 더 나은 성능을 보여줌
- adatper-tuning도 좋은 performance를 보여주는 것으로 보아, LM parameter를 유지시키는 것이 extrapolation에 긍정적인 영향을 끼치는 것을 보여줌
7. Intrinsic Evaluation
7.1. Prefix Length
- prefix의 길이가 길수록 어느 정도 threshold까지는 성능이 계속 증가하다가 threshold 이후 약간의 성능 하락이 존재
- inference speed 측면에서는 GPU 떄문에 큰 영향을 받지 않음
7.2. Full vs Embedding-only
- 이 부분은 자세히 이해가 안돼서 생략
7.3. Prefixing vs Infixing
- prefixing $[prefix;x;y]$이 inifixing $[x;infix;y]$ 보다 더 뛰어남
- prefixing은 $x$, $y$에 모두 영향을 끼치는데 반해 infixing은 $y$에만 영향을 끼치기 때문인라 설명
7.4. Initialisation
- low-data setting에서 initialisation은 더욱 중요하게 작용
- ramdom initialisation의 경우 낮은 성능, 높은 분산을 기록
- real words를 이용해서 initialisation 할 경우, generalisation 측면에서 더 높은 성능을 보여줌
8. Discussion
8.1. Personalisation
- prefix-tuning은 task마다 독립적으로 학습을 수행 할 수 있다는 이점이 있음
- 이는 수 많은 사용자들에게 개인화된 정보를 제공해야하는 presonalisation 분야에 큰 장점으로 작용 (user privacy, modularity, efficiency)
8.2. Batching Acress users
- 다수의 user도 하나의 batch의 배치로 구성할 수 있음
- sequence 앞에 위치한 prefix 부분만 따로 처리하면 Transformer layers는 동일하기 때문에 효율적인 training이 가능해짐
- 그에 반해 adapter-tuning은 task-specific paramters가 Transformer layers 사이에 위치하므로 불가능
8.3. Inductive Bias of Prefix-tuning
- 아직 open question이지만, prefix-tuning과 adapter-tuning은 pre-trained model의 parameters를 update하지 않으므로 generalisation 더 유리
9. Conclustion
- fine-tuning을 좀 더 가볍게 대체할 수 있는 continuous prefix를 덧붙이는 방법인 prefix-tuning 제안
- 추가되는 parameters 수가 1000 배 이상 더 적음에도 불구하고, fine-tuning 모델에 full data setting에서는 상응할만한 결과를 low data setting과 explolation setting 에서는 상회하는 결과를 보여줌