AI 모델을 효율적으로 다루는 핵심 열쇠: Low Rank의 모든 것
Low rank(저랭크)는 선형대수학에서 유래한 개념으로, 행렬의 "계수(rank)"가 그 행렬의 크기에 비해 상당히 작다는 것을 의미합니다. LLM(Large Language Model)의 맥락에서 이는 매우 중요한 개념인데, 수십억 개의 파라미터를 가진 거대한 가중치 행렬들이 실제로는 훨씬 낮은 차원의 구조로 표현될 수 있다는 관찰에 기초합니다.
행렬의 Rank란?
행렬의 rank는 해당 행렬이 표현할 수 있는 선형적으로 독립인 방향(특징)의 수를 나타냅니다.
예를 들어, 4096 × 4096 크기의 행렬이 있다면 이론적으로는 최대 4096의 rank를 가질 수 있지만, 실제 데이터에서는 대부분의 의미 있는 정보가 훨씬 적은 수의 차원(예: 64, 128)만으로도 충분히 표현될 수 있는 경우가 많습니다.
거대한 언어 모델의 가중치를 자세히 들여다보면 흥미로운 사실을 발견할 수 있습니다. 이 거대한 행렬들이 실제로는 모든 차원을 다 활용하지 않는다는 것입니다.
왜 그럴까요?
언어라는 것 자체가 무한히 복잡해 보이지만, 실제로는 일정한 패턴과 규칙을 따르기 때문입니다. 마치 수만 개의 단어가 있어도 자주 쓰는 표현은 정해져 있는 것처럼요. 언어는 겉보기엔 고차원 공간에 펼쳐져 있는 것 같지만, 실제로는 훨씬 더 단순한 구조 위에서 움직입니다.
또 다른 중요한 발견이 있습니다.
모델을 특정 작업에 맞게 조정할 때, 실제로 바뀌어야 하는 정보의 양은 생각보다 훨씬 적다는 것입니다. 수십억 개의 파라미터가 있어도, 실제로 의미 있는 변화는 그중 아주 작은 부분에서만 일어납니다. 이것을 "내재적 차원이 낮다"고 표현합니다.
더 놀라운 것은, 이런 현상이 우연이 아니라는 점입니다. 신경망이 학습하는 과정에서 자연스럽게 "가장 단순하면서도 효과적인 해답"을 찾아가는 성질이 있기 때문입니다. 마치 물이 높은 곳에서 낮은 곳으로 흐르듯, 신경망도 복잡한 솔루션보다는 low rank 형태의 간결한 솔루션으로 수렴하려는 경향이 있습니다.
Low rank 개념의 가장 대표적인 응용이 바로 LoRA입니다. LoRA는 사전학습된 LLM을 특정 작업에 파인튜닝할 때, 원본 가중치 행렬을 직접 수정하는 대신 low-rank 업데이트를 추가하는 방식입니다.
기존 방식에서는 가중치 행렬 W 전체를 업데이트합니다:
Wnew = W0 + ΔW
여기서, W0는 사전학습된 가중치이고, ΔW는 학습할 변화량입니다.
LoRA는 변화량 ΔW가 low rank 특성을 가진다고 가정하고, 이를 두 개의 작은 행렬의 곱으로 분해합니다:
ΔW = A × B
각 행렬의 차원은 다음과 같습니다:
W0 ∈ ℝd × k (원래 가중치, 고정)
A ∈ ℝd × r (학습 가능)
B ∈ ℝr × k (학습 가능)
r ≪ min(d, k) (rank r은 매우 작은 수, 예: 4, 8, 16)
따라서 최종 가중치는 다음과 같이 계산됩니다:
Wnew = W0 + A × B
Low rank 개념을 이해하는 또 다른 훌륭한 방법은 통계학의 PCA(주성분 분석)와 비교하는 것입니다. 놀랍게도 이 둘은 수학적으로 본질이 동일합니다.
PCA는 데이터의 분산을 최대로 보존하는 k개의 주성분을 찾는 것이고, Low-rank 근사는 행렬을 rank k로 근사할 때 재구성 오차를 최소화하는 것입니다. 이 두 문제의 해는 SVD(특이값 분해)의 상위 k개 성분으로 정확히 동일합니다.
차원을 feature(특징)로 생각하면, 두 방법 모두 수천 개의 미세한 특징들을 소수의 "의미 있는 패턴"으로 압축합니다.
수학적 본질은 같지만, 적용 방식에서 중요한 차이가 있습니다. PCA는 이미 있는 데이터를 사후에 분석하여 주요 패턴을 '발견'하는 정적 접근법인 반면, Low-Rank 학습(LoRA)은 가중치 변화량이 low-rank 구조를 가질 것이라고 가정하고 최적값을 학습해나가는 동적 접근법입니다.
LoRA의 가장 큰 장점은 파라미터 효율성입니다. 구체적인 예를 들어보겠습니다:
원래 4096 × 4096 크기의 행렬을 업데이트하려면 16,777,216개의 파라미터가 필요합니다.
하지만 rank r=8로 설정하면 총 파라미터는 65,536개로 줄어듭니다. 이는 약 256배의 파라미터 감소를 의미합니다.
이에 따라 다음과 같은 이점을 얻을 수 있습니다:
메모리 효율성: 소비자용 GPU에서도 대형 모델 파인튜닝 가능
저장 공간 절약: 파일 크기가 수 GB에서 수 MB 수준으로 감소
학습 속도 향상: 훈련 시간 단축
모듈화: 서로 다른 작업에 대해 학습된 어댑터 교체 용이
Low rank 개념은 LoRA 외에도 다양한 형태로 확장되어 활용되고 있습니다:
QLoRA (Quantized LoRA): 모델을 양자화한 상태에서 LoRA를 적용하여 메모리 효율을 극대화합니다.
Low-rank Attention 근사: 어텐션 메커니즘을 low-rank 구조로 근사하여 계산량을 절약합니다.
모델 압축: 전체 모델 가중치를 low-rank 분해하여 압축합니다.
지식 증류: 큰 모델의 지식을 작은 모델로 전달할 때 활용합니다.
Low rank 기법이 효과적인 이유는 여러 가지 이론적 근거가 있습니다.
첫째,
자연어와 같은 실제 데이터는 고차원 공간에 존재하지만 실제로는 훨씬 낮은 차원의 구조를 가지고 있습니다. 이는 특이값 분해(SVD)를 통해 확인할 수 있습니다.
둘째,
딥러닝 모델의 학습 과정에서 발생하는 implicit regularization 효과로 인해 모델이 자연스럽게 low-rank 솔루션으로 수렴하는 경향이 있습니다.
이는 모델이 과적합을 피하고 일반화 성능을 높이려는 내재적 특성과 관련이 있습니다.
LLM에서의 low rank 개념은 "거대한 모델의 지식 변화는 사실 아주 작은 차원의 정보만으로도 충분히 표현할 수 있다"는 핵심 통찰을 바탕으로 합니다. 이 개념은 AI 모델의 효율적인 학습과 배포를 가능하게 하는 핵심 기술로, 제한된 컴퓨팅 자원으로도 최첨단 AI 모델을 활용할 수 있게 해주는 혁신적인 접근법입니다.