deep daiv./NLP 스터디

[NLP 학습] 3주차 : LoRA / 논문 리뷰 : LoRA: Low-Rank Adaptation of Large Language Models

HaeWon_Seo 2024. 8. 19. 17:26

이전 포스트에서 다룬 언어모델에 대한 이해를 바탕으로 LoRA에 대해 학습해본다. LoRA와 관련된 논문 "LoRA: Low-Rank Adaptation of Large Language Models"를 리뷰한다. 

 

1. LoRA

2. 논문 리뷰 

 

 

 


1. LoRA

- Microsoft Research에서 2021년 발표한 "LoRA: Low-Rank Adaptation of Large Language Models" 논문에서 제안된 모델 

- LLM을 더 효율적으로 tuning하기 위한 기술로 주목을 받음 

 

 

1) LoRA 등장 배경

 

- NLP에선 대규모 언어모델을 각각의 task에 맞게 fine-tuning하는 것이 일반적이었음 
- pre-training 과정에서 어느정도 최적화된 파라미터를 각 task에 맞게 조정
- pre-train 모델의 크기가 커지면서 파라미터 전체를 fine-tuning하는 것에 많은 시간과 리소스가 소요
- 대규모 언어모델의 fine-tuning을 더 효율적으로 할 수 있는 방법의 필요성 

 

➡️ LoRA
= pre-trained LLM의 가중치 행렬을 구성하는 모든 가중치를 fine-tuning하지 않고,
  큰 행렬의 gradient를 근사하는 두 개의 작은 행렬을 fine-tuning하는 방식
= 파라미터 학습 과정에서 전체 가중치 행렬을 업데이트하지 않고,
  2개의 저랭크 행렬로 대체하여 저차원 행렬을 업데이트하는 방식

==> 학습 가능한 파라미터 수를 줄여 메모리 및 계산 비용을 줄이면서도 모델의 성능 유지 
       LLM의 pre-trained 파라미터를 downstream task에 더 효율적으로 adaptation하는 방법 

 

 

 

2) LoRA의 원리 

  • W_0 (d*k) : pre-trained weight matrix, 사전학습 가중치 행렬
  • A (r*k), B (d*r) : rank decomposition matrices, 저차원 행렬
  • ΔW = B*A : ΔW_0를 저차원에서 근사, 업데이트 값 
  • r : LoRA rank, r << min(d, k)

A는 random gaussian initialization으로, B는 0으로 초기화

    행렬 A, B는 nn.linear layer 형태로 dense layers 뒤에 단순히 더해짐 

W_0 값은 고정한 채로 ΔW_0를 근사하는 저차원 행렬 BA를 학습 
ΔW = B*A값이 W_0에 더해지며 W_0가 간접적으로 업데이트 됨 

 

=> ΔW = B*A는 결국 W_0 중에서 task별로 중요하게 사용되는 일부 파라미터에 대해 학습 

=> pre-trained 모델의 전체 weight matrix를 업데이트하지 않고
     더 적은 수의 중요한 파라미터만 사용하는 rank decomposition matrices를 학습함으로써

     pre-trained LLM을 downstream task에 더 효율적으로 tuning 

 

출처 : https://velog.io/@d4r6j/PEFT-Parameter-Efficient-Fine-Tuning

 

 

 

 

 

 

2. 논문 리뷰 

논문명 : LoRA: Low-Rank Adaptation of Large Language Models 

저자명 : Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen

https://arxiv.org/abs/2106.09685

 

LoRA: Low-Rank Adaptation of Large Language Models

An important paradigm of natural language processing consists of large-scale pre-training on general domain data and adaptation to particular tasks or domains. As we pre-train larger models, full fine-tuning, which retrains all model parameters, becomes le

arxiv.org

 

 

✏️ 논문 내용 정리 

- LoRA 고안 배경
: pre-train 모델의 규모가 커짐에 따라 모든 pre-train 모델의 파라미터를 재학습하는 full fine-tuning 방식은 효율성이 떨어지는 문제 

- LoRA과 이전 모델의 차이점
: " freezes the pre-rained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture "
pre-train 모델의 weight matrices는 고정시킨 상태에서,
dense layers의 각 층에 weight matrices에 대응하는 trainable rank decomposition matrices를 도입하고,
rank decomposition matrices를 최적화함으로써 기존의 dense layers를 간접적으로 훈련 


- LoRA의 구조 
W_0 (d*k) : pre-trained weight matrix
B (d∗r) / A (r∗k) : trainable rank decomposition matrices
=> ΔW = B*A : A와 B로 trainable 파라미터가 학습되지만 이를 W_0에 더함으로써
    전체 모델의 weights를 간접적으로 업데이트되는 효과를 얻음


- 논문에서 보인 학습 방식의 특성
① downstream tasks를 위한 훈련에서 필요한 파라미터의 수와 메모리를 크게 감소
② 높은 모델 성능을 유지하면서 inference latency를 도입하거나 입력 시퀀스 길이를 줄이지 않음
③ A와 B의 변화만으로 빠르게 다양한 downstream task간 switching 가능

 

 

 

 

 

▶ 0. Abstract

 

- 자연어 처리의 중요한 패러다임은 large-scale pre-training 모델을 특정 tasks로 adaptation하는 것
- pre-train 모델의 규모가 커짐에 따라 모든 모델 파라미터를 재학습하는 full fine-tuning 방식은 점점 현실적이지 못하게 됨

 

- LoRA 또는 Low-Rank Adaptation을 제안

  = freezes the pre-trained model weights

    + injects trainable rank decomposition matrices into each layer of the Transformer architecture 

  => downstream tasks를 위해 훈련해야할 파라미터의 수를 크게 감소시키는 학습 방식 


- Adam으로 미세 조정된 GPT-3 175B에 비해 LoRA는 훈련하는 파라미터의 수를 10,000배, GPU 메모리 요구 사항을 3배 줄일 수 있었음 
- 또한 LoRA는 훈련하는 파라미터가 적고 추가적인 inference latency이 없음
- RobERTA, DeBERTA, GPT-2 및 GPT-3 pre-trained 모델의 성능을 향상시킴 

 

 

 

 

 

▶ 1. Introduction

 

1) 기존 fine-tuning의 문제
- 대부분의 NLP에서 사전학습된 대규모 언어모델에 대하여 모든 파라미터를 fine-tuning해 downstream task에 adapt하는 방식
- 이러한 fine-tuning은 새로운 모델이 원래 모델만큼 많은 파라미터를 학습해야한다는 단점 


2) Low-Rank Adaptation (LoRA) approach
- model adaptaion 과정에서 change in weights에도 low instrinsic rank가 있다고 가정
- pretrained weights는 고정한 채로, weights' change in dense layers의 rank decomposition matrices를 최적화함으로써 기존의 dense layers를 간접적으로 훈련 

- deep layers를 직접적으로 학습하는 것이 아닌, weights' change의 low-rank matrices을 optimize 
rank decomposition matrices = low-rank matrices


- 동일한 사전학습된 모델에 대해서도 low-rank matrices A, B를 다르게 둠으로써 다양한 작업에서 LoRA 모듈들을 구축할 수 있음 
- 대부분의 파라미터에 대해 gradient를 계산하거나 optimizer state를 유지할 필요가 없어 훈련을 더 효율적으로 만들고 하드웨어도 적게 사용 
- 간단한 linear 연산으로 trainable matrices와 frozen weights를 병합하기 때문에 inference latency가 도입되지 않음 
- 기존의 다른 모델들과 함께 사용될 수 있음

 

* inference latency
: 인공지능 모델이 입력 데이터를 받아 결과를 출력하는 데 걸리는 시간, 즉 모델이 문제를 해결하는데 걸리는 시간 

 

 

 

 

 

 

2. Problem Statement


- LoRA는 objective에 관계없이 사용 가능함 
- 논문에서는 language modeling task에 대해 집중 
- 주어진 task-specific prompt에 대하여 정답의 conditional probabilities를 최대화하는 task

  • P_Φ​(y∣x) : 파라미터가 Φ인, Transformer 구조의 사전학습 언어모델 
  • Z = {(x_i, y_i)} (i=1,..,N) : Context-Target Pairs의 훈련 데이터셋
  • P_Φ​(y∣x)를 downstream conditional task generation task에 적용

 

① Full Fine-tuning 

- 모델은 pre-trained weights인 Φ_0로 초기화되고, backpropagation 과정에서 Φ_0​ +ΔΦ로 업데이트
|ΔΦ| = |Φ_0|, 전체 파라미터를 gradient를 사용해 모두 업데이트 

- 각각의 downstream task마다 |Φ_0| 크기의 파라미터를 업데이트 해야함 
- pre-trained weights |Φ_0| 크기가 커질수록 fine-tuning에 더 많은 연산이 요구

 

② LoRA approach

- Θ : LoRA 파라미터

- |ΔΦ| = |ΔΦ(Θ)|, |Φ_0| >> |Θ| (|Φ_0|의 0.01% 정도)
- 모든 pre-trained weights Φ_0에 대해서 업데이트 하는 것이 아니라,

  downstream task-specific increment ΔΦ(Θ)만큼에 대해서만 업데이트 

- LoRA를 이용해 backpropagation에서 파라미터의 일부만 업데이트 

 

 

 

 

 

▶ 3. Aren't Existing Solutions Good Enough?


- model adaptation에서 파라미터 및 계산의 효율성을 증진하기 위한 시도는 이전부터 존재해왔음

- 크게 2가지 접근 방식이 존재하나 각각 한계점을 가지고 있음 

 

  adding adapter layers → Adapter Layers Introduce Inference Latency
- transformer block에 adapter layer를 추가하여, fine-tuning 대신 adapter layer만 학습시키는 방식
- adapter layers에서 추가적인 연산 발생하는데, LNN은 adatper layer에서의 연산을 순차적으로 처리해야하기 때문에 연산 시간이 매우 증가함 

optimizing input layer activations → Directly Optimizing the Prompt is Hard
- language model의 입력으로 들어가는 input embedding에 prompt embedding을 추가하여, fine-tuning 대신 prompt embedding을 다양한 학습 방법으로 학습시키는 방식
- 대표적인 예시가 prefix tuning인데, 최적화가 어렵고 성능이 단조적으로 증가하지도 않음

- downstream task로 tuning하는데 사용할 수 있는 sequence의 길이가 감소하는 문제도 존재 

 

 

 

 

 

▶ 4.Our Method


- LoRA는 딥러닝 모델의 모든 dense layers에 사용가능함 
- 이 논문에서는 Transformer Language Models에 대해 집중 

 


▶ 4.1 Low-Rank-Parametrized Update Matrices

 

- NN은 행렬곱을 수행하는 많은 dense layers를 가지고 있는데, 이 layers의 weight matrices는 full-rank 
- 사전학습된 언어모델은 임의의 더 작은 subspace로 전사되어도 효과적으로 학습될 수 있는 low instrisic dimension을 가지고 있음
- 따라서 사전학습된 언어모델을 downstream task로 adaptation할 때, weights' update도 low instrisic dimension을 가질 것이라고 가정

  • W_0 (d*k) : pre-trained weight matrix
  • B (d∗r) / A (r∗k) : trainable rank decomposition matrices
    A = Random Gaussaian, B = 0 으로 초기화 → ΔW=BA=0로 초기화
  • ΔW = B*A : A와 B로 계산되는 trainable 파라미터의 업데이트 값 
  • r : LoRA rank, r << min(d,k) 
- pre-trained 모델의 weight matrix는 고정한 상태에서 
- weight matrix에 대응하는 rank decomposition martrices A, B만 업데이트(학습)
- W_0와 ΔW는 같은 input x에 곱해지고 coordinate-wise하게 더해지기 때문에 모델 weights를 직접적으로 업데이트하지는 않았지만 A, B에 의해 업데이트 되는 효과를 얻음 
- 이때 A, B는 d나 k에 비해 현저히 작은 값인 LoRA rank r 크기의 matrices

➡️ rank decomposition martrices를 사용해 더 적은 연산량으로 파라미터를 학습하면서도 
     전체 weights가 업데이트되면서 모델이 간접적으로 학습되는 효과를 냄 
     = rank decomposition matrices를 학습함으로써 기존의 dense layers를 간접적으로 훈련 

 

 

- LoRA에서 업데이트의 특징 

  • A Generalization of Full Fine-tuning
    : LoRA rank r을 원래 pre-trained weight matrices의 rank로 설정하면 full fine-tuning과 동일한 학습으로 수렴 
  • No Additional Inference Latency
    : 모델을 다른 task로 전환할 때, B*A를 빼서 W_0를 얻고, W_0에 새로운 B'*A'를 바로 더해주면 되기 때문에 inference latency가 추가되지 않음 

 

 

 

▶ 4.2 Applying LoRA to Transformer


- LoRA는 학습할 파라미터의 수를 줄이기 위해 사용
- Transformer에는 Self-Attention에 4개의 weight matrices

  MLP에 2개(encoder와 decoder에 각각 1개씩)의 weight matrices 존재

- GPT-3 175B 모델의 Self-Attention layer에 LoRA를 적용 

  • d_model​ : Transformer input, output 차원 크기
  • d_ffn​ = 4∗d_model ​: MLP feedforward 차원 크기
  • W_q​ ,W_k​ ,W_v​ ,W_0​ : self-attention의 Query, Key, Valye, Output Projection Matrices 


- LoRA의 가장 큰 장점은 메모리와 저장 공간의 사용량이 감소하는 것

  • VRAM 사용량 1.2TB → 350GB
  • r = 4에서 W_q와 W_v에만 adapt한 경우 350GB → 35MB

- 훨씬 적은 수의 GPU로 훈련할 수 있고 입출력 병목 현상을 피할 수 있음 
- LoRA weight A와 B만 바꾸면 훨씬 적은 비용으로 task 간을 전환 가능
- 파라미터의 gradient 계산이 필요없기 때문에 fine-tuning을 사용한 경우에 비해 25%의 학습 속도 향상 

- 다만 서로 다른 downstream task를 진행할 때마다 별도의 A와 B를 사용해야 하는 한계 

 

 

 

 

 

 

5. Empirical Experiments

 

- LoRA를 각각 RoBERTa, De-BERTa, GPT-2, GPT-3 175B으로 pre-training한 모델에 적용하는 실험 
- natural language understanding(NLU), natural language generation(NLG), GLUE benchmark, NL to SQL queries, SAMSum 등 다양한 downstream task에서 각 모델의 성능을 평가

 

① LoRA 설정

- 논문의 실험에서는 W_q, W_v 층에만 LoRA를 적용 

- W_q, W_v 에 대해서만 대응하는 rank decomposition martrices 사용 
- Θ = 2 X LoRA를 적용한 matrices의 수 X d_model X r

 

② 다른 Baselines 

- Fine-Tuning (FT) : pre-trained weights와 biases로 초기화한 후 모든 모델 파라미터에 대해 gradient 업데이트를 수행하는 학습 방식
- Bias-only or BitFit : 다른 것들은 고정시키고 bias vectors만 학습하는 방식
- Prefix-embedding tuning (PreEmbed) : input embedding에 special word embedding을 삽입하고, 이 embedding을 학습하는 방식
- Prefix-layer tuning (PreLayer) : prefix-embedding tuning 방식을 확장하여, 모든 Transforer layer 뒤에 activation layer를 두고 이를 함께 학습하는 방식 
- Adapter tuning : 2개층의 fully connected layers로 구성된 adapter layer를 삽입한 후 이를 학습하는 방식

 

 

- RoBERTa, De-BERTa, GPT-2를 이용한 대부분의 task에서 LoRA를 적용했을때 가장 좋은 성능을 보임 

 

 

- pre-trained 모델의 규모를 키운 GPT-3를 이용했을때도 LoRA 적용시 가장 좋은 성능을 보임 

 

 

 

 

 

7. Understanding the Low-Rank Updates


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


- 어떠한 weight matrices에서 LoRA를 이용해야 가장 높은 성능 향상을 기대할 수 있는가?
- GPT-3 175B의 attention modeule에만 LoRA를 적용하는 경우에 대해서 실험
- 전체 파라미터 수가 18MB를 넘지 않도록 설정 (r=4 또는 r=8)
- W_q, W_v weight matrices에 LoRA를 적용하는 것이 업데이트하는 가중치의 종류를 적게 가지면서 좋은 성능을 보임 

 

 

 

 

7.2 What is the Optimal Rank r for LoRA?

 

- 최적의 LoRA rank r은 무엇인가?

 

 

- 다양한 r값에서 성능을 비교해본 결과 매우 작은 rank로도 좋은 성능을 보임
  → ΔW가 매우 작은 매우 작은 intrinsic rank를 가질 수 있음 

- 추가적으로 r=8인 경우와 r=64인 경우에서 얻은 각각의 A에 대하여

  singular value decomposition(SVD)를 수행해 두 matrices 간 유사도를 계산
- 유용한 정보를 가장 많이 담고 있는 차원 1의 부분공간에서 두 matrices의 유사도가 높게 나옴 
  rank를 굳이 크게하지 않아도 비슷하게 좋은 성능을 보이는 이유 

 

 

 

 

7.3 How Does the Adaptation Matrix ΔW Compare to W?

 

- Adaptation matrix ΔW와 W는 어떤 관계를 가지는가?

- ΔW는 W와 강한 상관관계

- ∆W only amplifies directions that are not emphasized in W

  pre-trained 모델에선 강조되지 않지만 downstream task에서는 중요한 feature들을 강조

 

==> low-rank adaptation matrix = amplifies important features for specific downstream tasks

      = ΔW를 통해 모든 pre-trained 모델의 파라미터 중에서 downstream task에 중요한

        일부 feature들에 대해서만 추가적으로 학습할 수 있음 (adaptation) 

 

 

 

 

 

 8. Conclusion and Future Work

 

1) 논문의 의의 

- 거대한 언어모델을 fine-tuning하는 것은 storage와 switching cost가 많이 소요
- 높은 모델 성능을 유지하면서 inference latency를 도입하거나 입력 시퀀스 길이를 줄이지 않는 효율적인 전략으로써 LoRA를 제안
- 다양한 downstream task간 switching이 빠름
- 논문에서 중점적으로 다룬 Transformer Language Models뿐만 아니라 dense layers를 사용하는 어떤한 NN에서도 적용 가능함 

 

2) 향후 연구 과제 

- LoRA는 다른 효율적인 adaptation 방법과 결합할 수 있는 방법
- LoRA의 메커니즘은 명확하지 않음
- 논문에선 LoRA를 적용할 가중치 행렬을 선택하기 위해 휴리스틱에 의존
- ΔW에서 rank를 낮췄던 것처럼 W도 rank를 축소가 가능한가에 대한 연구









 

Reference

https://wikidocs.net/230474
https://kyujinpy.tistory.com/83
https://www.databricks.com/kr/blog/efficient-fine-tuning-lora-guide-llms

https://taeyuplab.tistory.com/12
https://velog.io/@quasar529/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-LoRA-Low-Rank-Adaptation-of-Large-Language-Models
https://beeny-ds.tistory.com/entry/LORA-%EB%85%BC%EB%AC%B8-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EA%B8%B0