Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning (NIPS, 2208)

2023. 9. 30. 14:31 · LLM 관련 논문 정리
목차
  1. ICL 의 단점
  2. Method
  3. 1. Backbone model
  4. 2. 사용 Dataset
  5. 3. Loss function
  6. 4. Parameter-efficient fine-tuning with (IA)3
  7. 6. 이외 학습 조건
  8. Result
  9. Performance on T0 tasks : 표1
  10. Comparing computational costs
  11. Real-world Few-shot Tasks (RAFT) : 표2

https://proceedings.neurips.cc/paper_files/paper/2022/file/0cde695b83bd186c1fd456302888454c-Paper-Conference.pdf

 

Few-shot in-context learning (ICL) 은 pre-trained language models (PLM) 이 gradient-based training 없이 unseen task 를 몇 개의 예제만 주고 task 를 풀도록 하는 방법이다.

Parameter-efficient fine-tuning (PEFT) 는 작은 파라미터 셋을 학습시켜서 모델이 새로운 태스크에 adapt 하도록 하는 대안법이다.

이 논문에서는 (IA)^3 라고 불리는 새로운 PEFT 방법을 소개하고 T-Few 라고 하는 "T0 모델을 기반으로 작업별 튜닝이나 파라미터 업데이트 적게 새로운 task 를 할 수 있는 방법” 을 제안한다.

 

 

ICL 의 단점

  1. 워딩과 예시의 순서와 같은 프롬프트의 포맷이 달라지는 것이 모델 성능에 많은 영향을 미칠 수 있다.
  2. ICL 는 일반적으로 파인튜닝보다 성능이 떨어진다.
  3. 워딩과 예시의 순서와 같은 프롬프트의 포맷이 달라지는 것이 모델 성능에 많은 영향을 미칠 수 있다.

→ 이에 대한 PEFT 의 보완사항

  1. 최소한의 파라미터 업데이트를 이용하여 PLM 모델을 튜닝한다.
  2. 새로운 태스크에 대해 few-shot 으로 ICL 보다 성능이 좋아야 한다.
  3. in-batch Multi task 가 가능해야 한다.

 

Method

1. Backbone model

 

T0 사용 (T0 는 원래 zero-shot 일반화를 위해 설계된 모델이지만 이 논문에서는 아주 적은 labeled 데이터로 파인튜닝한 후에도 좋은 성능을 얻을 수 있음을 보여주려 한다)

T0 는 T5 모델을 베이스로 하는 encoder-decoder Transformer model 로, 큰 unlabeled text data에서 masked language modeling objective 로 학습된다.

T5 모델을 multitask 데이터셋으로 파인튜닝 한 것이다.

각각 T0-3B 와 그냥 T0 (11B) 가 있는데, 이 논문에서는 3B 를 사용.

 

 

2. 사용 Dataset

SuperGLUE 데이터셋 인 sentence completion (COPA [37], H-SWAG [38], Story Cloze [39] datasets), natural language inference (ANLI [40], CB [41], and RTE [42]), coreference resolution (WSC [43] and Winogrande [44]), 과 word sense disambiguation (WiC [45]) 를 사용해서 일반화 성능을 평가한다.

각 데이터셋을 퓨 샷 training 예제를 사용한다 : 20~70 개

데이터셋은 Public Pool of Prompts (P3) 의 프롬프트 탬플릿을 적용하여 학습에 사용하였다.

P3 는 각 데이터셋을 text-to-text format 으로 만들 수 있다.

 

💡 예를 들면, NLI task 에서 Premise, Hypothesis, Label 로 data example 이 이루어져 있을 때 :

**Input template : If {Premise} is true, is it also true that {Hypothesis}? target template : Choices[label]. # yes, maybe, no

https://huggingface.co/datasets/bigscience/P3

 

이후 (real-world few-shot learning benchmark) RAFT 벤치 마크 사용하여 Test 한다.

 


ICL 처럼 mixed-task batches 를 할 수 있어야 한다는 조건이 필요하다.

mixed batch 란 한 배치안에 각 샘플이 입력에 다른 context 와 프롬프트 를 concat하여 배치안의 예제마다 다른 task 를 수행하는 것을 말한다.

eval 에서는 “rank classification” 을 사용한다.

rank classification 은 모델의 모든 가능한 라벨에 대한 log-probabilities 를 ranking 해서 가장 높은 랭킹의 선택이 맞은 답일 때 모델의 예측이 맞았다고 간주한다.

→ 이는 multiple choice tasks 에서도 사용할 수 있다.

 

3. Loss function

일반적인 LM loss 함수

y=(y1,y2,...,yT)y = (y1, y2, . . . , yT )y=(y1,y2,...,yT) : 이게 target 문장 일 때 cross-entropy loss

LLM=−1T∑t log p(yt∣x,y<t) L_{LM} = −\frac{1}{T}\sum_{t} \ log \ p(y_t|x, y_{<t}) LLM​=−T1​t∑​ log p(yt​∣x,y<t​)

Unlikelihood loss

“rank classification” 을 사용하여 unlikelihood loss 를 구현한다.

⇒ 즉, rank classification 을 사용해서 모델이 결정한 맞은 선택 과 틀린 선택의 확률을 둘 다 고려한다.

training 중에 이를 고려하기 위해 unlikelihood loss 를 추가한다.

→ 밑은 평균을 취하지 않은 일반 sequence unlikelihood loss

Unlikelihood loss 기존 논

y^(n)=(y1^,y2^,...,y^T(n))\hat{y}{(n)} =(\hat{y_1}, \hat{y_2}, . . . , \hat{y}_{T^{(n)}} )y^​(n)=(y1​^​,y2​^​,...,y^​T(n)​) : N 개(틀린 시퀀스 개수) 중 n 번째 틀린 target sequence,

y^\hat{y}y^​ 는 예측한 토큰.

unlikelihood loss 는 틀린 토큰에 대해 계산하여 틀린 타겟 문장으로부터 다음 토큰을 예측하는 것을 막는 역할을 한다.

Length normalization loss

각 선택한 토큰에 확률에 따라 결과의 랭킹을 매기게 되면 더 짧은 선택을 선호할 수 있다. 왜냐하면 모델이 각 토큰에 배정한 확률은 1보다 작거나 같기 때문이다.

 

https://www.youtube.com/watch?v=gPekNValUEE&t=11s

 

그래서 주어진 output 시퀀스의 length-normalized log probability 를 계산한다. : β(x,y)=1T∑Tt=1 log p(yt∣x,y<t)β(x, y) = \frac{1}{T}\sum^{T}{t=1} \ log \ p(y_t|x, y{<t})β(x,y)=T1​∑Tt=1 log p(yt​∣x,y<t)

 

 

그 후, 2번 식 softmax cross-entropy loss 을 최소화 함으로서 맞은 answer 선택의 length-normalized log probability를 최대화한다. (→ 이럴거면 일반 cross entropy loss 를 굳이 추가한 이유는 모르겠음)

 

L_LM, L_UL, L_LN 으로 모델을 학습할 때 → 각 로스를 temperature(hyper-parameter) 없이 그냥 더했다.

그래서 모든 downstream 데이터셋에 대해 똑같은 방식으로 데이터셋에 따른 하이퍼파라미터 수정이 없이 사용할 수 있다.

 

4. Parameter-efficient fine-tuning with (IA)3

이 방법을 (IA)^3 라고 부른다. →“Infused Adapter by Inhibiting and Amplifying Inner Activations”

 

모델의 activation 에 element-wise multiplication 사용.

l 은 학습가능한 task specific vector 이고 ⊙는 element-wise multiplication 이다.

3가지 lk∈Rdk, lv∈Rdv, lff∈Rdffl_k ∈ R^{d_k} , \ l_v ∈ R^{d_v} , \ l_{ff} ∈ R^{d_{ff}}lk​∈Rdk​, lv​∈Rdv​, lff​∈Rdff​ 학습된 벡터를 어텐션의 키 와 밸류 와 FFN 에 도입한다.

 

위는 어텐션에 적용한 식이고 밑은 position wise FFN 에 적용한 식이다.

(lff⊙γ(W1x))W2 (l_{ff} ⊙ γ(W_1x))W_2 (lff​⊙γ(W1​x))W2​

γγγ 는 FFN의 nonlinearity (activation 함수) 이다.

트랜스포머의 각 레이어 마다 적용하기 때문에 인코더에 L(d_k + d_v + d_{ff}) 개 파라미터, 디코더에 L(2d_k + 2d_v + d_{ff}) 개의 새로운 파라미터를 추가한다. → 디코더에는 셀프 어텐션과 그냥 어텐션이 2개 있기 때문.

 

6. 이외 학습 조건

1,000 steps , 8 batch size 에서 Adafactor optimizer 사용. learning rate = 3e−3 , linear decay schedule - 60-step warmup 사용.

Result

(IA)^3 을 평가하기 위해 T0 3B 모델에서 다양한 기존의 adaptation 방법과 비교한다.

특히 9가지의 PEFT 방법과 비교한다.

 

BitFit : bias 파라미터만 업데이트

Adapter : 셀프 어텐션이랑 position wise FFN 이후에 task specific layer 붙이는 것.

Compacter & Compacter++ : low rank 행렬과 hyper-complex(?) 곱을 이용해 어댑터를 발전시킴

Prompt tuning : task specific 프롬프트 임베딩을 모델 인풋에 콘캣해 학습시킴.

Prefix tuning : task specific 벡터를 모델 activation 에 콘캣하여 학습한다.

FISH Mask : 근사한 Fisher 정보를 바탕으로 파라미터 subset 을 업데이트

Intrinsic SAID :  low-dimensional subspace 안에서 최적화를 진행.

LoRA : low rank 를 파라미터 행렬에 적용시킴.

 

그림 2 은 실험결과. Appendix D 에 각 데이터셋별 디테일 실험 결과가 있다.

(IA)3 가  모델 전체 파인튜닝 보다 더 높은 정확도를 얻는 유일한 방법임을 확인하였다.

 

** 성능이 좋은 PEFT 방법은 mixed-task batches 가 불가능하다!

        성능 좋은 방법 중 LoRA 는 task 별로 기존 행렬에 더해주는 파라미터가 다르기 때문에 mixed-task 라고 할 수 없다.

        -> 이런 느낌으로 불가능하다는 뜻인듯 하다. 본 논문에서 mixed task 를 해봤을때 진짜 성능이 떨어지는 지의 여부는 확인하지 않았다.

 

Performance on T0 tasks : 표1

T-Few 가 다른 방법들보다 상당한 차이로 성능이 좋음을 확인.

특히 GPT-3 175B 의 few-shot ICL 보다 높은 정확도 얻음.

아래는 Appendix 표로, table 1 은 밑 표의 각 데티어테 대한 Accuracy 의 mean 값이다.

 

Comparing computational costs

💡 FLOPS = Floating point operations per second (speed 단위)

FLOPs = Floating point operations (개수 단위)

 

** decoder-only Transformer (즉 GPT series) 는 N parameters 일때 inference 에서 2N FLOPs per token 이고 학습에서 6N FLOPs per token 으로 추정된다.

 

** T0 , T5 과 같은 Encoder-decoder models 은 (where the encoder and decoder have the same number of layers and layer sizes) 각 토큰을 encoder 나 decoder 로만 처리하기 때문에 (거의 full 모델의 절반 정도 파라미터), FLOPs per token은 inference and training에서 각각 N 과 3N FLOPs per token 으로 추정된다.

 

cost 를 계산해보자.

inference 에서 모든 데이터셋에 대해 약 41개의 shot (중간값)을 사용한다고 가정.

input 과 targets 을 합친 것의 tokenized sequence length의 중간값은 103 이다.

few-shot ICL 에서 처리되는 in-context 예시들의 시퀀스 길이의 중간값은 98 이다.

 

key 와 value 벡터가 cached 되었다고 가정할 때, 1개 example 을 ICL 로 처리하려면 41 × 98 + 103 tokens 을 처리해야 한다.

 

Inference cost.

11e9×103 = 1.1e12 FLOPs : TFew 에서 1개 인풋에 대한 모든 타겟 choice 을 처리하는 데 필요한 양.

2×175e9×(41 × 98 + 103) = 1.4e15 FLOPs : GPT-3 175B 에서 few-shot ICL 할 때.

→ 3배가 더 걸린다. , 더 작은 GPT-3 에서도 더 많이 필요함.

Training cost.

T Few 만 training cost 가 든다.

3 × 11e9 × 1, 000 × 8 × 103 = 2.7e16 FLOPs. : ****11B 파라미터를 1000 step 으로 batch size 8 length 103 으로 학습

이는 GPT3 175B 으로 fewshot ICL 을 단일 예제로 처리하는데 필요한 FLOPs 보다 약 20배 크다.

즉 T Few 훈련은 ICL 로 20개의예제를 처리하는 것과 같은 비용이 든다.

Storage cost.

또한 제일 많은 storage cost 가 필요하다.

single-precision floats 으로 저장하면 IA3 에 의해 더해지는 파라미터수는 4.2MB 이다.

반면에 ICL 은 토큰화된 in context 예제만 저장하면 되므로 (보통 32bits integer로) : 41 × 98 × 32 bits = 16 kB 만큼 필요하다.

하지만 이는 모델 체크포인트 자체에 비하면 작다.T0 의 체크포인트 파일 크기는 41.5GB 이다.

Memory usage.

Inference 동안 주된 메모리 cost는 모델 파라미터 이다.

T0 보다 작은 모델은  GPT-3 6.7B 이다.반면에 T Few 는 inference 동안 더 적은 메모리양을 필요로 한다.

추가적인 메모리 코스트는 학습할 때 Adafactor 를 사용하고 백프롭을 하기위해 중간 activations 를 캐싱해서 생긴다.

→ TFew 로는 80GB A100 GPU 1개로 충분하다.

 

Real-world Few-shot Tasks (RAFT) : 표2

RAFT benchmark 은 11개의 “경제적으로 가치있는” 태스크에 대해 실제 응용이 가능한 데이터셋이다.

각 RAFT datasets 은 50개 학습 데이터 를 가지고 validation set 은 없고 더 큰 test set 은 public label 이 없다.

T-Few 는 75.8% 로 sota 를 찍었고, 참고로 휴먼은 73.5% 이다.

'LLM 관련 논문 정리' 카테고리의 다른 글

NEFTune: Noisy Embeddings Improve Instruction Fine-tuning  (0) 2023.11.15
CLM, MLM, TLM 그리고 Seq2Seq  (0) 2023.10.30
PEFT (parameter-efficient fine tuning) 정리  (0) 2023.09.18
InstructGPT 상세 리뷰  (0) 2023.08.30
Rotary Position Embedding (RoPE)  (0) 2023.08.21
  1. ICL 의 단점
  2. Method
  3. 1. Backbone model
  4. 2. 사용 Dataset
  5. 3. Loss function
  6. 4. Parameter-efficient fine-tuning with (IA)3
  7. 6. 이외 학습 조건
  8. Result
  9. Performance on T0 tasks : 표1
  10. Comparing computational costs
  11. Real-world Few-shot Tasks (RAFT) : 표2
'LLM 관련 논문 정리' 카테고리의 다른 글
  • NEFTune: Noisy Embeddings Improve Instruction Fine-tuning
  • CLM, MLM, TLM 그리고 Seq2Seq
  • PEFT (parameter-efficient fine tuning) 정리
  • InstructGPT 상세 리뷰
섬섬옥수수
섬섬옥수수
컴공 AI 개발자가 되기 위한 노역입니다
섬섬옥수수
아날로그 인간의 컴공 되기
섬섬옥수수
전체
오늘
어제
  • 분류 전체보기
    • 백준 단계별 코딩 테스트
    • KB 논문 정리
    • Memory network 논문 정리
    • LLM 관련 논문 정리
    • Python 및 Torch 코딩 이모저모
    • Clustering 관련 논문 정리
    • 머신러닝 이모저모
    • 암호학

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • ragas
  • e5-v
  • dependency tree
  • 티스토리챌린지
  • 이화여대
  • 문제풀이
  • 인공지능융합기반시스템개론
  • 하드웨어
  • GIT
  • 소프트웨어
  • 백준
  • PEFT
  • constituency tree
  • CUDA
  • vocabulary expansion
  • 심재형
  • efficient and effective vocabulary expansion towards multilingual large language models
  • eeve
  • 코딩테스트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
섬섬옥수수
Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning (NIPS, 2208)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.