본문 바로가기
NLP/Papers

[NLP Paper] LoRA: Low-Rank Adaptation of Large Language Models

by iamzieun 2023. 7. 31.
본 포스팅은 논문 LoRA: Low-Rank Adaptation of Large Language Models를 읽고 정리한 글입니다.

https://arxiv.org/abs/2106.09685

Abstract

  • 문제 인식
    • NLP의 중요한 패러다임은 1) large-scale pre-training on general domain data와 2) particular task 또는 domain으로의 adaption으로 구성된다.
    • 하지만 점점 큰 모델을 pre-train하고 전체 parameter를 재학습하는 full fine-tuning을 하게 되어, 더 많은 비용을 필요로 하게 되었다.
  • 해결책 제시
    • 이에 Low-Rank Adaptation (LoRA)는 pre-train된 모델의 weight를 동결하고, Transformer architecture의 각 layer에 학습 가능한 rank decomposition matrices을 주입함으로써, fine-tuning 시 학습하는 parameter의 수를 줄인다.
    • LoRA는 적은 parameter를 학습하고, 더 빠르게 학습하고, adapter와 달리 추가적인 inference latency가 없음에도 ReBERTa, DeBERTa, GPT-2, GPT-3의 fine-tuning에서 기존 이상의 성능을 보인다.

1. Introduction

  • fine-tuning → 모델의 크기가 커지는 상황에서는 적합하지 않음
    • NLP에서는 large-scale pre-trained model을 여러 downstream task에 adapt하는 방식의 응용이 많이 이루어지며, 특히 adaptation은 fine-tuning을 통해 이루어진다.
    • fine-tuning은 새 모델이 기존 모델과 같은 수의 parameter를 가진다는 점에서 불리하다.
    • 특히 하루가 다르게 모델의 크기가 커지는 상황에서, 이러한 점은 GPT-2나 RoBERTa large의 경우 불편한 정도에 그치겠지만, GPT-3 같은 모델에서는 심각한 문제가 될 수 있다.
  • 일부 parameter만 adapt & 외부 module 학습 → fine-tuning과 비교했을 때 효율성을 높였지만, 모델 품질이 저하됨
    • pre-trained model 외에 소수의 task-specific parameter만 저장하고 불러오면 되므로 효율성이 크게 개선된다.
    • 하지만 이러한 기술들은 모델의 깊이를 확장하거나 시퀀스 길이를 줄이기 때문에 inference latency가 발생한다.
    • 무엇보다, 이러한 기술들은 fine-tuning보다 저조한 성능을 보여, 효율성과 모델 품질 간 trade-off를 한 셈이 된다.
  • LoRA: Low-Rank Adaptation
    • 학습된 parameterized model은 낮은 본질적 차원 (intrinsic dimension)을 가진다.
      • 그렇다면 모델의 adaptation 과정에서 weight의 변화도 낮은 본질적 rank (intrinsic rank)를 가지지 않을까?
    • LoRA는 pre-trained weight는 고정시켜둔채로 dense layer의 rank decomposition matrix들을 최적화함으로써 간접적으로 dense layer를 학습시킨다.
  • LoRA의 장점
    • pre-trained model은 고정시키고, 아래 사진의 matrix A와 B만 교체함으로써, 하나의 pre-trained model을 이용해 여러 task에 맞는 LoRA module을 만들 수 있다.
    • adaptive optimizer를 사용해 low-rank matrix만 학습시키면 되기 때문에, 학습의 효율성을 높이고 하드웨어적인 진입 장벽을 3배 이상 낮출 수 있다.
    • 배포 시 학습된 matrix를 고정된 가중치와 merge할 수 있기에, fully fine-tuned model과 달리 inference latency가 발생하지 않는다.
    • 다른 방법들(ex. prefix-tuning)과 함께 사용 가능하다.
  • Terminologies and Conventions
    • \(d_{model}\): Transformer layer의 input 및 output 차원
    • \(W_{q}\): self-attention에서의 query projection matrix
    • \(W_{k}\): self-attention에서의 key projection matrix
    • \(W_{v}\): self-attention에서의 value projection matrix
    • \(W_{o}\): self-attention에서의 output projection matrix
    • \(W\), \(W_{o}\): pre-trained weight matrix
    • \(\Delta W\): adaptation과정에서의 accumulated gradient update
    • \(r\): LoRA 모듈의 rank

2. Problem Statement

  • \(\Phi\)를 parameter로 하는 pre-trained autoregressive language model \(p_{\Phi_0}\left(y \mid x\right)\)이 주어졌다고 하자. (ex. GPT)
  • 이 model을 하위 task에 adapt하려 하고, 각각의 task에 대한 context-target pair (\(Z=\left\{\left(x_i, y_l\right)\right\}_{i=1, \ldots, N}\))가 주어졌을 때, full-finetuning 과정에서 model의 가중치는 pre-trained weights \(\Phi_0\)로 초기화 되고, 다음 language modeling objective를 최대화하는 gradient \(\Phi_0 + \Delta \Phi\)로 업데이트 된다.
    • \(\max {\Theta} \sum{(x, y) \in z} \sum_{t=1}^{|y|} \log \left(p_{\Phi_0}\left(y_t \mid x, y_{<t}\right)\right)\)
    → 각각의 task에 맞게 fine-tuning을 할 때마다 pre-trained weight (\(\Phi_0\))와 같은 차원의 \(\Delta \Phi\)를 학습해야 하므로, GPT-3처럼 큰 model을 저장하고 배포하기에 어려워진다.
  • 따라서 본 논문에서는 \(\Delta \Phi=\Delta \Phi(\Theta)\)를 더 작은 parameter 집합 \(\Theta\)로 인코딩하는, 보다 parameter-efficient approach를 적용한다.
    • \(\max {\Theta} \sum{(x, y) \in z} \sum_{t=1}^{|y|} \log \left(p_{\Phi_0+\Delta \Phi(\Theta)}\left(y_t \mid x, y_{<t}\right)\right)\)

3. Aren’t Existing Solutions Good Enough?

  1. Adapter Layers Introduce Inference Latency
    • adapter에는 Transformer Block 당 2개의 adapter layer를 가지는 방법과, Transformer Block 당 1개의 adapter layer를 가지고 + 추가적인 LayerNorm을 가지는 방법 등이 있는데,
    • 이들은 layer를 쳐내거나 multi-task 설정을 통해 latency를 줄일 수는 있지만, adapter layer에서의 추가적인 연산을 피할 방법은 없다.
    • 어쨌든 adapter는 기존 모델의 1% 미만의 적은 수의 parameter를 가지기 때문에 문제가 아닌 듯 싶었으나,
    • 대규모 모델은 latency를 낮게 유지하기 위해 병렬 처리를 하는 반면 adapter layer는 직렬로 진행되어야 하기 때문에 latency가 눈에 띄게 증가한다는 문제가 발생했다.
  2. Directly Optimizing the Prompt is Hard
    • prefix tuning은 최적화가 어렵고, parameter의 학습이 단조적으로 이루어지지 않는다.
    • 보다 근본적으로, adaptation을 위해서는 prefix가 sequence 길이의 일부를 차지하게 되어, 가용 sequence 길이가 줄어들게 된다.

4. Our Method

4.1 Low-Rank-Parametrized Update Matrices

  • 신경망의 weight matrix는 주로 full-rank인데, 특정 task에 adapt 되는 pre-trained model은 낮은 intrinsic dimension을 가지며, 작은 subspace로 사영되어도 효과적으로 학습될 수 있음이 밝혀졌다.
  • 이에 본 논문에서는 adaptation 과정 중 weight의 update에도 낮은 intrinsic rank가 있을 것이라 가정한다.
  • pre-trained weight matrix \(W_0 \in \mathbb{R}^{d \times k}\)를 low-rank decomposition인 \(W_0+\Delta W=W_0+B A\)로 업데이트한다.
    • \(W_0\)은 고정됨
    • \(B \in \mathbb{R}^{d \times r}\), \(A \in \mathbb{R}^{r \times k}\), \(r <min(d, k)\)
    • \(A\): Gaussian initialization으로 초기화
    • \(B\): 0으로 초기화
    • → \(\Delta W = BA\): 학습 시작 시 0
    • \(\Delta Wx\)를 \(\frac{\alpha}{r}\)로 scaling
    • Adam으로 최적화할 때, 초기화가 적절히 이루어졌다는 전제 하에 \(\alpha\)를 튜닝하는 것은 learning rate를 튜닝하는 것과 같음 → \(\alpha\)를 초기 \(r\)로 고정함으로써 \(r\)의 변화에 따른 하이퍼파라미터 튜닝의 필요성을 줄임
  • A Generalization of Full Fine-tuning
    • fine-tuning의 일반화된 형태는 pre-trained parameter의 일부분만을 학습하는 것을 허용한다.
    • LoRA는 한 발 더 나아가, adaptation 과정에서 weight matrix에 대한 accumulated gradient update가 full-rank일 필요가 없도록 한다.
    ⇒ 만약 LoRA를 모든 weight에 적용하고, r을 pre-trained weight matrix의 rank로 설정하면 full fine-tuning과 같게 되므로, LoRA를 full fine-tuning을 일반화한 것으로 볼 수 있다.
  • No Additional Inference Latency
    • production단에 올릴 때 \(W = W_0 + BA\)는 명시적으로 계산되고 저장될 수 있다.
    ⇒ task에 맞게 \(BA\) 부분만 바꿔치기 하면 되므로, 메모리를 적게 사용하면서도 추가적인 inference latency를 발생시키지 않는다.

4.2 Applying LoRA to Transformer

  • 원칙적으로 LoRA는 신경망의 모든 weight matrix에 적용될 수 있지만, 본 논문에서는 Transformer의 attention weight으로만 한정한다.
  • Practical Benefits
    • 고정된 parameter의 optimizer state를 저장하지 않아도 되기 때문에, 적은 수의 GPU를 사용하고 I/O 병목 현상을 피하면서 효과적으로 학습할 수 있다.
    • 모든 parameter를 바꾸는 것이 아닌, LoRA weight만 바꿈으로써 task를 넘나들 수 있다.
  • Limitations
    • inference latency를 없애기 위해 \(A, B\)를 \(W\)에 병합하기로 한 경우, 한 번의 forward pass에서 다른 \(A, B\)를 가지는 다른 task를 batch input으로 줄 수 없다.
    • inference latency가 상관 없고 \(A, B\)를 \(W\)로 병합하지 않는 경우에는, 동적으로 LoRA 모듈을 선택할 수 있다.

5. Empirical Experiments

6. Related Works

  • Transformer Language Models
    • Transformer은 self-attention을 기반으로 한 seq2seq 구조이다.
    • GPT-1은 Transformer의 decoder로 autoregressive language modeling을 진행하였고,
    • BERT와 GPT-2는 방대한 양의 data로 학습한 커다란 Transformer 기반 model로, 단순히 task에 맞는 data로만 냅다 학습시키는 것에 비해 pre-training과 fine-tuning을 거치는 것이 가지는 효용을 보여주었다.
  • Prompt Engineering and Fine-Tuning
    • GPT-3은 몇 개의 학습 sample로 task에 잘 적응하면서도 그 결과물이 input prompt에 크게 영향을 받기에, 모델의 성능을 극대화할 수 있는 prompt를 구성하는 경험적인 실험인 Prompt Engineering이 요구된다.
    • fine-tuning은 general-domain data로 pre-train된 모델을 task-specific data로 재학습하는 것인데, 이 때 전체 parameter를 재학습할 수도 있고, 일부 parameter만 재학습할 수도 있다.
      • GPT-3같이 큰 모델은 하드웨어적인 장벽이 다소 높아서 일반적인 방법으로 fine-tuning을 하기 쉽지 않다.
  • Parameter-Efficient Adaptation
    • 신경망의 기존 layer 사이에 adapter layer를 추가하는 방식은 많이 제안되어왔고, weight update 시 low-rank constraint를 부과하기 위해 bottleneck 구조를 만드는 본 논문의 구조와 유사하다.
    • 하지만 LoRA 모듈은 원래 weight와 merge가 가능하지만, adapter는 그렇지 않다는 차이를 가진다.
  • Low-Rank Structures in Deep Learning
    • 기계학습에서 low-rank structure는 많이 사용되지만, downstream task로의 adaptation 과정에서 low-rank constraint를 부과하는 방법은 전례가 없다.
    • 이론적으로 low-rank structure를 가진 신경망이 다른 전통적인 방법에 비해 성능이 좋으며, 적대적 훈련에 유용하다는 것이 제안되었다는 점에서 본 연구는 유의미하다고 볼 수 있다.

7. Understanding the Low-Rank Updates

downstream task로 학습시킨 low-rank adaptation은 pre-trained weight와 update weight가 어떻게 연관이 있는지에 대한 더 나은 해석 가능성을 제공한다. 이에 아래 세 질문에 대한 경험적인 연구를 진행했다.

7.1 Which Weight Matrices in Transformer Should We Apply LoRA to?

  • GPT-3 175B의 parameter budget을 18M으로 설정했을 때, 한 종류의 attention weight에 적용하려면 \(r=8\)이고, 두 종류의 경우에는 \(r=4\)이다.
  • 어떤 weight에 LoRA를 적용하는 것이 가장 효과적인지에 대한 경험적인 실험을 진행한 결과, \(W_q\)와 \(W_v\)에 적용하는 것이 가장 성능이 좋았고, 한 종류의 weight에만 적용한 \(W_q\), \(W_k\)의 성능이 현저히 떨어진다는 점에서, 높은 \(r\)값과 적은 종류의 weight 보다는, 낮은 \(r\)값과 많은 종류의 weight에 LoRA를 적용하는 것이 더 좋다고 볼 수 있다.

7.2 What is the Optimal Rank r for LoRA?

  1. Is the “optimal” adaptation matrix \(\Delta W\)really rank-deficient? If so, what is a good rank to use in practice?

7.3 How Does the Adaptation Matrix Compare to W?

  1. What is the connection between \(\Delta W\) and \(W\)? Does \(\Delta W\) highly correlate with \(W\)? How large is \(\Delta W\) comparing to \(W\)?

8. Conclusion and Future Work

  • conclusion
    • 거대 언어 모델을 여러 task에 맞게 fine-tuning하는 것은 많은 hardware 비용을 필요로 하는 반면,
    • LoRA는 inference latency나 input sequence length의 감소 없이도 모델 성능을 유지하며, 대부분의 model parameter를 공유함으로써 빠르게 task 간을 오갈 수 있다.
    • 또한 본 논문에서는 Transformer를 예시로 들었으나, 원론적으로는 dense layer를 가진 어떤 신경망에도 적용 가능하다.
  • future work
    • LoRA는 다른 효과적인 adaptation 방법론들과 결합될 수 있다.
    • fine-tuning 또는 LoRA에서 pre-training과정에서 학습된 feature들이 downstream task에서 잘 작동하도록 변화하는 mechanism은 불분명하다.
    • LoRA를 적용할 matrix을 경험적으로 선택했다.
    • \(\Delta W\)의 rank-deficiency (낮은 rank로도 잘 표현됨)은 \(W\)의 rank-deficiency를 의미할 수 있어, 추후 새로운 연구 대상이 될 수 있다.

댓글