[논문리뷰] LORA: LOW-RANK ADAPTATION OF LARGE LAN GUAGE MODELS

현선·2025년 11월 26일

논문리뷰

목록 보기
10/12

0. ABSTRACT

대규모 일반 도메인 데이터로 사전학습을 하고, 특정 작업이나 도메인에 맞게 적응시키는 것은 자연어 처리의 중요한 패러다임이다. 그러나 더 큰 모델을 사전학습할수록, 모든 모델 파라미터를 다시 학습시키는 전체 파인튜닝 방식은 점점 실용성이 떨어진다.

이를 해결하기 위해 본 논문에서는 LoRA를 제안한다.

  • 기존 가중치는 그대로 freeze
  • 대신 Transformer 각 레이어에 저랭크 행렬만 끼워 넣어서 학습함.

즉, 큰 모델 건드리지 말고, 작은 추가 파라미터만 학습하는 방식.

GPT-3 175B를 Adam으로 파인튜닝하는 경우와 비교하면, LoRA는 학습해야 할 파라미터 수를 10,000배 감소시키고, GPU 메모리 요구량을 3배 절약할 수 있다.

LoRA는 RoBERTa, DeBERTa, GPT-2, GPT-3에서 전체 파인튜닝과 비교해 동등하거나 더 나은 성능을 보였으며, 학습해야 하는 파라미터는 훨씬 적고, 학습 처리량은 더 높으며, 기존 어댑터와 달리 추론 시 추가 지연도 없다.

1. INTRODUCTION

파인튜닝 방식의 큰 단점은 새로 만들어진 모델이 원래 모델과 동일한 수의 파라미터를 가진다는 점이다.

이러한 문제를 해결하기 위해 저자는 “학습된 과대매개변수 모델은 실제로 낮은 고유 차원에 존재한다” 라는 점에서 영감 받아 모델 적응 과정에서의 가중치 변화 또한 낮은 고유 랭크를 가진다고 가정하며, 이를 바탕으로 LoRA를 제안한다

모델은 거대해 보이지만 실제로는 몇 개의 중요한 방향만 쓴다.
그러므로 ΔW도 몇 가지 방향(저랭크)만 바꿔도 충분하다.

LoRA는 사전학습된 가중치를 그대로 유지한 채, 신경망의 일부 밀집층을 직접 학습하는 대신 “해당 층의 가중치 변화”를 저랭크 분해 행렬로 학습하도록 한다.

LoRA는 다음과 같은 핵심 장점들을 가진다.

• 하나의 사전학습 모델만 공유하고, 작업별로 매우 작은 LoRA 모듈만 관리하면 됨
→ A, B 행렬만 교체하면 되기 때문에 저장 공간·작업 전환 비용이 크게 줄어든다.

• 훈련 효율이 매우 좋고, 하드웨어 요구량이 최대 3배까지 감소
전체 파라미터의 그래디언트와 옵티마이저 상태를 계산할 필요가 없고,
A, B라는 아주 작은 행렬만 학습하면 되기 때문.

• 추론 속도에 추가 지연 없음
학습이 끝난 후 BA를 W0에 합쳐서 기존 모델과 동일한 방식으로 추론할 수 있다.
→ Adapters처럼 layer를 추가하지 않기 때문에 속도 저하 없음.

• 다른 방식들과도 쉽게 결합 가능 (예: prefix tuning)
→ LoRA는 orthogonal한 방식이라 기존 메서드를 방해하지 않음.

2. problem statement

GPT 같은 사전학습된 자동회귀 언어모델은 문맥 𝑥가 주어졌을 때 목표 텍스트 𝑦를 생성하는 확률 모델이다. 실제 다운스트림 작업(요약, MRC, NL2SQL 등)에 모델을 적용할 때는 각 작업마다 문맥–정답 쌍
(𝑥𝑖,𝑦𝑖) 형태의 데이터셋을 가진다.

  • 요약: 기사 본문 𝑥 → 요약문 𝑦
  • MRC: 본문+질문 𝑥 → 정답 𝑦
  • NL2SQL: 자연어 질문 𝑥 → SQL 쿼리 𝑦

이처럼 모든 작업은 “주어진 문맥에 맞는 출력 문장을 생성하는 문제”로 표현된다. 그래서 파인튜닝은 결국 사전학습된 모델을 특정 작업용 데이터 (𝑥,𝑦) 에 맞춰 확률 𝑃(𝑦∣𝑥) 를 최대로 만드는 과정이 된다.

Full Fine-tuning
full fine-tuning은 사전학습된 모델의 모든 파라미터 W0를 시작점으로 두고, 각 작업 데이터 (x, y)에 대해 조건부 확률 P(y | x)를 최대화하도록 전체 가중치 W0 + ΔW를 업데이트하는 방식이다.(정답 문장을 한 단어씩 맞출 확률을 최대화하는 것)

업로드중..

(1).한 샘플 (x,y)에 대해 y의 각 토큰 y₁, y₂, …, y_|y| 에 대해
모델이 그 토큰을 맞출 확률의 log를 다 더함

(2).이렇게 나온 log 확률 합을 모든 (x, y) ∈ Z 에 대해 또 다 더함

(3).마지막으로 이 전체 합이 최대가 되도록 파라미터 Φ를 찾는다

그러나 이런 방식은 사전학습 모델 전체 파라미터 W₀를 전부 업데이트해야 해서 모델이 커질수록 저장·배포·관리 비용이 폭발적으로 증가한다는 단점이 있다.

LoRA approach
업로드중..
full finetuning의 한계를 해결하기 위해 기존 가중치 W₀는 그대로 두고,변화량 ΔW만 따로 아주 작은 파라미터 φ로 표현해서 학습하는 방식이 고안됨.

사전학습된 가중치 θ₀는 얼린다(freeze)
대신 Δθ(Φ) 라는 “변화량”만 학습한다
따라서 실제 모델은 원래 가중치 θ₀ LoRA가 만든 업데이트 Δθ(Φ)
두 개 합친 걸로 예측함.

3. AREN’T EXISTING SOLUTIONS GOOD ENOUGH?

1) Adapter Layers
: Transformer 블록 사이에 새로운 작은 Layer(어댑터)를 끼워 넣는 방식.

장점
파라미터 추가량은 매우 적음 (<1%)
단점
속도가 느림
why?

  • Transformer는 원래 병렬 처리로 빨리 돌아감
  • 근데 Adapter는 새로 추가된 layer라 순차적으로 처리해야 함(병렬 불가)
  • 모델을 여러 GPU로 나눠서 쓰면
    → Adapter 층 때문에 GPU 간 통신이 더 늘어나서 더 느려짐

2) Prefix Tuning / Prompt Optimization
: 입력 토큰 앞에 학습 가능한 prefix 토큰을 붙여서 모델을 조정하는 방식.

단점

  • 최적화가 힘들다
  • 학습되는 파라미터 수가 늘어나도 성능이 계속 좋아지는 게 아님
  • 시퀀스 길이를 먹어버림
    prefix가 입력 앞에 들어가니까
    → 원래 작업에 사용 가능한 sequence 길이가 줄어들어 버림

업로드중..

4 OURMETHOD

4.1 LOW-RANK-PARAMETRIZED UPDATE MATRICES

Transformer의 dense layer 가중치 W0는 보통 full-rank.
연구에 따르면 사전학습된 모델은 사실 낮은 차원의 구조를 가진다.
그래서 “가중치 변화(ΔW)도 실제로는 저랭크로 표현 가능하다”고 가정함

LoRA 아이디어

원래 업데이트 방식: W0 + ΔW
LoRA 방식(저랭크 행렬 분해): ΔW = B * A

-> 기존 업데이트(ΔW)를 대형 행렬로 직접 학습하는 게 아니라, 작은 두 행렬 B·A로 분해해서 학습하자는 개념

W₀ = 사전학습된 본체 모델
BA = 작업별 추가 보정 패치

  • B : (d × r)
  • A : (r × k)
  • r : 매우 작은 값 (예: 1~8)
    → 업데이트해야 하는 파라미터 수가 매우 크게 줄어든다.

파라미터 수
ΔW 직접 학습하면: d × k
LoRA로 학습하면: d × r + r × k

훈련 방식

  • W0(사전학습 가중치)는 freeze
  • A와 B만 학습

새로운 forward pass: h = W0 x + (B A) * x
즉, 원래 출력에 LoRA가 만든 작은 변화량을 더해주는 방식.

초깃값은 아래와 같이 설정

  • A = 랜덤 가우시안 초기화
  • B = 0으로 초기화

왜 B=0?
처음에는 모델이 원래 W0 그대로 작동해야 하니까
B=0이면 BA=0 → LoRA 영향 ‘0’ → 안전한 시작

그 다음 학습이 진행되면 B가 업데이트되면서 점점 LoRA 변화가 생김.

또한 LoRA는 (𝐵𝐴)𝑥 에 스케일링 계수 α/r을 곱해서 안정적으로 학습되도록 만든다. 이렇게 하면 랭크 r을 바꿔도 학습률 튜닝 거의 필요 없음.

A Generalization of Full Fine-tuning.

  • LoRA는 ΔW가 full-rank일 필요 없다고 보고 저랭크로 학습함.
  • r을 크게 잡으면 풀 파인튜닝 수준의 표현력까지 도달 가능.
  • 어댑터/프리픽스는 구조적 한계가 있지만 LoRA는 그 제약 없음.

No Additional Inference Latency.

  • 추론 시 W = W₀ + BA를 미리 합쳐두면 추론 속도 100% 동일.
  • BA만 교체하면 다른 작업으로 손쉽게 전환 가능 → 메모리/속도 압도적 효율.

4.2 APPLYING LORA TO TRANSFORMER

LoRA는 원칙적으로 모든 가중치 행렬에 적용 가능하지만 논문에서는 Attention 쪽만 적용해 실험함.

WHY?

  • Attention이 실제 성능에 더 큰 영향
  • MLP까지 LoRA 넣으면 파라미터가 너무 많아짐
  • 복잡도 증가 → 연구 초점 분명히 하려고 Attention만 실험함

그 결과 아래와 같은 효과가 있음

  1. VRAM 사용량이 2~3배 감소
  2. GPT-3 175B도 1.2TB→350GB로 줄어듦.
  3. 체크포인트 크기10,000배 줄어듦 (350GB → 35MB).
  4. 작업 전환 시 BA만 교체하면 돼서 비용 거의 0.
  5. 학습 속도도 25% 향상

LoRA의 한계(Limitations)

🔸 여러 작업(A,B가 다른 LoRA 모듈)을 한 배치에 섞어 처리하기 어려움
-> 추론 속도를 최대로 하려면 BA를 W₀에 합쳐서 하나의 W로 만들어 사용해야 함

그러면 “샘플마다 다른 BA”를 붙이는 게 불가능함

즉 병렬(batch) 추론에 여러 LoRA 모듈을 섞는 건 어려움
단, latency(속도)가 덜 중요할 때는
merge 안 하고 sample마다 LoRA 모듈 달리 쓰면 가능하긴 함

7. UNDERSTANDING THE LOW-RANK UPDATES

파라미터 예산이 제한되어 있을 때, 다운스트림 성능을 최대화하려면 어떤 종류의 가중치 행렬에 LoRA를 적용해야 할까?

7.1 WHICH WEIGHT MATRICES IN TRANSFORMER SHOULD WE APPLY LORA TO?

업로드중..

GPT-3 175B에 대해 다음과 같은 설정을 사용했다:

총 학습 가능한 파라미터 예산 = 1800만 개 (약 35MB, FP16 기준)
하나의 Attention weight만 LoRA로 조정하면 r = 8
두 개의 weight를 LoRA로 적용하면 r = 4
모든 96층(layer)에 동일하게 적용

Transformer Self-Attention 가중치 중:

Wq만 적용 → 별로
Wk만 적용 → 별로
Wq + Wk + Wv + Wo → 나쁘지 않지만 비용 큼
Wq + Wv → 가장 효율적이고 성능이 좋음

왜 Wq + Wv 조합이 좋을까

Wq(query)와 Wv(value)는 attention의 정보 흐름을 크게 결정하는 역할

이 둘을 함께 업데이트하면
→ attention이 무엇을 보고(질의) / 어떤 정보를 전달(value) 할지 같이 조정됨

단일 weight를 크게 업데이트하는 것보다
→ 여러 weight에 “작게 LoRA 적용”하는 게 더 많은 정보 반영 가능

Wq 하나만 r=8로 왕창 업데이트
→ 한 방향 정보만 강화됨
→ 모델 변화 폭은 크지만 “편향된 변화”

Wq & Wv를 r=4씩 업데이트
→ 두 가지 방향 정보가 동시에 업데이트됨
→ 전체적으로 훨씬 다양한 정보가 반영됨

7.2 WHAT IS THE OPTIMAL RANK r FOR LORA?

업로드중..
실험은 세 가지 방식으로 LoRA를 적용하여 비교

  • Wq만 적용
  • Wq + Wv 적용
  • Wq + Wk + Wv + Wo 적용

그리고 랭크 r을 1, 2, 4, 8, 64까지 바꿔가며 WikiSQL와 MultiNLI에서 검증 accuracy를 측정

결론요약
r=1도 괜찮음생각보다 ΔW가 필요로 하는 정보량이 작다 = intrinsic rank 낮음
r 키워도 큰 변화 없음r이 1→64 되어도 성능 거의 비슷
중요한 조합 존재Wq 단독 < Wq+Wv 조합 더 효율적
결론모델 업데이트는 고차원 필요 없다 → 작은 랭크로 충분히 학습됨

Subspaces imilarity between different

업로드중..

LoRA에서 rank = 8로 학습한 공간이 rank = 64로 학습한 공간 안에 얼마나 겹쳐 있을까?

  • 두 LoRA 행렬에 SVD 수행 → 오른쪽 singular vector 집합 U₈, U₆₄ 확보
  • U₈ 상위 i개 벡터 vs U₆₄ 상위 j개 벡터 subspace 겹침 정도 측정
  • similarity는 Grassmann 기반 metric 사용
식 구성요소
(U_{A_8}^{(i)})r=8 행렬 A에서 상위 i개의 singular vector로 만든 subspace
(U{A{64}}^{(j)})r=64 행렬 A에서 상위 j개 singular vector subspace
(‖·‖_F^2)두 subspace가 얼마나 겹치는지(Frobenius norm 기반)
나누기 (\min(i,j))i와 j 중 비교 가능한 최대 차원으로 정규화

--

similarity 값의미
1두 rank 공간이 거의 동일 → 정보 거의 같음
0완전 다른 방향 → 정보 공유 X

업로드중..

  • Rank 8과 64가 서로 거의 같은 top-1 방향을 공유함
  • 다른 방향은 overlap 거의 없음 → 추가 rank는 대부분 잡음
  • 결과적으로 적은 수의 방향(r=1~8)만으로도 충분히 학습된다

0개의 댓글