능동 학습(Active Learning): 쿼리 전략으로 레이블링 비용을 줄이는 법
능동 학습이 불확실성 샘플링·QBC·밀도 가중 같은 쿼리 전략으로 레이블링 비용을 줄이는 원리와 콜드 스타트·분포 편향 같은 한계, 평가 지표를 정리한다.
2026-08-14 · 최초 발행 2025-05-23
레이블된 데이터를 충분히 확보하는 것은 지도학습 기반 시스템을 구축할 때 가장 먼저 부딪히는 병목이다. 데이터를 모으는 일 자체는 갈수록 쉬워지지만, 그 데이터에 정답을 붙이는 작업은 여전히 사람의 시간과 전문성을 요구한다. 능동 학습(Active Learning)은 이 병목을 정면으로 다루는 접근이다 — 모델이 레이블 없는 데이터 풀 전체를 무작위로 학습하는 대신, 학습에 가장 유용한 샘플을 스스로 골라 레이블링을 요청한다.
쿼리 전략: 무엇을 먼저 물어볼지 고르는 기준
능동 학습의 핵심은 '쿼리 전략(Query Strategy)'이다. 모델이 현재 상태에서 어떤 데이터를 레이블링 요청할지 결정하는 메커니즘이다.
가장 널리 쓰이는 것은 불확실성 샘플링(Uncertainty Sampling)으로, 현재 모델이 가장 자신 없어 하는 데이터 포인트를 고른다. 구현 방식은 세 갈래로 나뉜다 — 가장 낮은 예측 확률을 가진 샘플을 고르는 최소 신뢰도 방식, 가장 높은 엔트로피를 가진 샘플을 고르는 엔트로피 방식, 가장 높은 확률과 두 번째로 높은 확률의 차이가 가장 작은 샘플을 고르는 마진 샘플링이다.
쿼리 바이 커미티(Query by Committee, QBC)는 여러 모델(커미티)을 동시에 훈련시키고, 그 모델들의 의견이 가장 크게 갈리는 샘플을 고른다. 다양한 모델이 서로 다르게 판단하는 데이터일수록 정보량이 높다고 보는 방식이다.
예상 모델 변화(Expected Model Change)는 레이블링했을 때 모델 파라미터에 가장 큰 변화를 가져올 샘플을 고르며, 그래디언트의 크기를 기준으로 평가하는 경우가 많다. 밀도 가중 방법(Density-Weighted Methods)은 불확실성과 데이터 분포의 대표성을 함께 고려해, 데이터 공간에서 밀도가 높은 지역 안의 불확실한 샘플을 우선한다.
파이썬으로 능동 학습 루프 구현하기
modAL 같은 프레임워크를 쓰면 불확실성 샘플링 기반 능동 학습 루프를 몇 줄로 구현할 수 있다.
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from modAL.models import ActiveLearner
from modAL.uncertainty import uncertainty_sampling
# 초기 데이터와 레이블
X_initial = np.array([[1, 2], [5, 8], [10, 9], [8, 1]])
y_initial = np.array([0, 1, 1, 0])
# 레이블되지 않은 데이터 풀
X_pool = np.random.random((100, 2)) * 10
# 능동 학습기 초기화
learner = ActiveLearner(
estimator=RandomForestClassifier(),
X_training=X_initial, y_training=y_initial,
query_strategy=uncertainty_sampling
)
# 능동 학습 반복 수행
n_queries = 10
for i in range(n_queries):
# 불확실성이 가장 높은 샘플 선택
query_idx, query_instance = learner.query(X_pool, n_instances=1)
# 실제 환경에서는 이 부분에서 인간 전문가가 레이블 제공
# 예시에서는 임의로 레이블 생성
y_new = np.random.randint(0, 2, size=1)
# 모델 업데이트
learner.teach(X_pool[query_idx], y_new)
# 선택된 데이터를 풀에서 제거
X_pool = np.delete(X_pool, query_idx, axis=0)
learner.query()가 쿼리 전략에 따라 다음에 레이블링할 샘플을 고르고, 사람(또는 오라클)이 레이블을 붙이면 learner.teach()로 모델을 갱신한 뒤 그 샘플을 풀에서 제거하는 흐름이다.
콜드 스타트에서 계산 비용까지, 실전에서 부딪히는 문제
능동 학습을 실제로 운영하면 몇 가지 문제가 반복적으로 나타난다.
콜드 스타트 문제는 초기에 레이블된 데이터가 너무 적으면 적절한 쿼리 자체가 어려워지는 상황이다. 랜덤 샘플링으로 초기 데이터를 먼저 확보한 뒤 능동 학습을 적용하는 방식으로 대응한다. 분포 편향(Distribution Bias)은 샘플링 과정이 데이터 공간의 특정 영역에 치우치는 경향으로, 밀도 기반 샘플링이나 다양성을 고려하는 쿼리 전략으로 완화한다.
모델 의존성도 있다 — 쿼리의 품질이 현재 모델의 품질에 크게 좌우되기 때문에, 앙상블 접근법이나 더 강건한 쿼리 전략을 쓴다. 일부 쿼리 전략은 계산 비용이 높아지는데, 효율적인 근사 알고리즘이나 배치 쿼리로 대응하는 경우가 많다.
효과를 어떻게 확인하는가
능동 학습이 실제로 레이블링 비용을 줄였는지는 학습 곡선(Learning Curve) — 레이블된 데이터 수가 늘어남에 따른 성능 변화 — 으로 확인한다. 레이블링 효율성은 동일한 성능에 도달하는 데 필요한 레이블 수를 기준 모델과 비교해서 판단하고, AUC-LAC(Area Under the Learning-Active Curve)는 이 효율성을 단일 수치로 요약한 지표다.
어떤 프레임워크로 시작할 수 있는가
파이썬에서는 Scikit-learn과 호환되는 modAL이 가장 널리 쓰이고, ALiPy는 더 다양한 시나리오와 평가 지표를 지원한다. 딥러닝 모델에는 TensorFlow·PyTorch 확장을 통해 능동 학습을 적용하며, Bayesian Neural Networks로 불확실성을 추정하는 방식이 함께 쓰인다.
레이블링 비용이 가장 아픈 곳들
능동 학습은 레이블링 자체가 비싼 도메인에서 값을 발휘한다. 방사선 전문의의 시간이 제한된 의료 영상 분석에서는 진단이 가장 어려운 영상만 선별해 레이블링을 요청하고, 고객 리뷰 분류에서는 판단이 불확실한 리뷰만 사람이 검토한다. 산업 현장의 이상 탐지에서는 센서 데이터 중 이상 패턴을 보이는 것만 전문가가 분석하고, 자율주행에서는 카메라가 포착한 수많은 장면 중 인식이 불확실한 상황만 수동으로 레이블링한다.
자기지도 학습과 결합해 레이블 없는 데이터에서도 유용한 표현을 먼저 학습해두면 능동 학습의 초기 성능이 올라간다. 메타러닝 기반으로 도메인 특성에 맞는 쿼리 전략 자체를 자동으로 학습하려는 시도도 이어지고 있고, 인간 전문가의 피로도와 정확도를 고려한 쿼리 전략·인터페이스 설계도 계속 다뤄지는 과제다.