LoRA: Low-Rank Adaptation of Large Language Models
Jan 17, 2026

개요
- 점점 모델들이 커지면서 full model을 fine-tuning하는게 어려워짐
- 기존 언어 모델들의 학습 목표가 아래라면
- Φ: 모델 전체 파라미터
- max Φ: 뒤의 수식을 최대로 하는 Φ를 찾아라
- x: auto regressive model의 인풋 (프롬프트, 질문, …)
- y: auto regressive model의 아웃풋 (답변, 번역, …)
- (x, y)는 정답쌍
- auto regressive 모델이기 때문에 t전까지의 출력값이 다시 인풋으로 들어감
- 그랬을 때 정답 yt가 나올 확률이 높아야함
- 곱을 합으로 바꾸기 위해 log를 취함

- LoRA의 학습 목표는 이러함
- Φ0가 초기 파라미터라면, tuning을 통해 Φ의 변화량인 ΔΦ를 더해줌 (ㅊ+ΔΦ)
- 근데 ΔΦ은 Φ0보다 적은 수의 파라미터인 Θ을 통해 찾을 거임
- 예를 들어 GPT-3 175B LoRA로 튜닝할 때 Θ은 전체 파라미터의 0.01%

기존 접근 방법들은 별로였나?
- 기존에는 transformer 블록 안에 bottleneck 구조의 작은 네트워크를 끼어넣어서, 본체 가중치는 프리징하고 어댑터 파라미터만 학습시킴

- 그런데 이 방식은 파라미터 증가나 FLOPS 증가는 적어도 latency를 증가시킴
- 가능한 GPU를 꽉 채워서 활용하는 것이 좋은데, 어댑터의 보틀넥을 사용하면 그게 잘 안 된다고 함
- 아마도 기존 연산들은 여러 layer를 하나로 합쳐서 연산하는 fuse가 가능한데 bottleneck은 그게 안 되어서 순차적으로 처리해야해서 그게 병목이 되는 듯 함
- 근데 온라인 상황에서는 batch size=1인 경우가 많은데 그 경우 순차진행으로 인한 latency가 더 심해짐
- 큰 모델일 경우 모델 샤딩을 하게 되는데 어댑터는 allReduce, broadecating과 같이 동기화를 요하는 처리들이 필요해서 latency를 느리게 한다고 함
LoRA
- neural network에서는 행렬곱 연산을 많이 하는데, 이 행렬은 보통은 full-rank임. 그런데 선행 연구에서 언어 모델의 weight matrix가 low “instrisic dimension”을 가지고 있음을 보여줌
- 그래서 weight 변화값 ∆W을 low rank로 decomposition할 수 있음
- 처음이 A는 랜덤 가우시안 initialization을 하였고, B는 0으로 초기화 시킴. 그래서 학습 초기에는 BA는 0임.
- r을 크게 할 수록 low rank에서 full rank가 되기 때문에(Parameter-Efficient Fine-Tuning → full fine tuning), 연속적인 공간에서 어느정도 학습시킬지 설정할 수 있음



LoRA의 장점
- 원래 모델이 h=W0x라면, LoRA는 학습 중에 h=(W0+BA)x를 만드는 것임
- 따라서 latency가 더 늘어나지 않음
- 학습 중일 때는 BA를 따로 가지고 있어야 하지만, inference시에는 W0+BA을 합쳐서 다시 W의 형태로 만들면 됨
- weight의 생김새는 동일하기 때문에 기존 모델 구조와 똑같아서 latency가 더 느려지지 않음
- downstream task를 바꾸기 좋음
- 예를 들어 W = W0 + BA를 사용중이었는데 원복하고 싶다면 W - BA하면 됨
- 새로 튜닝시켜 이 weight를 반영시켜주고 싶다면 W0+B’A’를 해주면 됨
- 트랜스포머에 적용 시킬 때는 효율성을 위하여, MLP는 그대로 두고 attention weight에만 LoRA를 적용했다고 함
- 이렇게 제한했을 때
- GPT-3 175B에서 학습 중 VRAM 소비를 1.2TB → 350GB로 줄일 수 있음
- r=4이고 query와 value projection 행렬만 적응시키면,
- 체크포인트 크기를 약 10,000배 감소( 350GB → 35MB )시킬 수 있음
실험 결과

- 더 적은 양의 파라미터를 학습시킴에도 불구하고 Full Tuning(FT)와 비슷하거나 더 높은 성능 보여줌
- FT (Full Fine-tuning): 전체 파라미터 학습 (125.0M)
- BitFit (Bias-only): bias만 학습 (0.1M)
- Adptᴰ (AdapterDrop): 일부 adapter layer를 drop한 변형 (0.3M)
- Adptᴾ (AdapterP): Pfeiffer 계열 설계의 adapter (0.9M)
- LoRA: 저랭크 행렬쌍을 기존 가중치에 병렬로 추가 (0.3M)


Low Rank Update 이해하기
- 만약 리소스가 부족하여 일부 트랜스포머 웨이트에만 LoRA를 적용해야한다면 어디에 해야 할까?
- GPT-3 175B모델이고, 최대 18M만 업데이트 가능하도록 제한
- ∆Wq나 ∆Wk를 각각 r=8로 했을 땐 성능 저하가 있었는데 Wq와 Wv를 둘다 업데이트한다면 r=4만 해도 성능이 좋음

- r을 몇으로 지정할까?
- r=2일 때도 성능이 좋아서, update 할 부분은 매우 작은 intrinsic rank임을 의미
- 하지만 모든 task에서 이런 양상은 아닐 것으로 생각함. 예를 들어 완전 다른 언어로 tuning한다면 r이 full tuning에 가깝게 커져야할 수도 있음


- ΔW는 W와 비교
- over-parametrized models in fact reside on a low intrinsic dimension
Share article