PEFT(Parameter-Efficient Fine-Tuning)에서 가장 널리 사용되는 기법인 **LoRA(Low-Rank Adaptation)**
✅ LoRA = Low-Rank Adaptation
즉, 기존 모델의 무거운 파라미터는 고정해두고, 아주 작은(저랭크) 행렬만 학습하는 방식의 파인튜닝 기법입니다.
GPT, BERT 같은 대규모 모델은 수억~수천억 개의 파라미터를 갖고 있는데,
모델을 파인튜닝하려면 원래는 이 모든 파라미터를 수정해야 했어요.
하지만 LoRA는 이렇게 말합니다:
❝ 기존 모델은 그대로 두고, 그 옆에 아주 작은 보정 모듈만 붙여서 학습하자! ❞
🔧 LoRA의 작동 원리
📌 기존 방식 (Full Fine-Tuning)
- 모델의 모든 파라미터를 업데이트 (매우 비쌈, 느림)
📌 LoRA 방식
- 기존의 가중치 행렬 W를 그대로 둠
- 대신, 두 개의 저차원 행렬 A, B를 만들어 이렇게 보정: W’ = W + ΔW (ΔW = B @ A)
즉, 학습 시 A와 B만 학습하고, 기존 W는 고정(freeze)
🧮 A: 낮은 차원으로 축소하는 행렬
🧮 B: 다시 원래 차원으로 확장하는 행렬
📦 구조 예시
예를 들어, W가 1024×1024 행렬이라면:
- A는 1024×4 (저차원)
- B는 4×1024
→ 총 8,000개만 학습! (기존 1백만 → 0.8% 수준)
✅ 왜 LoRA가 강력한가?
| 장점 | 설명 |
| 💾 파라미터 수 절감 | 전체의 0.1~2%만 학습 |
| 🚀 GPU 메모리 절약 | 대규모 모델도 1~2 GPU로 학습 가능 |
| ⚡ 빠른 학습 | 짧은 시간에 파인튜닝 가능 |
| 🔁 모듈화 | 원래 모델은 고정이므로, LoRA 모듈만 교체하거나 공유 가능 |
🎯 언제 LoRA를 사용하면 좋을까?
- 🔹 리소스가 부족할 때 (1-2 GPU, 노트북 환경)
- 🔹 모델을 계속 재사용하고 싶을 때
- 🔹 여러 작업에 맞춰 빠르게 미세조정할 때
- 🔹 다양한 스타일, 성격, 언어 등에 맞춘 커스터마이징
🧪 실전 예시
예: 고객지원 챗봇에 LoRA 적용
- 기본 GPT 모델 사용 (학습된 사전 지식 유지)
- 회사 고객응대 스타일 데이터로 LoRA 학습 (1~2시간이면 가능)
- LoRA 모듈만 붙여서 배포 (원본 GPT는 그대로)
→ 일반 GPT는 “공손하게 말하지만 일반적인 응답”
→ LoRA 모델은 “회사 스타일로 친절하게, 약관대로 설명”
🧠 LoRA vs Full Fine-Tuning vs Adapter
| 항목 | Full FT | Adapter | LoRA |
| 학습 파라미터 | 100% | 10%~ | 0.1~2% |
| 성능 유지 | ✅ 높음 | ✅ 중간~높음 | ✅ 매우 높음 |
| 메모리/속도 | ❌ 높음 | 보통 | ✅ 매우 효율적 |
| 원래 모델 수정 | ❌ O | ❌ | ❌ (freeze) |
🔧 사용 도구
- Hugging Face 🤗 PEFT + LoRA
- 🤗 Transformers + bitsandbytes + QLoRA
- OpenChatKit, LLaMA-LoRA, Alpaca-LoRA 등 수많은 오픈소스 기반 LoRA 적용 사례 존재
✅ 요약 정리
| 항목 | 설명 |
| 목적 | 대규모 모델을 가볍고 빠르게 파인튜닝하기 위함 |
| 핵심 방식 | 기존 가중치는 고정, 저랭크 행렬 A, B만 학습 |
| 장점 | 💾 메모리 절약, 🚀 속도 향상, 🧩 모듈화 가능 |
| 적용 분야 | 고객지원, 금융/의료 도메인 특화, 스타일 커스터마이징 등 |
| 대표 기술 | Hugging Face PEFT + LoRA, QLoRA 등 |