콘텐츠로 이동
Data Prep
상세

액티브 러닝 (Active Learning)

1. 개요

액티브 러닝은 모델이 가장 유용한 데이터 포인트를 선택적으로 질의하여 레이블링을 요청하는 머신러닝 패러다임. 레이블링 비용이 높을 때 최소한의 레이블로 최대 성능을 달성하는 것이 목표.

정의

액티브 러닝: 능동적 샘플 선택으로 효율적 학습

일반 지도학습:
  전체 레이블 데이터 D → 모델 학습

액티브 러닝:
  소량 레이블 L + 대량 비레이블 U
  → 모델 → 가장 유용한 샘플 선택 → 레이블 요청 → 반복

학습 사이클

1. 초기 레이블 데이터로 모델 학습
2. 비레이블 풀에서 샘플 선택 (Query Strategy)
3. 오라클(인간)에게 레이블 요청
4. 레이블 데이터에 추가
5. 모델 재학습
6. 종료 조건까지 반복

2. 핵심 개념

2.1 시나리오

시나리오 설명
Pool-based 비레이블 풀에서 선택 (가장 일반적)
Stream-based 순차적 도착 데이터에 대해 결정
Membership Query 임의의 인스턴스 생성 후 질의

2.2 쿼리 전략 기준

기준 목표
불확실성 모델이 확신 없는 샘플
다양성 데이터 공간 커버리지
대표성 전체 분포 대표
기대 변화 모델 변화 최대화

3. 주요 쿼리 전략

3.1 불확실성 샘플링 (Uncertainty Sampling)

최소 확신 (Least Confidence)

x* = argmax_x (1 - P(ŷ|x))

ŷ: 가장 높은 확률의 클래스
가장 확신 없는 샘플 선택

마진 샘플링 (Margin Sampling)

x* = argmin_x (P(y₁|x) - P(y₂|x))

y₁, y₂: 상위 2개 클래스
1위와 2위 확률 차이가 작은 샘플

엔트로피 샘플링 (Entropy Sampling)

x* = argmax_x H(Y|x) = argmax_x (-Σᵢ P(yᵢ|x) log P(yᵢ|x))

예측 분포의 엔트로피가 높은 샘플
모든 클래스 확률 고려

3.2 위원회 기반 (Query by Committee)

여러 모델(위원회)의 불일치로 선택

1. C개 모델 앙상블
2. 각 모델의 예측 수집
3. 불일치도 측정

Vote Entropy:
x* = argmax_x (-Σᵢ (Vᵢ/C) log(Vᵢ/C))
Vᵢ: 클래스 i에 투표한 모델 수

3.3 베이지안 접근

베이지안 모델의 사후 불확실성 활용

BALD (Bayesian Active Learning by Disagreement):
x* = argmax_x I(y; θ|x, D)
    = H(y|x, D) - E_θ[H(y|x, θ)]

예측 불확실성 - 모델 불확실성

MC Dropout:

드롭아웃으로 베이지안 근사:
1. 추론 시 드롭아웃 유지
2. T번 전방 패스로 샘플링
3. 예측 분산으로 불확실성 추정

3.4 다양성 기반

Core-set Selection

레이블 데이터와 최대 거리인 샘플 선택

x* = argmax_{x∈U} min_{x'∈L} d(x, x')

특징 공간에서 커버리지 최대화

Batch Mode

배치로 선택할 때 다양성 고려:
- Determinantal Point Process (DPP)
- K-Medoids clustering
- 다양성 + 불확실성 결합

3.5 기대 모델 변화

레이블 후 모델 변화 최대화:

Expected Gradient Length:
x* = argmax_x E_y[||∇L(x,y)||]

Expected Model Change:
x* = argmax_x E_y[d(θ, θ')]

3.6 딥러닝 액티브 러닝

방법 특징
MC Dropout 베이지안 불확실성 근사
Ensembles 모델 불일치
Learning Loss 손실 예측 학습
Variational Adversarial 적대적 샘플링
BADGE 그래디언트 기반 배치

BADGE (Batch Active learning by Diverse Gradient Embeddings):

1. 각 샘플의 예측 손실 그래디언트 계산
2. K-Means++로 다양한 배치 선택

그래디언트 = 불확실성 + 다양성


4. 실무 적용 사례

4.1 이미지 레이블링

문제: 대규모 이미지 레이블링 비용

적용:
1. 소량 시드 데이터로 초기 모델
2. 불확실한 이미지 우선 레이블링
3. 반복적 모델 개선

효과: 전체 레이블링 대비 30-50% 비용 절감

4.2 NLP 데이터 수집

Named Entity Recognition:
- 도메인별 엔티티 정의 필요
- 전문가 어노테이션 비용 높음

액티브 러닝:
- 토큰 수준 불확실성
- 시퀀스 수준 다양성

4.3 의료 진단 보조

희귀 케이스 학습:
- 질병 케이스 불균형
- 전문의 리뷰 비용

액티브 러닝:
- 불확실한 케이스 우선 검토
- 희귀 케이스 발견

4.4 산업 품질 검사

결함 탐지 시스템:
- 새 결함 유형 발생
- 레이블 요청 최소화

적용:
- 분류 경계 근처 샘플
- 이상치 의심 샘플

5. 참고 논문/저널

핵심 논문

논문 저자 출처 기여
"Active Learning Literature Survey" Settles 2009 종합 서베이
"Deep Bayesian Active Learning with Image Data" Gal et al. ICML 2017 BALD
"Active Learning for Convolutional Neural Networks" Wang et al. 2016 CNN 액티브 러닝
"Batch Active Learning via Coordinated Matching" Kirsch et al. ICML 2019 배치 방법
"Deep Batch Active Learning by Diverse, Uncertain Gradient Lower Bounds" Ash et al. ICLR 2020 BADGE

주요 컨퍼런스

컨퍼런스 분야
ICML, NeurIPS, ICLR 알고리즘 연구
ACL, EMNLP NLP 액티브 러닝
CVPR 비전 액티브 러닝

벤치마크

데이터셋 도메인
MNIST, CIFAR-10/100 이미지 분류
ImageNet 대규모 이미지
AG News, SST-2 텍스트 분류

6. 구현 도구

도구 특징
modAL scikit-learn 기반
ALiPy 다양한 전략
libact Python 액티브 러닝
baal PyTorch 베이지안
small-text NLP 특화
from modAL.models import ActiveLearner
from modAL.uncertainty import uncertainty_sampling

# 초기 학습
learner = ActiveLearner(
    estimator=RandomForestClassifier(),
    query_strategy=uncertainty_sampling,
    X_training=X_initial, y_training=y_initial
)

# 액티브 러닝 루프
n_queries = 100
for i in range(n_queries):
    query_idx, query_inst = learner.query(X_pool)

    # 오라클에게 레이블 요청 (실제로는 인간)
    y_new = oracle(query_inst)

    learner.teach(query_inst, y_new)

    # 풀에서 제거
    X_pool = np.delete(X_pool, query_idx, axis=0)

7. 실무 가이드

액티브 러닝 체크리스트

항목 확인
레이블 비용 레이블링이 실제로 비싼가?
데이터 특성 불확실성 추정 가능한가?
오라클 빠른 레이블 제공 가능한가?
배치 크기 한 번에 몇 개 질의?
종료 조건 성능/예산 기준
콜드 스타트 초기 데이터 확보 방법

흔한 함정

함정 해결
샘플링 편향 다양성 전략 결합
모델 과신 베이지안/앙상블
배치 중복 배치 다양성 고려
노이즈 레이블 품질 검증