[Summary] Brief Summary of Parameter-Efficient Fine-Tuning for Language Models
카테고리: Language
태그: Adapter Tuning LoRA PEFT Prefix Tuning Prompt Tuning Summary
🔍 Overview
일반적으로 LLM(Large Language Model)은 거대한 모델이고, 굉장히 많은 파라미터를 가지고 있다. 이 모델을 downstream task에 적용할 때 전체 모델 파라미터를 모두 fine-tuning한다면 굉장히 많은 computational cost가 필요할 것이다. 이러한 문제를 해결하기 위해 Parameter-Efficient Fine-Tuning(PEFT)라는 방법이 제안되었다. (혹은 Parameter-Efficient Transfer Learning(PETL)로 불리기도 한다.) 이 방법은 Adapter Tuning, Prefix Tuning, Prompt Tuning, LoRA와 같은 방법들로, 이를 활용해 모델의 일부 파라미터, 혹은 추가 파라미터들만 fine-tuning하여도 좋은 성능을 보일 수 있다.
여기서는 PEFT 중에서도 대표적인 방법들인 (1) Adapter Tuning, (2) Prefix Tuning, (3) Prompt Tuning, (4) LoRA(Low-Rank Adaptation)에 대해 이를 초기에 제안한 논문들과 함께 간단히 정리하고자 한다.
1. Adapter Tuning
1.1. Serial Adapter [19’ ICML]
[19’ ICML] Parameter-Efficient Transfer Learning for NLP
처음으로 소개할 방법은 최초의 Adapter 방법으로 소개된 논문으로, ICML 2019에서 발표되었다. 일반적인 Transformer Layer 순서에 Adapter Layer를 추가했다는 점에서 serial adapter라고 불리기도 한다. FFN 이후에 Adapter Layer가 추가된다.
Adapter는 down-projection matrix $W_ {\text{down}} \in \mathbb{R}^ {d \times r}$, non-linear activation function $\sigma (\cdot)$, up-projection matrix $W_ {\text{up}} \in \mathbb{R}^ {r \times d}$로 구성된다. Residual connection을 더하여 adapter는 다음과 같이 표현된다.
\[\text{Adapter}(x) = W_ {\text{up}} \sigma (W_ {\text{down}} x) + x\]이 논문에서는 Adapter Layer만 학습하고, 나머지 Transformer Layer는 고정하여도 기존의 성능을 유지할 수 있었다. 이는 Fine-tuning보다 훨씬 적은 parameter를 사용한 것으로, 기존의 파라미터에서 8% 미만이라고 한다.
1.2. Parallel Adapter [22’ ICLR]
[22’ ICLR] Towards a Unified View of Parameter-Efficient Transfer Learning
Parallel Adapter는 Serial Adapter와 달리 Transformer Module과 Adapter Module이 병렬로 구성된다. 저자들은 당시에 나온 많은 PEFT 방법들을 비교하며 parallel method가 serial method보다 효과적이라고 결론지었고, 이를 통해 여러 방법이 통합된 하나의 Adapter Module을 만들었다. 저자들은 이를 MAM Adapter라고 불렀는데, 이 adapter를 도출하는 과정이 굉장히 체계적이기 때문에 가능하다면 논문 리뷰는 따로 진행할 예정이다. 여기서는 그 과정에서 제안된 Parallel Adapter에 대해 간단히 소개하였다.
2. Prefix Tuning [21’ ACL]
[21’ ACL] Prefix-Tuning: Optimizing Continuous Prompts for Generation
Prefix Tuning은 prefix sequence를 각 Transformer layer에 추가하여, 이를 학습시키는 방법이다. 저자들은 Prefix Tuning이 GPT의 Prompting으로부터 영향을 받았다고 소개하고 있다. GPT에서 Task-specific prompt를 작성하면 성능이 향상되는 것처럼, prefix tuning에서도 task-specific prefix를 학습시켜 성능을 향상시킬 수 있을 것이라는 것이다.
Abstract와 위 Figure만 본다면 Prefix가 일종의 Prompt와 같은 역할을 하는 것으로 오해할 수 있는데, 그렇지 않다. 각 Transformer layer의 hidden state에 prefix를 추가하여, 이를 학습시키는 것이다. Autoregressive model과, encoder-decoder model에서 각각 다음과 같이 적용할 수 있다.
수학적으로는 다음과 같다. 먼저 Prefix indices, 즉 Prefix가 들어갈 자리들의 집합을 $P_ {\text{idx}} \in \mathbb{R} ^ {\vert P_ {\text{idx}} \vert \times \text{dim} (h_ i)}$라 하자. 이때 Transformer layer의 hidden state $h_i$에 prefix를 추가하는 것은 다음과 같이 표현된다.
\[h_ i = \begin{cases} P_ \theta [i, :], & \text{if } i \in P_ \text{idx} \\ \text{LM}_ \phi (z_i, h_ {\lt i}), & \text{otherwise} \end{cases}\]그리고 학습은 오로지 prefix parameter $\theta$만 진행된다. Language model의 parameter인 $\phi$는 고정된다. 그러나 직접 $P_ \theta$를 학습하는 것은 불안정하고, 성능이 좋지 않았다고 한다. 대신 저자들은 reparametrization trick을 사용한다. 더 작은 matrix인 $P^ \prime _ \theta \in \mathbb{R} ^ {\vert P_ {\text{idx}} \vert \times k}$를 MLP를 통해 $P_ \theta$로 mapping하는 방식이다.
\[P_ \theta [i, :] = \text{MLP}_ \theta (P^ \prime _ \theta [i, :])\]학습이 끝난 뒤에는 reparametrization parameter는 필요하지 않고, MLP를 거쳐 도출된 $P_ \theta$만 사용하면 된다. 결과적으로 0.1%의 parameter만 사용하여도 기존 fine-tuning의 성능을 유지할 수 있었다.
3. Prompt Tuning
3.1. Prompt Tuning [21’ EMNLP]
[21’ EMNLP] The Power of Scale for Parameter-Efficient Prompt Tuning
Prompt tuning의 자세한 설명에 앞서 hard prompting과 soft prompting이라는 개념을 이해하는 것이 중요하다. 당시에는 GPT의 등장으로 prompting 기술이 주목받고 있었다. 초기에 제안된 hard prompting은 적절한 prompt engineering을 통해 원하는 정답을 얻도록 prompt를 디자인하는 것이다. 위 예시에서는 긍정 또는 부정 표현을 얻기 위해 It is [MASK]
와 같은 prompt를 사용하는 식이다.
그러나 이러한 hard prompting은 prompt 제작에 많은 시간과 노력이 필요하고, 직관적으로도 sub-optimal할 가능성이 높다. 이러한 문제점은 이후 논문에서도 지적되었고, 따라서 soft prompting이라는 개념이 등장하게 되었다. Soft prompting은 prompt를 학습 가능한 parameter로 취급하여, 모델이 data-driven하게 prompt를 학습하도록 하는 것이다.
따라서 저자들은 $P_ e \in \mathbb{R}^ {p \times d}$라는 soft-prompt를 만들고 $P_ \theta (Y \vert \vert [P_e; X])$에서 $P_ e$만 학습시킨다. 이러한 방식을 사용하면 Prefix Tuning보다 더 적은 수의 parameter만 사용하게 되며, 대략 0.001%에서 0.01%의 parameter만 사용하여도 기존의 성능을 유지할 수 있다.
3.2. P-Tuning [21’ arXiv]
[21’ arXiv] GPT Understands, Too
비슷한 시기에 제안된 방법으로 P-Tuning이 있다. 정확하게는 P-tuning이 Prompt tuning보다 약간 먼저 제안된 방법이다. 논문 제목이 “GPT Understands, Too“인 이유는, 기존에는 NLU(Natural Language Understanding) task에서는 GPT가 좋지 않다고 여겨졌지만 P-tuning을 통해 GPT가 NLU task에서도 좋은 성능을 보일 수 있다는 것을 보여주었기 때문이다.
위 그림은 기존 discrete prompting을 학습하던 방법론에서 continuous prompting을 학습하도록 바꾼 P-Tuning의 방법을 소개하고 있다. 특히 back-propagation이 어려웠던 hard prompt와는 달리, soft-prompt는 back-propagation으로 학습이 가능해 더욱 안정적으로 학습된다. 자세한 과정을 살펴보자.
먼저 세팅은 input $x$로부터 label $y$를 맞추는 NLU task이다. 예를 들어 영국의 수도를 맞추는 문제라면, $(x, y)$는 (Britain, London)이 되고, 적절한 hard prompt는 The capital of Britain is [MASK]
가 될 것이다. 이제 이를 soft prompt로 바꾸어보자. 먼저 prompt template를 다음과 같이 나타낸다.
그리고 embedding function $f: [P_ i] \rightarrow h_ i$에 의해 다음과 같이 embedding으로 표현된다.
\[H = \lbrace h_ 0, \cdots, h_ i, e(x), h_ {i+1}, \cdots, h_ j, e(y), h_ {j+1}, \cdots, h_ k \rbrace\]학습 시에는 embedding $P$와 embedding function $f$만 훈련시킨다. 위에서 소개했던 Prompt tuning과 크게 다르지 않다. 대신 조금 더 NLU task에 집중하여 human-designed pattern을 사용한 점이 다르다. 결과는 hard prompting보다 효과적이었다.
3.3. P-Tuning v2 [22’ ACL]
이후에 P-Tuning v2도 소개되었는데, 이 논문은 P-Tuning의 후속 논문이라고 소개되고 있지만 사실 Prefix Tuning의 후속 논문에 더 가깝다. 논문에서는 Prefix Tuning을 일종의 Deep Prompt Tuning이라고 부르면서, 여러 layer에서 task-specific parameter를 가지고 있는 것이 더 유리하다고 말한다.
그러나 이 그림을 보면 Prefix Tuning과 큰 차이점을 찾기 어렵다. 실제로 큰 차이점이 없고, 일부 survey 논문에서는 P-Tuning v2를 Prompt Tuning에 분류하지 않고 Prefix Tuning으로 분류한다. 저자들도 본인들의 technical novelty가 제한적이라는 것을 결론 부분에서 밝히고 있다. 대신, 이 논문의 contribution은 기존 prompt tuning과는 달리 multi-scale, multi-task에서도 가능한 방법을 재발견했다는 것이다. 기존 prompt tuning은 모델의 크기가 커지면 잘 작동하지 않는다는 문제가 있었는데, 이를 해결했다는 것이다.
4. LoRA (Low-Rank Adaptation) [22’ ICLR]
[22’ ICLR] Low-Rank Adaptation of Large Language Models
기존에 밝혀진 바에 따르면 pre-trained LM의 parameter는 low intrinsic dimension을 가지고 있다. 즉, 전체 parameter를 fine-tuning 하는 데에 어떠한 low dimension reparametrization이 가능하다는 것이다.
즉, 저자들은 pre-trained LM이 low intrinsic dimension을 가지고 있다는 것으로부터 adaptation (혹은 fine-tuning) 과정의 weight update도 일종의 low intrinsic rank를 가지고 일어날 것이라고 가정한다. 기존의 pre-trained LM layer의 weight를 $W_0 \in \mathbb{R}^ {d \times k}$라 하고, 이 layer에서 fine-tuning을 통해 얻게 될 weight를 $W_0 + \Delta W$라 하자. 위 가정에 의해, 다음과 같이 low-rank decomposition이 가능하다.
\[W_ 0 + \Delta W = W_ 0 + BA, \quad \text{where } B \in \mathbb{R}^ {d \times r}, A \in \mathbb{R}^ {r \times k}\]이때 rank $r$은 $r \ll \min(d, k)$이다. 구현 시에는 $A$는 Gaussian Initialization, $B=0$으로 초기화하여 첫 학습 때에는 기존과 동일하게 $\Delta W = 0$이도록 하였다. Inference 시에는 $W = W_ 0 + BA$로 계산해두고 사용하면 된다.
실제로 저자들이 Transformer에 이를 적용할 때에는 Attention Module에만 적용하였고, MLP Layer에는 적용하지 않았다. 이러한 방식으로 VRAM 사용량을 거의 1/3으로 줄일 수 있었고, Checkpoint의 경우 1/10000 크기로 줄일 수 있었다.
다른 모델들, 즉 Adapter Tuning (Adapter), Prefix Tuning (PrefixLayer), Prompt Tuning (PrefixEmbed)와 비교했을 때에도 LoRA가 성능이 우수했다. LoRA의 경우 더 자세한 리뷰를 작성하였으니, 여기를 참고하기 바란다.
💡 Summary
지금까지 PEFT(Parameter-Efficient Fine-Tuning)에 대해 알아보았다. Adapter Tuning, Prefix Tuning, Prompt Tuning, LoRA 등 다양한 방법론이 제안되었는데, 이를 통해 거대한 LLM을 downstream task에 적용할 때 full fine-tuning이 아닌 일부 파라미터만 fine-tuning하여도 좋은 성능을 보일 수 있다는 것을 알 수 있었다. 이러한 방법들 중 어떤 것이 가장 좋은지에 대해서는 여전히 정해진 것이 없다. 그러나 최근에는 LoRA가 가장 흔한 선택지이고, 실제로 많은 task에서 쉽게 적용 가능하다. 이러한 PEFT 방법론들을 비교한 논문도 있어, 시간이 된다면 추가로 리뷰할 예정이다.
📃 Reference
- [23’] A Survey of Large Language Models
- [24’] Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey
댓글 남기기