working_helen
[NLP 학습] 3주차 : LoRA / 논문 리뷰 : LoRA: Low-Rank Adaptation of Large Language Models 본문
[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
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 고안 배경
: 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