콘텐츠로 이동

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

각 클래스의 프로토타입(지원 집합의 평균 임베딩)을 계산하고, 쿼리 샘플을 가장 가까운 프로토타입의 클래스로 분류한다.

\[c_k = \frac{1}{|S_k|} \sum_{x_i \in S_k} f_\phi(x_i)\]
\[p(y = k | x) = \frac{\exp(-d(f_\phi(x), c_k))}{\sum_{k'} \exp(-d(f_\phi(x), c_{k'}))}\]

직관: 각 클래스의 "대표점"과의 거리로 분류

Matching Networks

Attention 메커니즘 기반으로, 쿼리와 지원 집합 간의 유사도를 직접 학습한다.

3. In-Context Learning (ICL)

LLM이 prompt 내의 예시만으로 새 과제를 수행하는 능력이다.

예시 1: "맛있는 음식이었습니다" → 긍정
예시 2: "서비스가 불친절했습니다" → 부정
질문: "분위기가 좋았어요" → ?

특징: - 파라미터 업데이트 없음 (추론만으로 수행) - 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

흔한 오해와 함정

  1. "Few-shot 환경에서는 과적합이 문제가 아니다": 오히려 과적합이 극심하다. 데이터가 적기 때문에 강한 정규화(weight decay, dropout, 증강)가 필수적이다.

  2. "ICL이 fine-tuning을 대체한다": ICL은 편리하지만, 특정 도메인에서는 fine-tuning이 훨씬 우수하다. 둘은 보완적 관계이다.

  3. "MAML은 모든 few-shot 문제에 최고": MAML은 이론적으로 우아하지만 학습이 불안정하고 계산 비용이 높다. 실무에서는 transfer 기반 방법이 더 간단하고 강력한 경우가 많다.

  4. "클래스당 예제가 많을수록 항상 좋다": 노이즈가 있는 예제는 오히려 해로울 수 있다. 예제의 이 양만큼 중요하다.

  5. 일반 사전 학습이 항상 최적: 도메인 내(in-domain) 사전 학습이 범용 사전 학습보다 few-shot 성능에서 더 효과적인 경우가 많다.


다른 주제와의 연결