요약
LoRA(Low-Rank Adaptation)는 사전학습된 모델의 가중치를 직접 수정하지 않고, 저랭크(low-rank) 행렬 분해를 통해 가중치 변화량을 효율적으로 학습하는 fine-tuning 기법이다.
본문
핵심 아이디어
기존 가중치 를 고정하고, 업데이트 를 두 개의 작은 행렬 와 의 곱으로 표현한다:
여기서:
- : 원본 가중치 (frozen)
- , : 학습 가능한 저랭크 행렬
- : 랭크 (보통 4, 8, 16 등 작은 값)
파라미터 효율성
예를 들어 이고 인 경우:
- 전체 fine-tuning: 파라미터
- LoRA: 파라미터
- 약 256배 파라미터 감소
초기화
- : 정규분포로 초기화
- : 0으로 초기화
- 학습 시작 시 이므로 원본 모델과 동일하게 시작
Rank란 무엇인가
행렬의 rank는 선형 독립인 행(또는 열)의 최대 개수, 즉 그 행렬이 표현하는 정보의 진짜 차원이다.
예: 아래 행렬은 모든 행이 의 배수이므로 본질적으로 1차원 정보만 담고 있다 → rank 1.
9개 숫자가 6개(3+3)로 표현 가능. LoRA의 분해와 같은 형태다.
기하학적으로 행렬은 차원 → 차원 선형 변환이고, rank 이면 출력이 무조건 차원 공간 안의 차원 부분공간에만 떨어진다. rank가 작을수록 표현 가능한 변화의 종류가 제한된다.
SVD와의 관계 — 동기는 맞지만 직접 쓰지는 않음
LoRA는 SVD(Singular Value Decomposition)에서 영감을 받았지만 SVD를 직접 사용하지 않는다.
| 행렬 분해 | 학습 방식 | |
|---|---|---|
| SVD | 기존 행렬을 사후 분해 | 학습 X (수학적 분해) |
| LoRA | 저랭크 형태를 사전 가정 | 를 직접 학습 |
비유:
- SVD 압축: 4K 영상을 찍은 다음 720p로 다운스케일 (full FT 후 압축 — 메모리 절약 X)
- LoRA: 처음부터 720p 카메라로 촬영 (를 명시적으로 만든 적 없음)
SVD가 제공한 직관: "어떤 행렬이든 큰 특이값 몇 개가 대부분의 정보를 담는다 (Eckart-Young 정리)." → 그러니 도 처음부터 저랭크로 가정해도 충분하지 않을까?
왜 작동하는가 — Intrinsic Rank 가설
Hu et al. (2021)의 핵심 가설:
"We hypothesize that the change in weights during model adaptation also has a low intrinsic rank"
거대 사전학습 모델을 특정 태스크에 적응시킬 때 실제로 필요한 변화는 저차원 부분공간에만 존재한다. 경험적으로 이면 full fine-tuning과 견줄 만한 성능이 나옴.
추론 시 merge — 추가 latency 0
학습 후 가중치를 합쳐버리면:
원본 forward pass와 동일한 형태가 되어 추론 시 추가 연산이 0이다. (, scaling factor)
이게 Adapter tuning(bottleneck 레이어 삽입) 대비 LoRA의 큰 실용적 장점.