C.W.K.
Stream
Lesson 02 of 06 · published

LoRA: 돌파구

~22 min · lora, low-rank, decomposition

Level 0관찰자
0 XP0/43 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

핵심 아이디어

LoRA(Low-Rank Adaptation, Hu et al. 2021)가 실무에서 가장 중요한 단일 PEFT 기법. 풀 가중치 행렬 W(d×d) 업데이트 대신 LoRA는 업데이트를 작은 행렬 둘로 분해 —

W' = W + BA

  • W는 원래 freeze된 가중치 행렬 (d × d)
  • B는 작은 행렬 (d × r)
  • A는 작은 행렬 (r × d)
  • rrank — 보통 8, 16, 32, 64

d=4096, r=16인 행렬에 대해 —

  • 풀 업데이트: 4096 × 4096 = 1670만 파라미터
  • LoRA 업데이트: (4096 × 16) + (16 × 4096) = 13.1만 파라미터128배 감소

작동 이유

핵심 가설: 파인튜닝 중 가중치 업데이트는 낮은 intrinsic rank 가져. 모델을 새 작업에 적응시키는 데 필요한 변화가 가중치 공간의 모든 차원을 수정할 필요 없어 — 훨씬 낮은 차원 subspace에서 잡혀.

초기화

행렬 A는 random Gaussian, B는 0으로 초기화. 그래서 학습 시작 시 BA = 0, 모델은 사전학습된 거랑 동일. 학습이 점진적으로 옳은 업데이트 배워.

Code

Wrap a base model with LoRA in PEFT·python
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

base = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")

config = LoraConfig(
    r=16,                          # rank — higher = more capacity
    lora_alpha=32,                 # scaling factor (alpha/r)
    target_modules="all-linear",   # apply to all linear layers
    lora_dropout=0.05,             # regularization
    bias="none",                   # don't train biases
    task_type="CAUSAL_LM",
)

model = get_peft_model(base, config)
model.print_trainable_parameters()
# trainable params: 13,631,488 || all params: 8,043,651,072 || trainable%: 0.17%

External links

Exercise

손으로 계산: hidden size 4096인 Llama 3.1 8B에 대해 target_modules='all-linear'는 transformer 블록당 ~7개 linear layer × 32 블록에 LoRA 적용. r=16에서 학습 가능 파라미터 추정. 네 계산을 model.print_trainable_parameters()랑 비교.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.