사전 학습된 모델의 가중치를 고정하고, 소수의 학습 가능한 파라미터로 구성된 작은 모듈을 추가하여 모델을 효율적으로 미세 조정하는 방법인 LoRA 기법에 대한 설명

LoRA (Low-Rank Adaptation) 개요

  • LoRA (Low-Rank Adaptation) 는 대규모 사전 학습(pretrained) 모델을 효율적으로 미세 조정(fine-tuning) 하기 위한 기법으로 2021년 Microsoft Research 팀에서 제안됨.
  • 기존 모델의 전체 파라미터를 업데이트하지 않고, 특정 레이어에 저랭크(low-rank) 행렬을 추가 학습함으로써 학습 효율을 크게 높이며 이 방식은 특히 메모리와 저장 공간을 절약하고, 다양한 다운스트림 작업에 빠르게 적응할 수 있게 해준다.
  • 이미지 생성이나 LLM 분야에서 모델은 매우 크고 복잡하며, 이러한 모델의 fully fine-tuning을 위해서는 inference 대비 약 4~6배 이상 GPU 메모리가 필요하다. 따라서 대부분의 사용자는 모델 최적화(양자화) 와 함께 LoRA와 같은 파라미터 효율적 파인튜닝(Parameter Efficient Fine Tuning (PEFT)) 방법을 택하여 학습한다.
  • Paper : LoRA: Low-Rank Adaptation of Large Language Models

기존 Fine-Tuning의 한계

  • 대규모 모델을 fine-tuning하면 모든 파라미터가 업데이트되어 많은 GPU 메모리저장 공간이 필요하다.
  • 다양한 작업(도메인)에 맞게 모델을 각각 fine-tuning하면 작업별로 전체 모델을 저장해야 하므로 비효율적이다.
  • 전이 학습 시에도 일부 층만 freezing하거나 adapter 구조를 추가하는 기존 방법은 성능 저하가 발생할 수 있다.

LoRA 아이디어

  • "거대한 사전학습 모델의 모든 가중치가 정말 fine-tuning 시에 다 바뀔 필요가 있을까?", "모든 파라미터가 효율적으로 학습되고 있을까?" 즉, 수십억 개의 파라미터 중에서 실제로 fine-tuning 성능 향상에 기여하는 파라미터는 극히 일부일 수 있다는 가정.

1. 대부분의 파라미터는 이미 유용하다

  • 사전 학습된 거대한 모델은 이미 일반적인 언어 구조나 패턴을 잘 학습하고 있음.
  • 따라서, downstream task에 맞게 조금만 보정하면 되는 경우가 많음.

2. 변화가 필요한 부분은 저차원 공간에 존재할 수 있다

  • weight 업데이트가 필요한 변화는 전체 weight 공간이 아니라, 그보다 훨씬 낮은 rank의 서브스페이스에 존재할 수 있다는 가정.
  • 즉, 전체 행렬을 업데이트할 필요 없이, 저랭크 행렬로 충분히 학습할 수 있다는 것.

3. 고정된 weight + 저랭크 변화만으로도 충분하다

  • 기존 weight는 freeze 해두고, low-rank weight delta만 학습하는 방식으로도 성능 유지 가능함을 실험적으로 보임.
  • 사전 학습된 거대 모델의 가중치를 직접 업데이트하는 대신, 저랭크 분해(low-rank decomposition)를 통해 생성된 작은 크기의 파라미터만 학습시켜 모델을 효율적으로 미세 조정하는 것.

LoRA 학습 방법

LoRA 구조

  • LoRA는 기존 모델 파라미터 행렬을 저차원 근사(Low-Rank Approximation) 하는 아이디어를 바탕으로 한다.

기존 가중치 행렬의 분해

  • 위 그림은 LoRA 학습 기법의 흐름을 나타 낸다. 기존 사전학습된 모델의 가중치를 라 하고, 저차원 행렬을 추가하여 , 라 하며 이들은 원래 행렬보다 훨씬 작은 차원(rank)를 가진다.

저차원 행렬 학습

  • 학습 시 사전학습된 가중치는 freeze하고 오직 저차원 행렬 , 만 학습한다.
  • , 를 이용해 추론 시 모델이 선형 계산할 때 아래와 같이 계산 된다.
  • 학습이 끝난 후에는 , 가중치 즉, LoRA에 대한 정보만 저장하여 재사용할 수 있다. (대규모 사전학습 가중치 를 따로 저장할 필요가 없다)

LoRA 저차원 행렬 A, B 설정

  • LoRA는 기존 선형 계층에서 가중치 를 업데이트하지 않고, 보정항으로 추가된 저차원 행렬을 추가한다.
  • 여기서,
    • : 입력을 저차원으로 투영
    • : 다시 고차원으로 복원
    • : 두 행렬을 -rank로 만들기 위한 하이퍼파라미터

1. 차원 설정 (r값 설정)

  • 차원을 결정하는 값은 low-rank의 핵심 하이퍼파라미터로써 일반적으로 이 주로 사용된다.
  • 이 너무 작으면 표현력이 부족하고, 너무 크면 LoRA의 경량화 효과가 줄어든다.

2. 초기화 방식

  • 학습 안정성과 성능 향상을 위해 저차원 행렬 를 아래와 같이 초기화한다.
  • 다운 프로젝션 파트인 행렬초기값을 0으로 설정하여 학습 초반에는 사전학습 가중치 만 사용되고, LoRA가 점진적으로 기여하게 한다.
  • 업 프로젝션 파트인 행렬은 Xavier 등 일반적인 가중치 초기화 방식을 사용함.

3. 스케일링(scaling factor) 적용

  • LoRA에서는 값이 커지면 의 값도 커지므로, 이를 보정하기 위해 스케일 펙터 를 곱하여 보정항의 기여도를 조절할 수 있다.

4. LoRA 적용 대상

  • LoRA는 주로 다음과 같은 Linear 계층에 적용된다:
    • Transformer Attention의 Query, Key, Value projection 에 있는 Linear 계층
    • Feedforward MLP의 Linear 계층 (optional)
Input
  ↓
[Self-Attention]
  ├── W_q (Linear)  ← LoRA 적용
  ├── W_k (Linear)  ← LoRA 적용
  ├── W_v (Linear)  ← LoRA 적용
  └── W_o (Linear)  ← LoRA 적용 (선택 사항)
  ↓
[MLP]
  ├── Linear 1      ← LoRA 적용 (선택 사항)
  └── Linear 2      ← LoRA 적용 (선택 사항)
  ↓
  • 실제로는 대부분 Q, V (또는 Q, K, V) 에만 LoRA를 삽입하며 K는 생략하는 경우도 많다.

LoRA 장단점 및 응용

LoRA 장단점

장점

  • 파라미터 효율성: 전체 모델을 저장할 필요 없이, LoRA 모듈만 저장 가능
  • 메모리 효율: 파라미터 수 감소로 GPU 사용량 절감
  • 모듈성: 다양한 다운스트림 작업에 LoRA 모듈만 교체 가능
  • 성능 유지: 적절한 rank rrr 설정 시 full fine-tuning과 비슷한 성능 가능

단점

  • 적용 대상 제한: Linear layer에만 바로 적용 가능
  • 하이퍼파라미터: rank rrr 설정에 따라 성능 차이 존재
  • 복잡성 증가: 기존 모델에 LoRA를 삽입하려면 약간의 구조 변경 필요

LoRA 적용 사례

  • LLM (Large Language Models): GPT, LLaMA, BLOOM 등의 fine-tuning에 활용
  • 이미지 모델: Vision Transformer (ViT) 계열에도 적용 가능
  • 모델 퍼스널라이징: 사용자 맞춤 fine-tuning에 적합 (예: 챗봇에 개인화 정보 반영)

결론

  • LoRA는 대형 딥러닝 모델을 다양한 작업에 빠르고 효율적으로 적응시키기 위한 대표적인 기법으로, 특히 메모리/스토리지 제약이 있는 상황에서 유용하다. 최근에는 합성 데이터 학습, 모델 개인화, 온디바이스 AI 등 다양한 분야에서 활발히 적용되고 있으며, Parameter-Efficient Fine-Tuning (PEFT)의 핵심 도구로 자리잡고 있다.
  • 실제 프로젝트에 LoRA 기법을 적용하여 학습해보니, 이미 충분한 성능을 보이는 대규모 모델에서는 의미가 있지만 성능이 떨어지는 작은 모델의 성능을 높이기 위함(지식 학습 등)으로는 사용하기 어렵다. > Polyglot12.8b 모델을 LoRA 학습으로 테스트 했을 때, 학습시킬 데이터셋의 말투나 어조는 학습이 잘되지만 새로운 지식을 학습시키기는 어려웠다.

참고