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
드디어 양자화 영역에 도달하면서 내용을 정리하게 되었습니다... 생각보다 생략된 언어 모델들이 많긴 한데, 최대한 챙겨가면서 정리하겠지만, 일단은 더 나아가야 하는게 더 중요하므로, 천천히 진행하겠습니다.
1. Abstract
대규모 언어 모델에서는 사전학습 후, 특정 도메인에 맞게 태스크 파인튜닝 하는 것이 일반적인 방법임, 그렇지만 GPT-3부터 초대형 언어모델의 모든 파라미터를 풀 파인튜닝을 한다는 것이 계산 비용 대비 비효율적이며, 컴퓨팅 비용이 너무 많이 발생(GPT-3는 대략적으로 175B)
LoRA 제안
- LoRA는 사전 학습 된 모델의 가중치를 고정하고, 저순위 행렬만 학습하는 방법
- 이를 통해 학습 해야 할 파라미터 수를 10,000배 감소 시키고 GPU 메모리 사용량을 3배 절감 시킬 수 있음.
LoRA의 장점
- RoBERTa, DeBERTa, GPT-2, GPT-3 등 다양한 모델에서 fine-tuning과 동등하거나 더 나은 성능을 보임.
- 적은 수의 파라미터로 효율적인 학습이 가능하여, 학습 속도가 매우 빠름
- 기존 Adapter 방법과 달리, 추가적인 추론, 지연이 없음.
추가 기여
- 언어 모델 적응(language model adaptation)에서 저순위(rank-deficient) 성질에 대한 실험적 분석을 제공.
- LoRA를 PyTorch 모델에 쉽게 통합할 수 있는 패키지를 공개, RoBERTa, DeBERTa, GPT-2의 구현 및 체크포인트 제공.

2. INTRODUCTION
기존의 자연어처리는 하나의 대규모 사전학습(Pre-Trained)된 언어 모델을 여러가지의 다운스트림 태스크에 응용에 적용시키는 것이 일반적인 패턴입니다.
업스트림? 다운스트림?
한국말 중에 이런 말이 있습니다. "윗 물이 맑아야 아랫 물도 맑다"
우리가 특정 도메인에 알맞게 언어모델을 훈련시키기 전에, 특정 언어에 최대한 적용할 수 있게 학습 시키는 것이 "업스트림 태스크" 입니다.
대표적인 기법으로는
1. 마스킹 기반 학습 : 특정 문장 내에 일부 단어를 "MASK"로 가리고 이를 예측하게 하는 훈련
2. 빈칸 추론 : 문장에서 중간 단어를 제거하고, 복원하도록 훈련
3. 다음 단어 예측 : 문장에서 다음에 올 단어를 예측하는 방식
4. 다음 문장 예측 : 2개의 문장을 주어지고 연속되는 문장인지의 여부를 판단하는 방식
등등.. 더 있지만 대표적인 기법만 설명하고 넘어가도록
그 후, 사전학습이 끝나면 그에 맞는 도메인을 위해 미세조정 작업을 합니다 그것을 "다운스트림 태스크" 라고 한다네요.
감정 분석, 번역, 요약, 질의응답 이런 작업들이 다운스트림 태스크라고 합니다.
파인튜닝의 문제점
모델의 크기가 커질수록, 모든 파라미터를 업데이트를 하는 것이 계산비용면에서나 효율적인 면에서나 좋지 못한것이 사실, 예를 들어서 GPT-3와 같은 모델들을 풀파인튜닝을 한다고 생각하면, 각 모델마다 약 1,750억개의 파라미터를 저장해야 하는 불상사가 생김.
최신 모델(GPT-4, GPT-5)이 계속 나오면, 이 문제는 점점 심각해짐.
즉, 모든 모델을 독립적으로 파인튜닝하면 저장 공간 및 운영 효율성이 크게 저하된다고 합니다. 논문에서는 inference latency(추론 시, 오래 걸리는 경우를 의미) 라며 설명하네요.
기존 해결책과 한계점
이 문제를 해결하기 위해 여러 방법들이 시도됨.
1. 일부 파라미터만 조정하는 방법
- 모델의 일부 파라미터만 업데이트 하거나, 외부 모듈을 추가하는 방식
- 예 : Adapters, Prefix-tuning 등
기존 방법들의 문제점은, inference latency(추론 시, 오래 걸리는 경우를 의미) 발생
- Houlsby et al. (2019), Rebuffi et al. (2017)에서는 Adapter 기반의 방법은 모델의 깊이를 증가시켜서 추론 속도를 증가시키는 문제를 발생한다고 언급
- Li & Liang (2021), Lester et al. (2021), Hambardzumyan et al. (2020), Liu et al. (2021) 등의 연구에 따르면, 입력 시퀀스 길이가 줄어드는 문제 발생.
결론적으로, 기존 방법들은 모델 운영의 효율성을 높이는 데는 도움이 되지만, 성능이나 속도를 희생해야 하는 문제가 있음.(Trade-Off)
LoRA(Low-Rank Adaptation)의 아이디어
기존 연구(Li et al., 2018a; Aghajanyan et al., 2020)에 따르면, 거대 모델의 학습된 가중치 변화는 본질적으로 저차원(low intrinsic dimension)에 위치함. 즉, 모델이 실제로 적응하는 방식은 일부 핵심적인 정보만 변경하는 것.
따라서, LoRA는 가중치 변화(∆W)를 직접 학습하는 대신에 저순위 행렬을 사용해서 변화 값을 근사하는 방법을 사용.
LoRA의 적용 방식
기존 모델의 가중치 W를 그대로 유지하면서, Adapter 과정을 통해 학습해야 하는 가중치 변화(∆W)를 저순위 행렬 A와 B로 분해 하여 업데이트
즉, ∆W = BA의 형태로 업데이트하여, 학습해야 할 파라미터 수를 크게 줄임.

각 기호들에 대한 대략적인 설명
- x : \(\mathbb{R}^{1 \text{ x } d}\)의 Input 값( \(\mathbb{R}\) : 집합기호 실수체, 여기서는 1행d열의 Matrix라고 이해합시다.)
- h : output
- \(W(\text{하늘색})\): Pre-Trained Weight(사전학습 된 파라미터)
- \(W \in \mathbb{R}^{d \times d}\) 즉, \(W\) 는 \(\mathbb{R}^{d \times d}\)에 속함 (여기서는 \(d \times d\) 크기의 행렬(Matrix)로 이해할 수 있음.)
- : LoRA Adaptor (Fine tuning 학습되는 파라미터, LoRA의 핵심!)
- \(A = \mathcal{N}(0, \sigma^2)\) 즉, \(A\)의 초기값은 정규분포(Gaussian noise)를 따름.
- \(B = 0\) : \(B\) 의 초기 값은 0
개념에 관한 기본적인 정의
- \(W\) 는 사전훈련을 통한 가중치로 용량이 매우 크고 파라미터 값이 크기에 이 내용을 풀 파인튜닝을 한다는 것은 많은 비용이 부과됨
- 따라서, Adapter라 불리는 \(A, B\) 를 추가시키고 위 부분만 학습 시킨다는 것이 LoRA의 메커니즘
- 이 때, \(W\) 는 고정하여 학습되지 않게끔 하도록 하기에, 기존 모델의 성능을 유지시킬 수 있음
- \(A, B\)의 파라미터수는 \(W\) 대비 매우 적음 (보통 1%미만)
- \(A, B\)는 Query, Key, Value, Output에 선택적으로 추가 시킬 수 있음.
스텝으로 나누는 연산 방법
Step 1.1) Input \(x\)를 \(W\)와 연산
$$
x \cdot W = \mathbb{R}^{1 \times d} \cdot \mathbb{R}^{d \times d} = \mathbb{R}^{1 \times d}
$$
Step 1.2) Input \(x\) 를 \(A, B\) 와 연산
$$
x \cdot A \cdot B = \mathbb{R}^{1 \times d} \cdot \mathbb{R}^{d \times r} \cdot \mathbb{R}^{r \times d} = \mathbb{R}^{1 \times d}
$$
Step 2) Step 1.1과 1.2의 결과를 더하여 \(h\) 를 출력
$$
\mathbb{R}^{1 \times d} + \mathbb{R}^{1 \times d} = \mathbb{R}^{1 \times d}
$$
1.1의 결과에 1.2의 결과를 더했기 때문에, 벡터 공간(Vector Space) 에서
임베딩된 토큰의 위치는 1.2의 결과만큼 오프셋(Offset)을 가지며 정렬 됩니다
즉, Base 모델의 결과와 다르게 출력될 수 있다는 의미입니다.
LoRA는 이러한 원리를 이용하여 효율적으로 Fine-Tuning 됩니다.
임의의 숫자를 대입하여 파라미터 수 감소 효과 확인
LoRA를 적용했을 때, 학습해야 하는 **파라미터 수가 얼마나 줄어드는지** 계산해봅시다.
여기서는 다음과 같이 가정하겠습니다:
\( d = 4096 \)
\( r = 16 \)
1️⃣ 기존 모델의 파라미터 수 계산
\( W \)의 크기:
$$
W \in \mathbb{R}^{4096 \times 4096}
$$
총 파라미터 수:
$$
4096 \times 4096 = 16,777,216
$$
2️⃣ LoRA 적용 시 파라미터 수 계산
LoRA에서는 **두 개의 저순위 행렬 \( A, B \)** 를 학습합니다.
\( A \)의 크기:
$$
A \in \mathbb{R}^{4096 \times 16}
$$
\( B \)의 크기:
$$
B \in \mathbb{R}^{16 \times 4096}
$$
총 파라미터 수:
$$
(4096 \times 16) + (16 \times 4096) = 65,536 + 65,536 = 131,072
$$
3️⃣ 기존 모델과 비교 (비율 계산)
$$
\frac{131,072}{16,777,216} = 0.0078125 \quad (\approx 0.78\%)
$$
즉, Base 모델 대비 학습되는 파라미터 수가 약 0.78%로 줄어듭니다
(정확히는 모든 레이어에 \( A, B \)를 추가하는 것이 아니기 때문에, 실제 감소율은 더 큼.)
📌 결론
LoRA를 사용하면 Base 모델의 성능을 어느 정도 유지하면서, 학습해야 하는 파라미터 수를 획기적으로 줄일 수 있습니다.
Terminologies and Conventions
LoRA 논문에서는 Transformer 아키텍처를 자주 참조하며, 다음과 같은 표기법을 사용합니다.
1️⃣ Transformer 레이어 차원
- 입력 및 출력 차원의 크기를 \( d_{\text{model}} \) 로 표기합니다.
2️⃣ Self-Attention 모듈의 주요 행렬
- \( W_q \) : Query Projection Matrix
- \( W_k \) : Key Projection Matrix
- \( W_v \) : Value Projection Matrix
- \( W_o \) : Output Projection Matrix
3️⃣ 가중치 관련 표기
- \( W \) 또는 \( W_0 \): 사전 학습된 가중치(Pre-trained weight matrix)
- \( \Delta W \) : 적응(adaptation) 중 누적되는 가중치 업데이트
4️⃣ LoRA 관련 표기
\( r \) : LoRA 모듈의 랭크(rank)
5️⃣ 최적화 및 피드포워드 네트워크
- 최적화 알고리즘: Adam 사용 [(Loshchilov & Hutter, 2019; Kingma & Ba, 2017)]
- MLP Feedforward Dimension
$$
d_{\text{ffn}} = 4 \times d_{\text{model}}
$$
이 표기법은 Vaswani et al. (2017), Brown et al. (2020) 에서 사용된 관례를 따릅니다.
Full Fine-Tuning vs. Parameter-Efficient Tuning
1️⃣ Full Fine-Tuning의 과정
풀 파인튜닝에서는 모델이 사전 학습된 가중치\( W_0 \) 에서 시작하여,
손실을 최소화하는 방향으로 반복적으로 업데이트됩니다.
이 과정은 조건부 언어 모델링(objective function)을 최적화하는 과정으로 표현됩니다
$$
\max_{\theta} \sum_{t=1}^{T} \log P(y_t | x, y_{<t})
\quad \text{(식 1)}
$$
즉, 각 다운스트림 태스크마다 새로운 가중치 집합을 학습해야 합니다.
2️⃣ Full Fine-Tuning의 문제점
- 모든 파라미터를 학습해야 하므로, 매우 비효율적
- 사전 학습 모델이 커질수록 (예: GPT-3 175B), 모델을 저장하고 배포하는 것이 어려움
- 각 다운스트림 태스크마다 독립적인 모델을 저장해야 하므로 메모리 사용량이 급격히 증가
예를 들어, GPT-3 (175B)의 경우,
각 태스크별로 1750억 개의 파라미터를 저장해야 함→ 매우 비효율적
3️⃣ LoRA의 접근 방식
LoRA는 더 적은 파라미터로 태스크별 적응(task-specific adaptation) 을 수행하는 효율적인 방법을 제안합니다.
즉, 태스크별로 학습되는 가중치 변화량 \( \Delta W \) 를
저순위 행렬(low-rank matrix)로 근사하여 최적화하는 방식입니다.
LoRA의 학습 과정은 다음과 같이 정의됩니다:
$$
\max_{\theta} \sum_{t=1}^{T} \log P(y_t | x, y_{<t}, W_0 + \Delta W)
\quad \text{(식 2)}
$$
즉, LoRA는
- 기존의 사전 학습된 가중치 \( W_0 \) 를 고정(freeze)
- 적응할 부분( \( \Delta W \) )만 저순위 근사(rank-decomposition) 행렬로 학습
이 방법은 계산량과 메모리 사용량을 크게 줄이면서도 성능을 유지할 수 있는 방법입니다.
4️⃣ LoRA의 효율성
GPT-3 (175B) 모델을 기준으로 했을 때,
LoRA를 적용하면 학습해야 하는 파라미터 수가 전체의 0.1% 이하로 감소할 수 있습니다.
즉,
✅ 풀 파인튜닝 대비 메모리 절약
✅ 계산량 감소 → 학습 속도 향상
✅ 태스크별 적응 가능 → 효율적 운영 가능
3. AREN’T EXISTING SOLUTIONS GOOD ENOUGH?
기존 솔루션은 충분한가?
기존 모델 적응 방법들의 한계점을 설명하는 부분입니다. 기존의 방법들은 어댑터 레이어(Adapter Layers) 추가 또는 프롬프트 최적화(Prompt Optimization) 같은 전략을 사용해왔지만, 대규모 모델이나 실시간 추론(inference) 환경에서는 여러 가지 문제가 발생한다고 설명하고 있습니다.
1️⃣ 문제 제기
모델 적응(Model Adaptation) 문제는 새로운 것이 아님.
전이 학습(Transfer Learning) 이 등장한 이후, 여러 연구들이 파라미터 효율성(Parameter Efficiency), 연산 효율성(Compute Efficiency)을 높이는 방향으로 발전해 왔음.
대표적인 두 가지 방법:
1. 어댑터 레이어(Adapter Layers) 추가
2. 입력 레이어 활성화(Activation) 최적화 (예: Prefix Tuning)
하지만, 대규모 모델 또는 실시간 추론 환경에서는 한계가 존재
2️⃣ 어댑터 레이어(Adapter Layers)의 한계
(1) 어댑터 레이어란?
Transformer의 각 블록에 추가적인 작은 레이어를 삽입하는 방식.
대표 연구들:
- Houlsby et al. (2019): Transformer 블록당 2개의 어댑터 레이어 추가
- Lin et al. (2020): Transformer 블록당 1개의 어댑터 레이어 추가 + LayerNorm 추가
(2) 어댑터 레이어의 문제점
- 장점: 학습해야 할 파라미터 수가 매우 적음 (기존 모델의 1% 이하)
- 문제점: 추론 속도(Inference Latency) 증가
대형 신경망은 하드웨어 병렬 연산을 사용해 속도를 유지함.
하지만 어댑터 레이어는 직렬(Sequential)로 연산해야 하므로 속도가 느려짐
특히 실시간 추론 환경(Online Inference) 에서는 추론 시간이 증가할 수 있음.
예제: GPT-2 모델을 싱글 GPU에서 실행할 때, 어댑터 레이어를 추가하면 지연시간(Latency)이 증가함 (Table 1 참고).
모델을 여러 GPU에 분할(Sharding)하는 경우, 추가 연산(AllReduce, Broadcast 등) 때문에 병렬화가 어려워짐.
3️⃣ 프롬프트 최적화(Prompt Optimization)의 한계
(1) 프리픽스 튜닝(Prefix Tuning)이란?
입력(prompt)의 일부를 학습 가능한 벡터로 변환하여 최적화하는 기법
(2) 프롬프트 최적화의 문제점
최적화가 어려움 (Optimization is Hard)
Prefix Tuning은 훈련 가능한 파라미터 수가 증가해도 성능이 일정하게 증가하지 않음
즉, 비선형적인 학습 곡선(Non-monotonic Performance) 을 가짐.
시퀀스 길이 감소 문제
프롬프트를 위한 공간을 확보하기 위해 실제 입력 시퀀스 길이가 줄어듬, 결과적으로 **다운스트림 태스크의 성능이 떨어질 가능성 증
LoRA는 이러한 문제를 해결하는 대안으로 제안됨
결론: 기존 방법들은 대규모 모델에서 비효율적
- 어댑터 레이어 → ✅ **파라미터 효율적**, ❌ 추론 속도 저하
- 프롬프트 최적화 → ✅ **저장 공간 절약**, ❌ 최적화 어려움 & 시퀀스 길이 감소
LoRA는 이러한 문제를 해결하기 위한 새로운 방법론

4. OURMETHOD
이 문장은 LoRA(Low-Rank Adaptation)의 기본 설계와 실용적인 장점을 설명하는 부분입니다
4-1. LoRA: Low-Rank Adaptation
LoRA는 딥러닝 모델, 특히 Transformer 모델의 특정 가중치 행렬을 저순위 행렬(Low-Rank Matrix)로 근사하여 업데이트하는 방법 입니다.
이 방식은 추가적인 추론 지연 없이(fast inference), 학습할 파라미터 수를 대폭 줄이면서도(full-rank 수준의 성능을 유지) 효율적인 학습을 가능하게 합니다.
1️⃣ LoRA의 기본 개념
딥러닝 모델의 밀집 레이어(Dense Layers) 는 행렬 곱셈을 수행하며, 대부분의 가중치 행렬은 풀 랭크(Full-Rank) 를 가짐.
하지만, 사전 학습된 언어 모델(PLM, Pre-trained Language Models)은 "내재적 차원(Intrinsic Dimension)"이 낮아도 충분한 학습 성능을 가짐 [(Aghajanyan et al., 2020)]
따라서, 가중치 업데이트( \( \Delta W \) )도 저차원 구조(low-rank structure)를 가질 가능성이 높음
이를 활용하여 가중치 변화를 저순위 행렬로 근사(Low-Rank Decomposition)하여 학습하는 것이 LoRA의 핵심 아이디어
2️⃣ LoRA의 가중치 행렬 업데이트 방식
(1) 기존 Fine-Tuning 방식
일반적인 Fine-Tuning에서는 모든 가중치 행렬을 직접 업데이트 함:
$$
W = W_0 + \Delta W
$$
- 여기서 \( W_0 \) 는 사전 학습된 가중치
- \( \Delta W \) 는 학습을 통해 조정되는 가중치 업데이트
(2) LoRA 방식
- LoRA에서는 \( \Delta W \) 를 두 개의 저순위 행렬 \( A, B \) 로 근사함:
$$
W = W_0 + BA
$$
여기서 \( A \) 와 \( B \) 는 **랭크 \( r \) 를 가지는 저순위 행렬**
\( A \in \mathbb{R}^{r \times k} \), \( B \in \mathbb{R}^{d \times r} \)
랭크 \( r \) 은 \( \min(d, k) \) 보다 작거나 같음
\( W_0 \) 는 고정(Freeze)되며, \( A \) 와 \( B \) 만 학습됨
(3) LoRA의 Forward Pass 과정
- LoRA를 적용한 경우, 기존 Fine-Tuning과 동일한 연산을 수행하면서도 업데이트 파라미터 수가 대폭 줄어듦
Forward Pass는 다음과 같이 변경됨:
$$
h = W_0 x + \Delta W x = W_0 x + BAx
$$
기존 가중치 \( W_0 \) 와 LoRA의 업데이트 \( BA \) 가 동일한 입력 \( x \) 와 곱해진 후, 좌표별로 더해짐.
즉, LoRA를 적용해도 모델의 구조는 변하지 않으며, 원래 모델과 동일한 방식으로 계산됨
3️⃣ LoRA의 학습 방식 (Training Details)
초기화 (Initialization)
\( A \) 는 정규 분포(Gaussian)로 랜덤 초기화
\( B \) 는 0으로 초기화하여 초기에는 \( \Delta W = 0 \) 이 되도록 설정
스케일링 (Scaling Factor)
\( \Delta W x = BAx \) 를 조정하기 위해,
$$
Wx \rightarrow \frac{1}{r} Wx
$$
즉, \( r \) 값에 따라 초기 학습률을 적절히 조정하여 하이퍼파라미터 튜닝 부담을 줄임.
4️⃣ LoRA vs. 기존 Fine-Tuning
(1) 기존 Fine-Tuning의 문제점
풀 랭크 업데이트(Full-Rank Update)필요 → 파라미터 수가 많고 메모리 사용량 증가
각 다운스트림 태스크마다 새로운 가중치를 저장해야 함 (GPT-3의 경우, 175B 파라미터 저장 필요)
(2) LoRA의 장점
✅학습 파라미터 수 대폭 감소
기존 Fine-Tuning 대비 메모리 사용량 절감
실험적으로 0.1%의 파라미터만 학습해도 원본 모델과 유사한 성능 달성 가능
✅ 원본 모델 구조 변경 없음
\( W_0 \) 는 고정되며, 원본 Transformer 구조를 변경하지 않음. 기존 모델을 다른 태스크로 빠르게 전환 가능 (Task Adaptation)
✅추론 속도 유지 (No Additional Inference Latency)
추론(Deployment) 시, \( W = W_0 + BA \) 를 미리 계산하여 저장 가능
즉, 추론 시 추가적인 연산 없이 기존 모델과 동일한 방식으로 연산 가능
Fine-Tuned 모델과 동일한 속도로 동작
5️⃣ LoRA의 일반화 (Generalization of Fine-Tuning)
기존 Fine-Tuning 방식은 일부 가중치만 학습하는 방식(Sparse Fine-Tuning)으로 확장 가능
LoRA는 더욱 일반화된 방식으로, \( \Delta W \) 를 풀 랭크로 설정하면 기존 Fine-Tuning과 동일해짐
즉, 랭크 \( r \) 값을 조절하면 Fine-Tuning의 표현력을 그대로 유지할 수 있음
6️⃣ 결론: LoRA는 기존 Fine-Tuning의 효율성을 극대화한 기법
💡 기존 Fine-Tuning의 핵심 문제점 → LoRA로 해결 가능
✅ 파라미터 수 0.1% 수준으로 줄이면서도 성능 유지 가능
✅ 추론 속도 저하 없음 (Inference Latency 유지)
✅ 기존 모델 구조 변경 없이 다양한 태스크 적용 가능
✅ Fine-Tuning의 일반적인 형태로 확장 가능 (랭크 \( r \) 조절 시 Full Fine-Tuning과 유사한 표현력 확보)
즉, LoRA는 기존 Fine-Tuning 대비 더 적은 비용과 자원으로 유사한 성능을 달성할 수 있는 강력한 방법론
4-2. APPLYING LORA TO TRANSFORMER
1️⃣ LoRA의 적용 범위
LoRA는 뉴럴 네트워크의 특정 가중치 행렬에 적용 가능
Transformer 모델의 Self-Attention 모듈과 MLP 모듈에서 적용 가능
Self-Attention 모듈 내 가중치 행렬 4개:
- \( W_q \)(Query Projection Matrix)
- \( W_k \) (Key Projection Matrix)
- \( W_v \) (Value Projection Matrix)
- \( W_o \) (Output Projection Matrix)
MLP 모듈 내 가중치 행렬 2개:
피드포워드 네트워크(Feedforward Network, FFN)의 두 개의 행렬, 하지만 LoRA 연구에서는 Self-Attention 가중치만 적응시키고 MLP 모듈은 학습하지 않음.
이유 파라미터 효율성과 단순성을 유지하기 위해서
MLP 및 LayerNorm의 적응(Adaptation)은 향후 연구로 남겨둠
2️⃣ LoRA의 실용적 이점 (Practical Benefits)
✅1. 메모리 & 저장 공간 절약
- Adam 옵티마이저를 사용하는 대형 Transformer 모델에서 VRAM 사용량을 최대 \( \frac{2}{3} \) 감소
- \( r \ll d_{\text{model}} \) 인 경우, 동결된 가중치의 옵티마이저 상태를 저장할 필요가 없음
- GPT-3 (175B) 모델의 학습 시, VRAM 사용량을 1.2TB → 350GB로 감소!
✅ 2. 체크포인트 크기 절감 (Checkpoint Size Reduction)
- \( r = 4 \) 일 때, Query & Value Projection 가중치만 적응시키는 경우:
- 체크포인트 크기가 350GB → 35MB (10,000배 감소!)
- 더 적은 GPU로 학습 가능하며, I/O 병목(bottleneck) 문제 회피 가능
✅ 3. 태스크 간 전환 비용 절감 (Efficient Task Switching)
LoRA를 사용하면 기존 모델 전체를 다시 로드할 필요 없이 LoRA 가중치만 교체하면 됨
VRAM에 사전 학습된 가중치를 유지한 채, 즉각적으로 다양한 태스크에 적용 가능
✅ 4. 학습 속도 향상 (Training Speedup)
GPT-3 (175B)에서 **풀 파인튜닝 대비 25% 빠른 학습 속도
대부분의 가중치는 동결(freeze)되므로, 계산량이 감소함
3️⃣ LoRA의 한계점 (Limitations of LoRA)
1. 서로 다른 태스크를 하나의 배치로 처리하기 어려움
- LoRA의 \( A, B \) 행렬을 \( W_0 \) 에 병합하면, 배치 내에서 서로 다른 태스크를 동시에 처리하는 것이 어렵다.
- 즉, 하나의 배치에서 서로 다른 LoRA 모듈을 적용하기 어려운 경우 발생.
2. 가중치 병합(W = W₀ + BA) 후, 동적 선택 불가능
LoRA는 추론 시 추가적인 지연(latency)이 없도록 \( W = W_0 + BA \) 를 미리 계산하여 저장할 수 있음.
하지만 이 방식은 한 번 병합된 후에는 태스크별로 동적으로 LoRA 모듈을 선택하는 것이 어려움
즉, 태스크 간 전환이 필요 없는 경우에는 유리하지만, 태스크별로 동적인 LoRA 선택이 필요하면 불리할 수 있음
💡 하지만, 이 한계는 LoRA 모듈을 병합하지 않고 동적으로 선택하는 방식으로 해결 가능
- 추론 속도가 중요한 경우 → \( W = W_0 + BA \) 를 미리 계산하여 저장하는 방식이 유리
- 다양한 태스크를 동시에 처리해야 하는 경우 → LoRA 모듈을 동적으로 선택하는 방법 사용 가능
4️⃣ 결론: LoRA는 효율적이지만, 일부 사용 사례에서 조정이 필요함
✅ VRAM 절약 → 대형 모델 학습 가능
✅ 체크포인트 크기 감소 → 저장 & I/O 비용 절감
✅ 태스크 간 전환 용이 → 하나의 모델로 여러 태스크 수행 가능
✅ 추론 속도 유지 → 추가적인 지연 없이 Fine-Tuned 모델과 동일한 속도 제공
❌ 배치 내에서 서로 다른 LoRA 모듈을 적용하는 것이 어려움
❌ 가중치 병합 후 동적 선택이 어렵지만, 필요하면 동적 선택 방식 사용 가능
EXPERIMENTS
위 부분들은 간략하게 정리하고 마무리하겠습니다.
논문의 5장(EMPIRICAL EXPERIMENTS)부터 7장(UNDERSTANDING THE LOW-RANK UPDATES) 까지는 LoRA의 실험 결과를 다루고 있으며, 주요 내용은 다음과 같습니다.
🔍 1. 실험 대상 모델 & 태스크
LoRA의 성능을 평가하기 위해 실험한 모델과 태스크:
- 자연어 이해(NLU) 모델:
- RoBERTa (Base & Large): GLUE 벤치마크에서 평가
- DeBERTa XXL: GLUE 벤치마크에서 평가
- 자연어 생성(NLG) 모델:
- GPT-2 (Medium & Large): E2E NLG Challenge 벤치마크에서 평가
- GPT-3 175B: WikiSQL, MNLI, SAMSum 데이터셋에서 평가
📌 2. 실험 내용 정리
(1) RoBERTa & DeBERTa에서 LoRA 성능 비교 (Table 2)
- GLUE 벤치마크에서 LoRA는 Full Fine-Tuning에 가까운 성능을 달성하면서도 학습해야 할 파라미터 수를 크게 줄임.
- 기존 어댑터(Adapter) 방법들과 비교하여 성능이 비슷하거나 더 우수함.

(2) GPT-2에서 LoRA 성능 비교 (Table 3)
- E2E NLG Challenge에서 LoRA는 기존 Adapter 방식보다 BLEU, ROUGE-L 등 평가 지표에서 높은 성능을 보임.
- 특히, Full Fine-Tuning과 거의 유사한 성능을 유지하면서도, 학습해야 할 파라미터 수는 훨씬 적음.

(3) GPT-3 175B에서 LoRA 성능 비교 (Table 4)
- LoRA는 GPT-3 175B에서 기존 Fine-Tuning보다 더 나은 성능을 달성하는 경우도 존재.
- WikiSQL, MNLI, SAMSum 데이터셋에서 Adapter, Prefix-Tuning 방법보다 높은 성능을 기록.

(4) LoRA가 적용되는 가중치 행렬 비교 실험 (Table 5)
- Self-Attention의 어떤 가중치에 LoRA를 적용하는 것이 가장 효과적인지 평가.
- 결과: Query & Value Projection (\(W_q, W_v\)) 에 LoRA를 적용하는 것이 가장 좋은 성능을 보임.

(5) LoRA의 랭크(r) 조정 실험 (Table 6)
- 랭크 r 를 조정하며 성능 비교.
- r=1일 때도 충분한 성능을 발휘할 수 있음.
- 하지만 모든 데이터셋에서 작은 rr 가 항상 최적은 아니며, 태스크에 따라 적절한 r 설정이 필요.

(6) 저순위 행렬 업데이트의 원리 분석 (Figure 2, 3 & Section 7)
- LoRA의 학습된 가중치가 실제로 저순위 구조를 따르는지 확인.
- 저순위 구조를 강제하는 것이 효과적이며, 이는 학습된 가중치가 원래 가중치와 강하게 연관되어 있음을 시사.



'딥러닝, 논문 리뷰' 카테고리의 다른 글
| [딥러닝, 논문리뷰] GPT3 - Language Models are Few-Shot Learners (1) | 2025.03.26 |
|---|---|
| [딥러닝, 논문리뷰] Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (1) | 2025.03.20 |
| [딥러닝, 논문리뷰] Attention Is All You Need 3 - Residual Connection, 나머지 내용들 (1) | 2025.03.04 |
| [딥러닝, 논문리뷰] Distilling the Knowledge in a Neural Network (2) | 2025.03.03 |
| [딥러닝] A Study of BFLOAT16 for Deep Learning Training - 부동소수점 (0) | 2025.02.26 |