일러두기 (Disclaimer)
본 글은 AI의 도움을 받아 작성되었습니다. 최대한 정확한 정보를 전달하기 위해 검수를 거쳤으나, AI 모델의 특성상 내용에 일부 오류나 부정확한 정보가 포함될 수 있습니다. 따라서 실제 논문의 상세한 수식이나 실험 세부 조건 등은 반드시 원문을 직접 확인하시기 바랍니다.
논문 링크 : 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
초록 (Abstract)
자연어 처리(Natural Language Processing) 분야의 중요한 패러다임은 일반적인 도메인 데이터에 대해 대규모 사전 학습(Pre-training)을 수행한 후, 특정 작업이나 도메인에 맞게 적응(Adaptation)시키는 것으로 구성됩니다. 우리가 더 큰 모델을 사전 학습함에 따라, 모델의 모든 파라미터를 재학습하는 전체 미세조정(Full fine-tuning)은 현실적으로 실행하기 어려워지고 있습니다. 1,750억 개의 파라미터를 가진 GPT-3 175B를 예로 들면, 각각 1,750억 개의 파라미터를 갖는 독립적인 미세조정 모델 인스턴스들을 배포하는 것은 비용 측면에서 엄청난 부담을 줍니다.
이에 본 연구는 저랭크 적응(Low-Rank Adaptation, LoRA)을 제안합니다. 이 방식은 사전 학습된 모델의 가중치를 동결하고 트랜스포머(Transformer) 아키텍처의 각 층에 학습 가능한 랭크 분해 행렬(Rank decomposition matrices)을 주입하여, 다운스트림 작업(Downstream tasks)을 위한 학습 가능 파라미터 수를 크게 줄입니다. Adam 옵티마이저로 미세조정된 GPT-3 175B와 비교할 때, LoRA는 학습 가능한 파라미터 수를 10,000배 줄이고 GPU 메모리 요구량을 3배 감소시킬 수 있습니다.
학습 가능한 파라미터가 더 적고 훈련 처리량(Throughput)이 더 높으며 어댑터(Adapter)와 달리 추가적인 추론 지연 시간(Inference latency)이 없음에도 불구하고, LoRA는 RoBERTa, DeBERTa, GPT-2, GPT-3의 모델 품질 면에서 미세조정과 동등하거나 더 나은 성능을 수행합니다. 또한 언어 모델 적응에서의 랭크 결핍(Rank-deficiency)에 대한 경험적 조사를 제공하여 LoRA의 효능을 조명합니다. 본 연구진은 PyTorch 모델과 LoRA의 통합을 촉진하는 패키지를 공개하며, RoBERTa, DeBERTa, GPT-2에 대한 구현 및 모델 체크포인트를 제공합니다.
1. 한줄 요약 & 3줄 핵심 (Executive Summary)
사전 학습된 거대 모델의 원본 지식은 그대로 보존하면서, 변화량을 근사하는 매우 작은 저랭크 행렬만을 훈련하여 새로운 작업을 완벽하게 수행하게 만드는 고효율 파라미터 미세조정 기법입니다.
- 기존의 문제점 (Pain point): 거대 언어 모델을 새로운 작업에 맞게 미세조정하려면 전체 파라미터를 복제 및 훈련해야 하므로 천문학적인 컴퓨팅 자원과 저장 공간이 요구되며, 기존의 경량화 대안들은 추론 속도를 늦추거나 입력 시퀀스 길이를 제한하는 단점이 있습니다.
- 이 논문의 해결책 (Solution): 신경망의 기존 가중치는 업데이트하지 않고 고정한 상태에서, 작업 적응 시 발생하는 가중치 변화량을 두 개의 작은 행렬의 곱으로 분해하여 병렬로 주입하고 이들만 최적화하는 방식을 도입했습니다.
- 달성한 성과 (Key Result): GPT-3 175B 모델 기준 훈련 대상 파라미터를 10,000분의 1로 축소하고 GPU 메모리 사용량을 1.2TB에서 350GB로 감소시켰으며, 훈련된 작은 행렬을 기존 가중치에 병합(Merging)함으로써 실제 서비스 배포 시 추가적인 추론 지연 시간을 없앴습니다.
2. 들어가며: 왜 이 연구가 필요했나? (The "Why")
딥러닝 기반의 자연어 처리 생태계는 트랜스포머 아키텍처의 성공 이후 대규모 코퍼스를 이용한 '사전 학습'과 특정 목적에 맞추는 '미세조정'이라는 이원화된 패러다임으로 정착했습니다. 과거 모델의 파라미터 규모가 수백만에서 수억 개 수준에 머물렀을 때, 연구자들은 하위 작업(Downstream task)의 목표를 달성하기 위해 모델 내부의 모든 가중치를 다시 계산하고 업데이트하는 전체 미세조정(Full fine-tuning) 방식을 당연하게 받아들였습니다.
하지만 모델의 규모가 폭발적으로 팽창하면서 이 전통적인 방식은 한계에 직면했습니다. 오픈AI(OpenAI)의 GPT-3 모델은 1,750억 개의 파라미터를 지니고 있습니다. 이 거대한 모델을 16비트 부동소수점(FP16) 정밀도로 메모리에 적재하는 데만 약 350기가바이트(GB)의 비디오 메모리(VRAM)가 요구됩니다. 만약 이 모델의 전체 파라미터를 미세조정하려면, 최적화를 돕는 Adam 옵티마이저의 모멘텀(Momentum)과 분산(Variance) 상태 변수들까지 모두 메모리에 유지해야 합니다. 결과적으로 단 하나의 모델을 훈련하는 데 1.2테라바이트(TB) 이상의 VRAM이 필요하게 되며, 이는 일반적인 연구 환경이나 기업의 하드웨어 인프라로는 감당하기 힘든 수치입니다.
더 큰 장벽은 훈련 이후의 서비스 배포(Deployment) 단계에서 나타납니다. 기업이 의료, 법률, 고객 응대 등 수십 개의 다양한 도메인에 특화된 모델을 서비스하려면, 각 작업마다 350GB에 달하는 거대한 모델 인스턴스를 개별적으로 복제하여 스토리지에 보관해야 합니다. 작업이 100개라면 35TB의 저장 공간이 필요하며, 사용자의 요청이 들어올 때마다 이 무거운 모델들을 메모리에 올리고 내리는 과정은 막대한 지연 시간과 비용을 초래합니다.
이러한 물리적, 경제적 한계를 극복하기 위해 학계에서는 파라미터 효율적 미세조정(Parameter-Efficient Fine-Tuning, PEFT) 기법들을 연구해왔습니다. 그러나 기존에 널리 사용되던 방식들은 뚜렷한 단점을 가지고 있었습니다.
대표적인 접근법 중 하나는 어댑터(Adapter) 층을 추가하는 방식입니다. 기존 트랜스포머의 층과 층 사이에 병목 구조(Bottleneck architecture)를 가진 작은 훈련 가능 모듈을 끼워 넣는 방법입니다. 이 방식은 업데이트해야 할 파라미터 수는 크게 줄여주지만, 데이터가 신경망을 통과할 때 반드시 이 추가된 어댑터 층들을 순차적으로 거쳐야만 합니다. 딥러닝 모델의 빠른 추론 속도는 수많은 연산을 병렬로 처리하는 데서 오는데, 순차적인 계층의 추가는 이러한 하드웨어 병렬성을 방해합니다. 특히 사용자의 요청을 실시간으로 하나씩 처리해야 하는 온라인 추론 환경(배치 크기가 작은 환경)에서는 이 병목 현상으로 인해 추론 지연 시간(Inference latency)이 상당 폭 증가하는 치명적인 문제가 발생합니다.
또 다른 대안은 프롬프트 튜닝(Prompt Tuning)이나 프리픽스 튜닝(Prefix Tuning) 방식입니다. 이 기법들은 모델 내부의 가중치는 고정한 채, 사용자가 입력하는 텍스트 시퀀스의 앞부분에 학습 가능한 가상의 단어(Soft tokens)들을 배치하여 모델의 출력을 유도합니다. 이 방식은 파라미터를 거의 추가하지 않는다는 장점이 있지만, 최적화 과정이 불안정하여 학습이 까다롭습니다. 더욱 근본적인 문제는 트랜스포머 모델이 한 번에 처리할 수 있는 최대 시퀀스 길이(Context window)가 정해져 있다는 점입니다. 훈련 가능한 가상 토큰들이 시퀀스의 일정 공간을 영구적으로 차지해버리기 때문에, 정작 사용자가 입력할 수 있는 실제 문장의 길이가 줄어들어 긴 문서를 다루는 작업에 불리하게 작용합니다.
연구자들은 훈련 시의 자원 소모를 혁신적으로 줄이면서도, 추론 속도를 지연시키지 않고, 사용자의 입력 공간을 침해하지 않는 완벽한 구조적 대안을 찾아야만 했습니다. 본 연구는 바로 이러한 척박한 배경 속에서, 근본적인 수학적 관찰을 통해 돌파구를 마련한 결과물입니다.
3. 이 논문의 뿌리 (Key Reference)
LoRA라는 직관적이고 실용적인 기법이 등장하기 위해서는, 깊은 신경망이 데이터를 학습하는 다차원 공간의 본질적 특성을 규명한 선행 연구들이 필요했습니다. 이 논문은 특히 두 편의 핵심 논문에서 가장 큰 영감을 받아 그 개념을 비판적으로 계승하고 발전시켰습니다.
- Measuring the Intrinsic Dimension of Objective Landscapes (Li et al., 2018) 이 논문은 딥러닝 모델의 과적합과 매개변수 효율성을 이해하는 데 중요한 토대를 마련했습니다. Li 등은 "수백만 개의 파라미터를 가진 거대한 신경망이 목적 함수를 최소화하여 정답을 찾아갈 때, 과연 그 모든 파라미터 차원을 다 활용하는가?"라는 의문을 제기했습니다. 연구진은 훈련 과정에서의 파라미터 공간(Objective landscape)이 갖는 '본질적 차원(Intrinsic Dimension)'을 측정하는 방법론을 고안했습니다. 실험 결과, 거대하게 과적합된(Over-parameterized) 신경망이라 하더라도, 모델이 만족스러운 해결책에 도달하기 위해 실질적으로 필요로 하는 파라미터 공간의 차원은 전체 파라미터 수에 비해 극히 낮다는 사실을 발견했습니다. 높은 차원의 "더미 파라미터"들은 최적화 과정이 해답을 더 쉽게 찾도록 돕는 역할을 하지만, 최종적인 해답의 형태는 낮은 본질적 차원의 부분 공간(Subspace)에 존재한다는 의미입니다. LoRA 연구진은 이 통찰로부터 모델의 일부 구조만을 훈련해도 전체를 훈련한 것과 같은 효과를 낼 수 있다는 이론적 확신을 얻었습니다.
- Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning (Aghajanyan et al., 2020) 이 논문은 앞선 본질적 차원의 개념을 자연어 처리 모델의 '미세조정(Fine-tuning)'이라는 구체적인 맥락에 직접 적용하여 더 깊은 통찰을 이끌어냈습니다. Aghajanyan 등은 언어 모델이 더 거대해지고 다양한 데이터로 훈련(Pre-training)될수록, 특정 다운스트림 작업으로 미세조정할 때 요구되는 본질적 차원이 오히려 더 낮아진다는 흥미로운 반비례 법칙을 경험적으로 증명했습니다. 이들은 3억 5천만 개의 파라미터를 가진 RoBERTa Large 모델을 문장 의미 관계 파악 작업(MRPC)에 미세조정하는 실험을 진행했습니다. 모델 전체를 업데이트하는 대신, 무작위로 투영된 단 207개의 파라미터(전체의 0.00006% 미만) 차원만 최적화했음에도 불구하고 전체 파라미터 훈련 성능의 90%를 달성하는 성과를 보여주었습니다.
이 두 연구는 딥러닝 모델이 극도로 낮은 본질적 차원에서 학습될 수 있음을 증명했지만, 이를 상용 시스템에 쉽게 적용할 수 있는 구체적이고 효율적인 아키텍처로 구현하지는 못했습니다. LoRA 연구진은 Aghajanyan 등(2020)의 결론을 핵심 모티브로 삼아 구체적인 가설을 세웠습니다. "사전 학습된 모델이 새로운 작업에 적응할 때 발생하는 가중치의 변화량(Change in weights) 역시 본질적으로 매우 낮은 랭크(Intrinsic rank)를 가질 것이다."라는 가설입니다. 기존 연구들이 무작위 투영(Random projection)과 같이 연산이 복잡한 방식을 사용해 본질적 차원을 증명하는 데 그쳤다면, LoRA는 가중치 행렬 자체를 선형대수학의 랭크 분해(Rank decomposition) 구조로 대체함으로써 누구나 쉽게 구현할 수 있는 산업계의 표준 기술로 전환시켰습니다.
4. 핵심 아이디어: 무엇이 다른가? (The "Aha!" Moment)
LoRA의 핵심 아이디어를 쉽게 이해하기 위해 일상적인 비유(Analogy)를 들어 설명해 보겠습니다.
세계 최고 수준의 능력을 갖춘 마스터 셰프(사전 학습된 거대 모델)가 있다고 가정해 보겠습니다. 이 셰프는 수십 년간 전 세계의 다양한 요리법을 마스터하여 어떤 요리든 훌륭하게 만들어낼 수 있는 방대한 지식(수백억 개의 가중치 $W_0$)을 머릿속에 담고 있습니다. 이제 이 셰프를 고용하여 특정 지역의 '매운 떡볶이'라는 단일 메뉴(다운스트림 작업)만을 전문적으로 만들게 하려고 합니다.
전통적인 전체 미세조정(Full fine-tuning) 방식은 이 셰프의 머릿속에 있는 수십 년 치의 요리 지식 전체를 매운 떡볶이에 맞게 근본적인 구조부터 다시 개조하고 재학습시키는 것과 같습니다. 이는 셰프에게 극심한 피로를 주며, 시간과 비용이 막대하게 소모되는 비효율적인 작업입니다.
반면 LoRA의 발상은 발상의 전환을 보여줍니다. 셰프의 방대한 머릿속 지식(가중치 $W_0$)은 변경하지 않고 그대로 고정(Freeze)해 둡니다. 대신 셰프에게 얇은 '떡볶이 특화 레시피 메모장(저랭크 행렬 $\Delta W$)'을 손에 쥐여줍니다. 셰프가 주방에서 요리(추론)를 할 때, 본인의 방대한 기존 지식과 작은 메모장의 지시사항을 동시에 읽고 두 결과를 결합(Sum)하여 최종 요리를 완성하도록 하는 것입니다. 메모장이 매우 얇기 때문에 새로운 요리를 가르치는 데(학습) 비용과 시간이 거의 들지 않습니다. 만약 이 셰프에게 내일은 '크림 파스타'를 만들게 하고 싶다면, 기존의 방대한 지식은 그대로 둔 채 떡볶이 메모장만 빼앗고 '파스타 특화 메모장'으로 교체해 주면 됩니다.
이를 신경망의 수학적 및 구조적 원리로 풀어보면 놀라울 정도로 직관적입니다.
딥러닝 신경망의 각 층(Layer)은 근본적으로 입력되는 벡터 $x$를 가중치 행렬 $W$와 곱하여 다른 차원으로 변환하는 선형 연산을 수행합니다. 사전 학습이 완료된 기존 가중치를 $W_0$라고 하고, 특정 작업에 맞게 미세조정이 완료되어야 할 목표 가중치를 $W_0 + \Delta W$라고 정의합니다. 전통적인 미세조정에서는 변화량 $\Delta W$ 행렬의 모든 요소를 하나하나 업데이트해야 하므로, 기존 가중치 $W_0$의 크기와 동일한 수억 개의 파라미터를 최적화해야 합니다.
하지만 선행 연구에서 살펴본 바와 같이, 특정 작업에 적응하기 위해 필요한 가중치 변화량 $\Delta W$는 실제로는 매우 낮은 차원에 그 핵심 정보가 밀집해 있습니다. 선형대수학에 따르면 행렬은 더 작은 두 행렬의 내적으로 분해(Decomposition)할 수 있습니다. LoRA는 이 원리를 이용하여 거대한 변화량 행렬 $\Delta W$를 두 개의 작은 훈련 가능 행렬 $A$와 $B$의 곱으로 근사하여 표현합니다. 즉, $\Delta W = B \times A$ 의 구조를 갖게 됩니다.
행렬의 차원을 살펴보면 파라미터가 축소되는 정도를 체감할 수 있습니다.
- $W_0 \in \mathbb{R}^{d \times k}$ (고정된 기존 거대 가중치 행렬)
- $B \in \mathbb{R}^{d \times r}$ (훈련 가능한 첫 번째 작은 행렬)
- $A \in \mathbb{R}^{r \times k}$ (훈련 가능한 두 번째 작은 행렬) 여기서 가장 중요한 핵심은 랭크 $r$을 기존 행렬의 차원 $d$나 $k$에 비해 매우 작게(예: $r=1, 2, 4, 8$) 설정한다는 점입니다.
예를 들어, 입력과 출력 차원 $d, k$가 각각 10,000인 모델을 미세조정한다고 가정해 보겠습니다. 기존 방식은 $10,000 \times 10,000$ 크기의 변화량 행렬을 학습해야 하므로 1억 개의 파라미터가 필요합니다. 반면 LoRA를 적용하여 랭크 $r$을 4로 설정하면, 행렬 $A$는 $4 \times 10,000$, 행렬 $B$는 $10,000 \times 4$의 크기를 가지게 됩니다. 두 행렬의 파라미터 합은 $40,000 + 40,000 = 80,000$개에 불과합니다. 1억 개의 파라미터를 최적화해야 했던 기존 방식과 비교할 때, 훈련해야 할 파라미터가 1,250분의 1 수준으로 극적으로 감소하는 발상의 전환이 완성된 것입니다.
5. 작동 원리: 어떻게 돌아가는가? (The "How")
구조적인 철학을 바탕으로, 데이터가 실제로 신경망 네트워크에 입력되어 출력될 때까지의 흐름(Flow)과 훈련 세부 메커니즘을 단계별로 심층 분석해보겠습니다. LoRA는 주로 트랜스포머 아키텍처의 심장인 '자기 주의(Self-Attention)' 모듈의 가중치 행렬에 적용됩니다.
- 데이터의 분기 및 병렬 처리: 토큰화된 입력 데이터 벡터 $x$가 트랜스포머의 특정 층에 진입합니다. 이 데이터는 내부적으로 동일하게 복제되어 병렬로 두 갈래의 계산 경로를 동시에 통과하게 됩니다.
- 경로 1 (기존 고속도로): 입력값 $x$는 고정된 사전 학습 가중치 $W_0$ 함수에 입력되어 곱셈 결과를 반환합니다 ($W_0 x$). 이 연산은 기존 모델이 오랜 훈련을 통해 축적한 보편적인 언어 지식과 패턴 인식 능력을 그대로 활용하는 과정입니다. 이 경로는 파라미터가 동결(Frozen) 상태이므로 역전파(Backpropagation) 단계에서 기울기(Gradient) 계산이나 가중치 업데이트 연산이 생략되어 훈련 속도를 높이는 핵심 요인이 됩니다.
- 경로 2 (LoRA 우회로): 입력값 $x$는 먼저 랭크가 $r$로 설정된 행렬 $A$와 곱해져, 고차원의 입력 벡터를 매우 낮은 차원(예: 4차원)의 공간으로 강하게 압축합니다 ($A x$). 이후 압축된 정보는 다시 행렬 $B$와 곱해져 원래 트랜스포머 층이 요구하는 출력 차원으로 팽창 복원됩니다 ($B (A x)$). 이 압축과 복원의 우회 과정에서 모델은 타겟 다운스트림 작업(예: 요약, 의료 문서 분석 등)에 특화된 새로운 지식 패턴을 추출하고 덧붙이게 됩니다.
- 초기화(Initialization)의 마법: 새로운 층이나 가중치를 추가할 때 가장 위험한 현상은 초기 훈련 단계에서 무작위 값들이 기존의 안정적인 네트워크 출력을 요동치게 만들어 학습을 붕괴시키는 것입니다. LoRA는 이를 방지하기 위해 직관적이면서도 안전한 가중치 초기화 전략을 사용합니다.
- 입력을 압축하는 행렬 $A$는 무작위 가우시안 분포(Random Gaussian) 값으로 초기화합니다.
- 차원을 복원하는 행렬 $B$는 완전한 0(Zero) 행렬로 초기화합니다. 이렇게 설정하면 모델 훈련의 첫 번째 스텝(Epoch 0)에서 우회로 행렬 $B \times A$의 곱셈 결과는 완벽한 0이 됩니다. 즉, 새롭게 추가된 경로가 0을 반환하여 기존 경로의 값에 아무런 영향도 주지 않기 때문에, 네트워크의 최종 출력은 기존 사전 학습 모델의 출력($W_0 x$)과 한 치의 오차도 없이 동일하게 유지됩니다. 이를 통해 모델은 훈련 초기에 기존의 지식이 무너지는 것을 방지하고, 매우 안정적인 상태에서 부드럽게 최적화를 시작할 수 있습니다.
- 스케일링(Scaling)과 합산: 우회로를 통과해 산출된 결과값 $B A x$는 그대로 사용되지 않고, 별도의 스케일링 인자 $\frac{\alpha}{r}$를 곱하여 그 강도를 조절합니다. 여기서 $\alpha$는 하이퍼파라미터 상수이며, $r$은 설계자가 설정한 랭크 크기입니다. 이 스케일링 연산은 새로운 작업의 지식을 기존 모델의 지식에 얼마나 강한 볼륨으로 혼합할지를 결정하는 조절기 역할을 수행합니다. 마지막으로, 기존 고속도로를 통과한 벡터값과 우회로를 통과해 스케일링된 벡터값을 같은 좌표끼리 단순히 더해줍니다(Coordinate-wise sum). 이로써 최종 출력 $h = W_0 x + \frac{\alpha}{r} B A x$ 가 완성되어 다음 층으로 전달됩니다.
- 추론 시의 가중치 병합(Merging) - 지연 시간 0의 비밀: 모델 학습이 모두 종료된 후, 사용자를 위해 실제 서비스(추론, Inference) 환경에 모델을 배포할 때 LoRA의 진정한 설계 미학이 빛을 발합니다. 앞서 살펴본 어댑터(Adapter) 추가 방식은 추론 시에도 우회로 블록을 독립적으로 계속 연산해야 하므로 지연 시간이 늘어납니다. 하지만 LoRA의 두 경로는 단순히 선형 변환과 덧셈으로만 이루어져 있어 선형 연산의 분배 법칙이 성립합니다. $h = W_0 x + B A x = (W_0 + B A) x$ 따라서 프로덕션 서버에 모델을 올리기 직전에, 고정되어 있던 기존 거대 행렬 $W_0$에 학습이 완료된 훈련 행렬의 곱 $\Delta W$ (즉, $B \times A$) 행렬을 사전에 명시적으로 더해버립니다. 이렇게 병합 연산을 마친 새롭게 갱신된 단일 거대 행렬 $W$ 하나만을 메모리에 탑재하여 사용하면, 아키텍처 구조상 기존의 단일 사전 학습 신경망과 완벽히 동일해집니다. 우회로를 통과하는 추가 병렬 연산 자체가 소멸하므로, 사용자 응답 지연 시간(Inference latency)이 추가적으로 발생하지 않습니다.
6. 작동 원리: 어떻게 학습하는가? (The "How")
기능을 구현하기 위한 내부 텐서 연산 흐름을 파악했다면, 실제로 어떠한 형태와 맥락의 데이터를 모델에 주입하여 새로운 지식을 유도하는지 구체적으로 살펴보겠습니다.
미세조정 단계를 시작하기 전, 연구진은 방대한 인터넷 웹 문서, 책, 기사 등 일반 도메인의 텍스트 데이터(코퍼스)로 사전 학습이 이미 완료된 모델(예: 1,750억 파라미터의 GPT-3)을 베이스로 준비했습니다. 보편적인 언어 지식과 패턴을 학습한 이 거대 모델의 가중치는 단단히 고정시킨 채, 아래에 소개할 특정 작업(Downstream task)용 데이터셋을 LoRA 우회로 행렬에만 통과시켜 새로운 전문 지식을 주입하게 됩니다.
LoRA 논문은 이 기법이 자연어 이해(NLU)와 자연어 생성(NLG) 전반에 걸쳐 범용적으로 작동함을 증명하기 위해 여러 벤치마크 데이터를 사용했습니다. 이 중 특징이 대비되는 대표적인 두 가지 작업의 훈련 데이터를 분석합니다.
데이터베이스 질의문 번역 (WikiSQL 데이터셋)
거대 언어 모델이 일반 사용자의 모호한 자연어 질문을 이해하고, 이를 관계형 데이터베이스 시스템이 직접 실행할 수 있는 엄격한 문법의 SQL 코드로 변환하도록 훈련하는 작업(NL2SQL)입니다. 이 작업은 문맥의 의도 파악뿐만 아니라 스키마 링킹(Schema-linking), 논리 연산자 맵핑 등 구조적이고 결정론적인 규칙을 동시에 학습해야 하는 난도 높은 작업입니다.
- 입력 데이터 (Context/Input): 모델이 질문의 의도와 대상이 되는 테이블의 열(Column) 구조를 모두 알아야 하므로, 자연어 질의(Question)와 테이블 스키마(Table Schema) 정보를 함께 직렬화(Serialization)하여 문자열 포맷으로 병합한 형태를 입력으로 취합니다.
- 입력 포맷 구조: Context: [테이블 구조 정보 및 열 이름] Question: [사용자의 자연어 질문]
- 실제 데이터 예시: Table Schema: (Department, Course_Number, Instructor) Question: Is course number 519 available to undergrads? (학부생들이 수강번호 519번 강의를 들을 수 있나요?)
- 출력 데이터 (Target/Output): 예측의 대상은 해당 자연어 질문의 조건(WHERE)과 선택(SELECT)을 정확히 반영하여 실제 데이터를 추출할 수 있는 구문 오류 없는 SQL 쿼리 문자열(Text string)입니다.
- 실제 출력 예시: SELECT DISTINCT COURSE_NAME FROM COURSE WHERE COURSE_NUMBER = "519"
- 수량 및 활용: 약 56,355개의 훈련용 질의-응답 쌍이 제공되며, 모델은 주어진 입력 문맥 $x$에 대해 목표 쿼리 $y$를 자기회귀(Autoregressive) 방식으로 토큰 단위로 정확하게 생성하도록 주입된 $A, B$ 행렬을 최적화합니다.
대화 추상적 요약 (SAMSum 데이터셋)
모바일 메신저 등에서 여러 화자가 주고받은 일상적이고 비형식적인 채팅 대화 내용을 분석하여, 짧고 명확한 한 문장의 제3자 시점 요약본으로 압축하는 작업입니다.
- 입력 데이터 (Context/Input): 화자의 이름과 발화 내용이 콜론(:)으로 구분되고, 각각의 턴(Turn)이 줄바꿈 기호(\n)로 이어지는 텍스트 문자열 포맷입니다. 일상적인 구어체, 오타, 감정을 나타내는 이모티콘 등 자연스러운 노이즈가 강하게 포함된 텍스트입니다.
- 실제 데이터 예시: Ryan: Pics from Italy!!! :):) Leo: Yeah. They seem nice. Ryan: That's all???? I need more reactions! Leo: I'm tied to this office and working like a slave.
- 출력 데이터 (Target/Output): 대화의 전반적인 의미, 인물 간의 관계, 핵심 사건을 제3자의 관점에서 논리적으로 묶어낸 하나의 문자열 문장입니다. 대화 원문에 명시적으로 등장하지 않은 어휘를 모델이 스스로 추론하여 유창하게 생성하는 추상적 요약(Abstractive summarization)의 포맷을 띱니다.
- 실제 출력 예시: Ryan is in Italy while Leo is working hard and wishing he could win the lottery.
- 수량 및 활용: 약 14,732개의 훈련 예시가 사용되며, 모델은 긴 문맥 속 파편화된 대화 속에서 사실 관계를 추론하는 인지적 능력을 강화하기 위해 저랭크 행렬을 업데이트합니다.
7. 결과: 얼마나 좋아졌나? (Results)
LoRA는 학습 대상 파라미터를 극한으로 압축했음에도 불구하고, 수십에서 수백 배 많은 파라미터를 쏟아부은 전체 미세조정 및 이전 세대 대안 모델들과의 성능 경쟁에서 확고한 우위를 점했습니다. 논문이 증명한 주요 결과와 발견된 한계점들을 종합적으로 분석합니다.
SOTA (State-of-the-Art) 성능 달성 및 파라미터 극소화
가장 압도적인 정량적 결과는 당시 세계 최대 크기였던 1,750억(175B) 파라미터의 GPT-3 모델에 LoRA를 적용했을 때 나타납니다.
| 모델 및 미세조정 방식 | 학습 가능한 파라미터 수 | WikiSQL 정확도 | MNLI-m 정확도 | SAMSum (Rouge-1) |
| GPT-3 (전체 미세조정) | 175,255.8M (약 1,750억 개) | 73.8% | 89.5% | 52.0 |
| GPT-3 (프리픽스 계층 튜닝) | 20.2M (약 2천만 개) | 70.1% | 89.5% | 50.8 |
| GPT-3 (LoRA 적용) | 4.7M (약 470만 개) | 73.4% | 91.7% | 53.8 |
표에서 명확히 드러나듯, 전통적인 전체 미세조정은 무려 1,750억 개의 파라미터를 모두 업데이트해야 하지만, LoRA는 고작 470만 개(전체의 약 0.002%)의 파라미터만 훈련 대상으로 삼습니다. 그럼에도 불구하고 데이터베이스 질의 번역(WikiSQL)에서는 전체 미세조정과 오차 범위 내의 동등한 수준(73.4% vs 73.8%)을 달성했습니다. 더욱 인상적인 점은 논리 추론(MNLI-m)과 대화 요약(SAMSum) 벤치마크에서는 오히려 전체 파라미터를 업데이트했을 때보다 더 뛰어난 성능을 기록하며 당시의 해당 조건 최고 성능(SOTA)을 경신했다는 것입니다. 방대한 파라미터 전체에 훈련 데이터의 패턴을 강제하는 것이 오히려 과적합(Overfitting)을 유발할 수 있는데, LoRA의 병목 구조가 핵심 정보만을 걸러내는 일종의 정규화(Regularization) 필터 효과를 가져온 것으로 분석됩니다.
속도 및 하드웨어 인프라 자원의 혁명적 개선
모델 훈련과 운영의 물리적 한계를 부순 인프라 최적화 측면의 성과 역시 획기적입니다.
- 메모리 절감: 기존 GPT-3 175B 모델을 훈련하려면 가중치 갱신을 위한 기울기 추적과 최적화 알고리즘 상태 보존을 위해 약 1.2TB 규모의 막대한 비디오 메모리(VRAM)가 필요했습니다. LoRA를 도입하면 파라미터의 99.9% 이상이 동결되므로 기울기를 유지할 필요가 없어, 훈련 시 VRAM 요구량이 350GB 수준으로 대폭 축소(약 3.5배 절감)됩니다.
- 스토리지 및 작업 전환 효율: 수십 개의 특화 모델을 서비스할 때, 각 작업마다 350GB 크기의 전체 모델 체크포인트를 저장할 필요가 없어졌습니다. 베이스가 되는 사전 학습 모델 파일 하나만 메인 메모리에 적재해두고, 각 작업별로는 35MB 남짓한 초소형 LoRA 가중치 파일(A, B 행렬)만을 디스크에 저장하면 됩니다. 이는 작업당 스토리지 요구량을 10,000배 축소한 결과입니다. 새로운 작업을 처리할 때 VRAM에서 350GB를 통째로 덜어내는 대신 메모리 상주 모델에 35MB 행렬만 덧입히거나 빼는 연산으로 대체되므로 즉각적인 작업 스위칭(Task-switching)이 가능합니다.
- 훈련 처리량(Throughput): 역전파 단계에서 기울기를 계산하고 가중치를 업데이트해야 하는 행렬의 크기가 압도적으로 줄어들어, GPU 단위 시간당 토큰 처리 훈련 속도가 전체 미세조정 대비 약 25% 빨라졌습니다.
실패 케이스와 구조적 한계점 (Limitations & Failure cases)
저자들은 본인들의 방법론이 지닌 현실적 제약을 명확히 밝히며, 이는 후속 연구자들에 의해 더욱 정밀하게 분석되었습니다.
- 동적 다중 작업(Multi-task) 동시 배치의 병목: LoRA의 가장 큰 장점인 '추론 지연 시간 0'을 달성하기 위해 훈련된 가중치를 사전 학습 가중치에 물리적으로 병합(Merging)해 버리면, 해당 메모리 상의 모델 가중치 $W$가 특정 단일 작업용으로 완전히 고정되어 버립니다. 만약 실시간 클라우드 서비스 환경에서 한 번의 추론 연산 단위(Batch) 안에 작업 A(예: 문서 요약)를 요청한 사용자와 작업 B(예: SQL 변환)를 요청한 사용자의 데이터를 묶어서 병렬로 한 번에 처리하려면, 서로 다른 A, B 행렬을 각 데이터 스트림에 맞게 동적으로 로딩하여 적용해야 하므로 구조적인 병합 설계가 매우 복잡해집니다.
- 연속 학습에서의 치명적 망각(Catastrophic Forgetting) 유발 현상: 이후의 후속 연구들에 의해 밝혀진 심화된 한계점입니다. 훈련 데이터가 시간의 흐름에 따라 지속적으로 유입되는 연속 학습(Continual learning) 환경에서 여러 작업을 순차적으로 LoRA로 업데이트할 경우, 전체 미세조정 방식보다 과거 작업의 지식을 훨씬 더 빠르고 심각하게 잃어버리는 정보 망각 현상이 관측되었습니다. 이는 훈련 과정에서 LoRA가 업데이트하는 좁은 저랭크 부분 공간 내에 원본 사전 학습 가중치 방향과 구조적으로 심하게 어긋나는 고유의 '침입 차원(Intruder dimensions)'이 비정상적으로 누적되기 때문으로 분석되었습니다.
8. 이 논문의 계보와 발전 (Impact & Follow-ups)
2021년 LoRA의 발표는 학계와 산업계 전반에 걸쳐 '파라미터 효율적 미세조정(PEFT)'이라는 거대한 조류를 주류로 끌어올린 분기점이 되었습니다. 자본력이 부족한 소규모 스타트업이나 독립 연구자, 심지어 개인 개발자들도 소비자용 그래픽카드 환경에서 거대 파운데이션 모델을 자신의 목적에 맞게 재창조할 수 있는 권한이 부여되었습니다. 이후 LoRA의 기본 개념을 보완하고 확장한 후속 연구들이 폭발적으로 쏟아져 나오며 독자적인 'LoRA 생태계'를 형성했습니다.
- QLoRA (2023): 극한의 메모리 압축 다이어트 가장 널리 채택된 파생 기술입니다. LoRA가 훈련해야 할 파라미터의 크기를 아무리 줄였다 하더라도, 175B 규모 모델의 기본 고정 가중치(350GB) 자체를 온전히 메모리에 띄워두어야 학습이 진행된다는 근본적 부담은 여전했습니다. QLoRA 연구진은 기본 가중치를 4비트 정밀도(4-bit NormalFloat, NF4)라는 극단적인 포맷으로 정밀도를 깎아내어(양자화, Quantization) 메모리에 등재하고, 그 위에 16비트로 정밀하게 훈련되는 LoRA 모듈을 덧붙이는 하이브리드 기법을 제안했습니다. 이 혁신 덕분에 650억(65B) 파라미터 크기의 거대 모델을 48GB 메모리를 가진 단일 데스크톱 GPU 1대에서 훈련하는 기적이 일어났으며, 오픈소스 LLM 생태계의 대중화를 견인했습니다.
- DoRA (Weight-Decomposed Low-Rank Adaptation, 2024): 미세조정 품질의 상한선을 부수다 LoRA는 극강의 효율성을 자랑했지만, 성능의 절대적 고점을 평가할 때는 전체 가중치를 조율하는 전통적인 미세조정 방식의 섬세한 적응 능력을 완벽히 따라잡지는 못하는 미세한 품질 격차가 존재했습니다. DoRA 연구진은 전체 미세조정이 진행될 때 가중치 행렬이 변화하는 '방향(Direction, 각도)'과 '크기(Magnitude, 벡터의 길이)'가 독립적으로 미묘하게 변한다는 사실을 수학적으로 증명했습니다. 반면 기존 LoRA는 랭크 제약 때문에 가중치의 크기 변화와 방향 변화가 서로 강하게 결합되어 뭉툭하고 일률적으로 훈련되는 경향이 있었습니다. 이를 극복하기 위해 DoRA는 학습 전에 사전 학습 가중치를 '방향 행렬'과 '크기 벡터' 두 부분으로 완전히 분리(Decomposition)한 뒤, 오직 고차원의 '방향' 행렬 부분에만 LoRA 행렬을 곱하여 최적화하고 크기 벡터는 1차원으로 따로 학습하는 분리 구조를 도입했습니다. 결과적으로 기존 LoRA와 동일한 파라미터 추가 비용만을 소모하면서도 수학 추론, 이미지 이해 등 복잡한 태스크에서 훨씬 더 높은 정확도와 안정성을 달성하여 차세대 최적화 표준으로 자리 잡아가고 있습니다.
- AdaLoRA & GoRA (2023-2025): 똑똑한 예산 할당 기존 LoRA는 거대 모델의 모든 트랜스포머 층에 동일한 크기의 랭크(예: $r=8$)를 일괄적으로 고정 적용했습니다. 하지만 모델의 깊이에 따라 어떤 층은 새로운 지식을 학습하는 데 핵심적인 역할을 하고, 어떤 층은 거의 변하지 않아도 무방합니다. AdaLoRA는 학습 중간에 랭크 분해 행렬의 특이값(Singular values) 중요도를 지속적으로 모니터링하여, 주어진 작업에 더 중요한 하위 층에는 더 큰 랭크(자원)를 집중 부여하고 덜 중요한 층의 랭크는 과감히 0으로 소거해버리는(Pruning) 동적 자원 할당 기법을 고안했습니다. 최근 발표된 GoRA(2025) 역시 훈련 중 발생하는 기울기(Gradient) 정보를 활용하여 최적의 랭크를 적응적으로 분배함으로써 효율성의 극한을 끌어냈습니다.
- 시각, 청각을 아우르는 멀티모달(Multi-modal) 생태계로의 확장 LoRA의 우수한 이식 철학은 자연어 처리 모델에만 머물지 않았습니다. 텍스트 지시어를 고해상도 이미지로 변환해 주는 생성형 AI인 스테이블 디퓨전(Stable Diffusion) 커뮤니티는 LoRA를 가장 열광적으로 수용했습니다. 모델의 이미지 생성 U-Net 아키텍처 내부 교차 주의(Cross-attention) 층에 LoRA를 부착하여, 모델 전체를 재학습시키지 않고도 특정인의 얼굴 형태나 특정한 미술 화풍(예: 지브리 애니메이션 스타일, 수채화, 픽셀 아트)만을 기가 막히게 정밀 타격하여 학습하는 수백 메가바이트 단위의 초소형 LoRA 필터 파일들이 폭발적으로 생산 및 공유되었습니다. 최근 2025년 동향에 따르면 텍스트, 이미지뿐만 아니라 오디오, 비디오를 동시에 입력받아 처리하는 멀티모달(Multi-modal) 파운데이션 모델 영역에서도 LoRA 모듈이 기본적으로 장착되어 각기 다른 감각 정보의 특징을 효율적으로 통합시키는 중추적인 브리지 기술로 맹활약하고 있습니다.
9. 마무리
LoRA의 등장은 단순한 '엔지니어링 팁'이나 '최적화 트릭'의 발표를 넘어, 딥러닝 산업과 연구 생태계의 권력 지형을 바꾼 분기점이자 기념비적 발명입니다. 수십조 원의 자본을 가진 소수의 빅테크 기업만이 독점적으로 다룰 수 있을 뻔했던 거대 파운데이션 모델의 튜닝 권한을 수많은 중소기업, 학계, 그리고 소비자 환경의 개발자들에게 민주적으로 분산(Democratization)시킨 가장 중요한 기술적 방아쇠가 되었습니다. 모델의 덩치가 수조 단위의 파라미터로 팽창해 가는 오늘날의 현시점에서, 데이터 적응에 수반되는 파라미터 효율성을 극대화하는 접근법은 선택의 여지가 없는 생존의 필수 문법이 되었습니다.
실제 프로덕션 환경이나 실무 프로젝트에서 본 기술을 적용하여 LLM을 성공적으로 튜닝하고자 할 때 유의해야 할 구체적인 인사이트와 현장의 제언은 다음과 같습니다.
- 랭크($r$)와 알파($\alpha$)의 민감도 관계 (Scaling Rule of Thumb) LoRA 모듈을 설계하고 학습을 개시할 때 하이퍼파라미터인 랭크 $r$과 스케일링 요소 $\alpha$를 어떻게 배합하느냐는 최종 모델 품질에 지대한 영향을 미칩니다. 최근의 심층 분석 결과들에 따르면, 훈련된 저랭크 행렬에서 뻗어나오는 미세한 신호가 기존 거대 모델의 지배적인 지식에 파묻히지 않도록 하려면 알파 값을 랭크 값과 동일하게 맞추거나, 혹은 약 2배로 설정($\alpha = 1 \times r$ 또는 $\alpha = 2 \times r$)하는 것이 과적합을 방지하고 최적의 성능을 끌어내는 경험 법칙(Rule of thumb)으로 검증되었습니다. 만약 연산량을 줄이기 위해 $r$을 작게 설정해 놓고 $\alpha$를 무리하게 높게 잡아버리면 새로 덧붙인 우회로의 가중치 신호가 통제를 벗어날 정도로 강해져, 베이스 모델이 갖추고 있던 유창한 자연어 문법 능력이 완전히 붕괴되는 현상이 나타납니다. 반대의 경우 모델이 훈련 데이터의 특성을 흡수하지 못하는 과소적합을 겪게 됩니다.
- 단일 모듈 투입 vs 전면 투입 (Target Module Selection) 초기 논문에서는 주로 트랜스포머 아키텍처 내부 주의 집중 메커니즘(Self-attention)에서 정보의 질의와 값을 담당하는 부분인 질의 행렬($W_q$)과 값 행렬($W_v$)에만 LoRA 모듈을 부착하는 것으로도 성능의 대부분을 달성할 수 있다고 제안했습니다. 자원 제약이 극도로 엄격한 환경에서는 여전히 유효한 전략입니다. 그러나 최근 고도화된 의료 문서 분석, 수학적 논리 추론, 정밀한 프로그래밍 코드 생성과 같이 복잡성이 높은 작업 환경에서는, 주의 집중 메커니즘을 넘어 정보가 융합되는 출력 프로젝션 층($o\_proj$)과 다층 퍼셉트론 블록(MLP)의 전결합층(Fully connected layers)에까지 LoRA 적용 범위를 넓히는 투자가 전체 미세조정에 거의 근접하는 성능을 보장한다는 심층 연구가 보고되고 있습니다. 따라서 타겟 작업의 추상도와 가용 가능한 VRAM 예산에 따라 모듈 부착 지점을 점진적으로 확대하는 튜닝 전략이 필수적입니다.
- 엔터프라이즈 환경에서의 다중 서빙(Serving) 병목 해결 대규모 B2B 클라우드 인프라 아키텍처를 설계하는 아키텍트라면 LoRA 구조의 한계를 배포 단계에서 명확히 통제해야 합니다. 가령, 단일한 기본 범용 모델 위에 회계팀, 인사팀, 법무팀 등 부서별로 다른 1,000개의 특화된 LoRA 가중치를 얹어 동시에 서비스(Multi-tenant serving)를 구축한다고 가정해 보겠습니다. 이전에 설명한 것처럼 빠른 속도를 위해 가중치를 영구적으로 '병합(Merging)'해 버리면, 실제 VRAM 위에는 각 부서에 할당된 1,000개의 거대 175B 모델을 독립적으로 띄워야 하는 치명적인 메모리 누수 모순이 발생합니다. 반대로 메모리를 아끼기 위해 병합하지 않고 공통 베이스 모델을 둔 채 추론 요청이 들어올 때마다 작은 행렬만 교체해가며 동적으로 처리하려 하면, VRAM과 주 메모리(RAM) 간에 행렬 텐서를 쉴 새 없이 로드하고 오프로드해야 하는 입출력(I/O) 대역폭 병목 현상에 직면하여 전체 추론 서버가 마비될 수 있습니다. 이 딜레마를 해결하기 위해 근래에는 S-LoRA 체계와 같이 수많은 어댑터 가중치를 메모리 풀에 효율적으로 압축 배치하고, 들어오는 쿼리들에 맞춰 어댑터를 동적 페이징(Paging)하여 효율적인 일괄 처리(Batching)를 지원하는 추론 시스템 단의 뼈대 연구가 적극적으로 논의되고 도입되는 추세입니다.
요약하자면, LoRA는 거대화되는 인공지능 모델이 지닌 본질적인 파라미터 중복성과 저차원적 특성을 수학적으로 예리하게 포착하여 놀라운 연산 효율성을 달성한 작품입니다. VRAM 자원의 척박한 물리적 제약을 직관적인 발상으로 우회하면서도 강력한 지식 이식 성능을 확보하고자 하는 현장의 모든 AI 엔지니어와 연구진에게, 이 논문은 가장 먼저 구조를 이해하고 현업에 적용해야 할 훌륭한 최적화의 나침반이 될 것입니다.