LoRA는 “모델 전체를 학습하지 않고, 저차원(low-rank) 업데이트만 학습하는 효율적인 파인튜닝 방법”이다.
조금 더 정확히 말하면:
사전학습된 모델의 weight는 그대로 두고, 작은 저랭크 행렬만 추가로 학습해서 모델을 적응시키는 방법
여기서 적응이란, 모델 학습 이후 특정 도메인에 맞춰 fine-tuning 하거나 새로운 태스크에 transfer learning 하는 것
LLM은 기본적으로
이때, Pre-training 된 모델을 특정 태스크에 맞게 파인튜닝 하는 과정을 domain adaptation이라 한다.
그래서 나온 방향으로 “효율적인 adaptation”. 즉, PEFT(Parameter Efficient Fine-Tuning)
공통적으로, “모델은 그대로 두고 adaptation만 싼 비용으로 하자”가 모토이다.
(추가적으로, 너무나도 다른 도메인에 LLM을 adaptation하려고 한다면 Catastrophic Forgetting이라는 파괴적 망각 현상이 발생한다.)

그림과 같이 Transformer layer에 adapter layer를 추가하여 adapter만 학습하는 방법이 있지만, 이는 직렬구조로서 multi head attention의 결과값을 받아야만 adapter에서 연산을 할 수 있는 의존성이 있다. 또한, inference하는 과정에서 추가적인 비용이 발생한다.
모델은 건드리지 말고, 입력만 조작하자! 라는 방식이 나왔다.
예를 들어, LLM에게 번역을 시킬 때 “한국어로 번역할거야”라는 입력을 제일 앞에 주면 그 모델은 번역을 곧 잘한다. 따라서, 번역을 하라는 Prefix(접두사)를 모델에게 항상 붙이면, 그 모델은 번역에 특화된 모델이 된다.
이 방향의 발전 방향은 Prefix를 사람이 주는 프롬프트가 아니라 모델이 학습하게 하는 것이다.
[ v1, v2, v3, v4 ] + "Hello"
Translate과 같은 토큰이 아니라, v1, v2, v3, v4 같은 인간은 이해할 수 없지만, LLM은 이해할 수 있는 토큰을 학습하는 것이다. 이후에도 Attention Layer에 Key, Value를 추가하여 Prefix 학습의 효과를 내는 방법도 있지만, 결론적으로 Prefix tuning은 힌트를 속삭이는 방법일 뿐, 모델 자체를 특정 태스크에 특화시켜주지는 않는 한계가 있다.
Domain adaptation에 필요한 변화는 사실 low-lank 였다는 연구 결과와 함께 LoRA는 등장했다.
Rank Recap : 행렬의 일차독립인 행 또는 열의 최대 개수,
실제 LLM 모델 $W$의 행렬 차원을 $d$ 라고 할 때, 풀 파인튜닝시 가중치 변화량인 $\Delta W$ 의 실질적인 중요한 변화는 low-rank subspace에 집중되어 있었다.
조금 더 쉽게 말하면,
LoRA는 Low Rank만을 domain adaptation하면서도, full fine-tuing 수준의 표현력을 유지하고, 비용을 극단적으로 줄이기 위해 등장했다.

기존 모델의 가중치 $W$ 는 그대로 유지하되, 저랭크 행렬 $B, A$ 를 추가하여 이 두개의 행렬만을 학습하는 방식이다. Low-Rank 행렬은 두 개의 작은 행렬의 곱으로 항상 표현할 수 있기 때문에, $ΔW=BA$ 로 치환한다. B는 초기값 0으로 설정하고, A는 가우시안 분포를 기반으로 초기화한다.