Few-Shot / Zero-Shot 학습¶
개요¶
Few-shot 학습과 Zero-shot 학습은 극소수의 예제(또는 예제 없이)만으로 새로운 과제를 수행하는 능력이다. 전통적 ML은 대규모 라벨 데이터를 필요로 하지만, 실제 많은 상황에서 라벨 데이터는 극도로 부족하다. 메타 학습(meta-learning), 대규모 사전 학습, In-Context Learning(ICL) 등의 접근법이 이 문제를 해결한다.
핵심 개념¶
1. 문제 정의¶
| 용어 | 정의 |
|---|---|
| Zero-shot | 학습 시 본 적 없는 클래스에 대해 예측 |
| One-shot | 클래스당 1개 예제만으로 학습 |
| Few-shot | 클래스당 극소수(1~5개) 예제만으로 학습 |
| N-way K-shot | N개 클래스, 각 K개 예제로 구성된 에피소드 |
2. 메타 학습 (Meta-Learning)¶
"Learning to learn": 다양한 과제를 학습하여, 새로운 과제에 빠르게 적응하는 능력을 획득한다.
MAML (Model-Agnostic Meta-Learning)¶
Finn et al. (2017)이 제안. 소수의 gradient step으로 빠르게 적응할 수 있는 초기화를 학습한다.
Inner loop (과제 적응): $\(\theta_i' = \theta - \alpha \nabla_\theta L_{\text{task}_i}(\theta)\)$
Outer loop (메타 업데이트): $\(\theta \leftarrow \theta - \beta \nabla_\theta \sum_i L_{\text{task}_i}(\theta_i')\)$
graph TD
A["메타 초기화 θ"] --> B["과제 1: few gradient steps"]
A --> C["과제 2: few gradient steps"]
A --> D["과제 3: few gradient steps"]
B --> B1["θ₁'"]
C --> C1["θ₂'"]
D --> D1["θ₃'"]
B1 & C1 & D1 --> E["메타 업데이트<br>θ ← θ - β∇Σ L(θᵢ')"]
E --> A 직관: "좋은 초기화란, 어떤 과제에든 몇 번의 업데이트만으로 빠르게 적응할 수 있는 위치"
Prototypical Networks¶
각 클래스의 프로토타입(지원 집합의 평균 임베딩)을 계산하고, 쿼리 샘플을 가장 가까운 프로토타입의 클래스로 분류한다.
직관: 각 클래스의 "대표점"과의 거리로 분류
Matching Networks¶
Attention 메커니즘 기반으로, 쿼리와 지원 집합 간의 유사도를 직접 학습한다.
3. In-Context Learning (ICL)¶
LLM이 prompt 내의 예시만으로 새 과제를 수행하는 능력이다.
특징: - 파라미터 업데이트 없음 (추론만으로 수행) - Prompt 설계가 핵심 - 모델 규모가 클수록 ICL 능력 향상
이론적 이해: 완전히 규명되지 않았다. Transformer가 내부적으로 gradient descent를 시뮬레이션한다는 가설(implicit meta-learning)이 유력하다.
4. Transfer 기반 Few-Shot¶
대규모 사전 학습 후, 소수 예제로 fine-tuning한다.
| 접근법 | 방법 |
|---|---|
| Feature Extraction | 사전 학습 모델 고정 + 분류기만 학습 |
| LoRA / Adapter | 소수 파라미터만 효율적으로 학습 |
| Prompt Tuning | 학습 가능한 프롬프트 벡터 추가 |
상세 내용¶
N-way K-shot 에피소드 구성¶
graph TD
subgraph "5-way 1-shot 에피소드"
subgraph "Support Set (학습용)"
S1["클래스 A: 1개"]
S2["클래스 B: 1개"]
S3["클래스 C: 1개"]
S4["클래스 D: 1개"]
S5["클래스 E: 1개"]
end
subgraph "Query Set (평가용)"
Q1["클래스 ?: 여러 개"]
end
end 메타 학습에서는 이러한 에피소드를 대량 생성하여 학습한다. 각 에피소드는 하나의 "미니 학습 과제"이다.
Zero-shot의 접근 방법¶
| 접근 | 원리 | 예시 |
|---|---|---|
| 속성 기반 | 클래스의 속성(예: "줄무늬 있음, 네 발") 활용 | 동물 분류 |
| 텍스트 기반 | 클래스 이름의 텍스트 임베딩 활용 | CLIP zero-shot |
| LLM 기반 | Prompt로 과제 설명 | GPT few-shot |
언제 사용하는가¶
| 상황 | 추천 접근 |
|---|---|
| 클래스당 0개 예제 | Zero-shot (CLIP, LLM) |
| 클래스당 1~5개 예제 | Prototypical Networks, MAML |
| 클래스당 10~100개 예제 | Transfer + LoRA fine-tuning |
| 새 클래스가 계속 추가 | 메타 학습 (에피소드 기반) |
| NLP 과제 | LLM In-Context Learning |
| 비전 과제 | CLIP zero-shot 또는 few-shot fine-tuning |
흔한 오해와 함정¶
-
"Few-shot 환경에서는 과적합이 문제가 아니다": 오히려 과적합이 극심하다. 데이터가 적기 때문에 강한 정규화(weight decay, dropout, 증강)가 필수적이다.
-
"ICL이 fine-tuning을 대체한다": ICL은 편리하지만, 특정 도메인에서는 fine-tuning이 훨씬 우수하다. 둘은 보완적 관계이다.
-
"MAML은 모든 few-shot 문제에 최고": MAML은 이론적으로 우아하지만 학습이 불안정하고 계산 비용이 높다. 실무에서는 transfer 기반 방법이 더 간단하고 강력한 경우가 많다.
-
"클래스당 예제가 많을수록 항상 좋다": 노이즈가 있는 예제는 오히려 해로울 수 있다. 예제의 질이 양만큼 중요하다.
-
일반 사전 학습이 항상 최적: 도메인 내(in-domain) 사전 학습이 범용 사전 학습보다 few-shot 성능에서 더 효과적인 경우가 많다.
다른 주제와의 연결¶
- 전이 학습: 사전 학습 + fine-tuning의 few-shot 활용
- LLM: In-Context Learning, Prompt Engineering
- Self-Supervised Learning: 사전 학습으로 표현 품질 향상
- 데이터 증강: 소량 데이터에서 증강의 효과
- 어텐션 메커니즘: Matching Networks의 기반
- ML을 사용하지 말아야 할 때: 데이터 부족 시 대안