"모델을 통째로 다시 학습하지 않고, 중간에 작은 모듈만 추가해 학습한다!"
Adapters는 PEFT(파라미터 효율적 파인튜닝) 기법 중 가장 범용적으로 쓰이는 방법입니다.
Adapters란?
Adapter는 Transformer 블록 사이에 작은 Bottleneck 네트워크를 추가하고
이 부분만 학습하는 기법입니다.
원본 모델의 weight는 전부 freeze하고,
추가된 Adapter layer만 학습하기 때문에 파라미터 수를 크게 줄이면서도
기존 모델의 일반화 성능을 유지할 수 있습니다.
왜 필요한가?
- 대형 모델은 Full Fine-Tuning 시 GPU 메모리, 학습 시간 부담이 매우 큼
- LoRA, Prompt-Tuning은 주로 Attention projection 계층이나 입력 쪽만 바꿈
- Adapter는 모델 내부 레이어에 추가 모듈을 삽입 → 더 풍부한 표현력 확보 가능
즉, LoRA보다 조금 더 많은 파라미터를 학습하지만, 그만큼 성능도 안정적입니다.
구조 & 원리
Transformer 블록의 일반 구조:
x -> LayerNorm -> Self-Attention -> Residual -> FFN -> Residual
Adapter 추가 시:
x -> LayerNorm -> Self-Attention -> Residual -> FFN -> Residual
│
▼
Adapter (작은 MLP)
│
▼
Residual Add
Adapter는 보통 Down-Projection → 비선형 → Up-Projection 형태:
h = Down(x) # 작은 차원 r (r << d)
h = Activation(h) # 비선형 (ReLU, GELU 등)
out = Up(h) # 다시 원래 차원 d로 확장
y = x + out # residual connection
장점
1. 원본 모델 유지 → catastrophic forgetting 방지
2. 표현력 충분 → 작은 bottleneck이지만 비선형성 추가 → LoRA보다 더 유연
3. 태스크 간 파라미터 분리 가능 → 여러 adapter를 교체해 multi-task 지원
4. 학습 안정적 → Full Fine-Tuning과 유사한 성능 달성 가능
단점 & 주의점
LoRA, Prompt-Tuning보다 파라미터 수와 연산량이 약간 더 많음
레이어마다 Adapter 넣으면 파라미터 수 증가 → 선택적으로 삽입 필요
inference latency가 아주 약간 늘어날 수 있음 (추가 연산 때문)
PyTorch 스타일 예시
import torch.nn as nn
class Adapter(nn.Module):
def __init__(self, d_model, r=64):
super().__init__()
self.down = nn.Linear(d_model, r)
self.activation = nn.ReLU()
self.up = nn.Linear(r, d_model)
def forward(self, x):
return x + self.up(self.activation(self.down(x)))
이 Adapter 모듈을 Transformer 각 블록의 FFN 뒤 residual branch에 추가해줍니다.
LoRA / Prompt-Tuning과 비교
LoRA | 중간 (r×d + r×k) | Attention Q/K/V | 경량, merge 가능 | 미세조정 + 모델 재사용 |
Prompt-Tuning | 매우 적음 | 입력 embedding / KV cache | 초경량, 빠름 | Few-shot, zero-shot |
Adapter | LoRA보다 많음 | 모델 블록 사이 | 표현력 풍부, 안정적 | 다중 태스크, 안정성 중요한 곳 |
실무 적용 팁
- HuggingFace transformers + adapter-transformers 라이브러리 사용 가능
- 모든 레이어에 넣기보다 중간 레이어 일부만 Adapter 삽입 → 파라미터 효율↑
- r( bottleneck 차원 )을 16, 32, 64 등으로 실험해 최적값 찾기
결론
Adapter는 LoRA보다 조금 무겁지만, 성능과 안정성에서 강력한 옵션입니다.
여러 태스크를 동시에 지원하거나, LoRA로는 부족한 복잡한 문제에서 많이 사용됩니다.
아래는 다음 편 입니다!
https://machineindeep.tistory.com/65
AI 모델 경량화 시리즈 4편: BitFit (Bias-Only Fine-Tuning)
"모델의 bias만 학습해도 성능이 꽤 괜찮다?"BitFit은 PEFT 기법 중 가장 단순하고, 가장 가벼운 방법입니다.BitFit이란?BitFit은 말 그대로 모델의 bias 파라미터만 학습하는 방법입니다.LayerNorm, Attention,
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
AI 모델 경량화 시리즈 5편: QLoRA (Quantized LoRA) (0) | 2025.09.14 |
---|---|
AI 모델 경량화 시리즈 4편: BitFit (Bias-Only Fine-Tuning) (0) | 2025.09.14 |
AI 모델 경량화 시리즈 2편: Prefix-Tuning & Prompt-Tuning (0) | 2025.09.14 |
AI 모델 경량화 시리즈 1편: LoRA(Low-Rank Adaptation) 완벽 가이드 (0) | 2025.09.14 |
[Activation Function] Sigmoid 이란? (2) | 2022.03.28 |