Curriculum Learning
커리큘럼 학습은 난이도 점수와 학습 속도 조정 함수를 바탕으로 쉬운 예제부터 모델을 학습시키고 시간이 지남에 따라 더 어려운 예제를 추가합니다.
커리큘럼 학습은 예제를 무작위로 균일하게 샘플링하는 대신, 보통 쉬운 예제부터 어려운 예제까지 의미 있는 순서로 제시하는 머신러닝 학습 전략입니다. 학교 교육과정처럼 신경망이 모호하고 복잡하거나 노이즈가 있는 예제를 접하기 전에 깨끗한 예제에서 광범위하고 단순한 패턴을 학습하도록 합니다. Bengio 외는 2009년 딥러닝 분야에 이 개념을 제시하면서, 쉬운 예제부터 시작하면 비볼록 손실 함수의 최적화가 더 나은 최솟값을 향하도록 이끌 수 있다고 주장했으며, 형태 인식 및 언어 모델링 작업에서 일반화 성능이 크게 향상되는 결과를 보고했습니다.
커리큘럼 학습의 작동 방식#
Hacohen과 Weinshall이 채점 함수와 페이싱 함수라고 부르는 두 가지 요소가 커리큘럼에 필요합니다. 채점 함수는 객체 크기, 가림 정도, 문장 길이와 같은 휴리스틱, 사전 학습된 교사 모델의 신뢰도, 또는 학습 중인 모델의 손실을 이용해 학습 데이터의 난이도를 평가합니다. 페이싱 함수는 더 어려운 예제를 학습 풀에 얼마나 빠르게 추가할지 결정합니다. 예를 들어 가장 쉬운 20%부터 시작해 전체 데이터셋까지 선형적으로 늘릴 수 있습니다. 아래 코드는 scikit-learn을 사용해 교사 모델로 장난감 데이터셋의 점수를 매기고, 가장 쉬운 데이터부터 포함하는 확장 풀로 학생 모델을 학습합니다.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression, SGDClassifier
# A toy dataset with 10% flipped labels, so some samples are genuinely hard
X, y = make_classification(n_samples=2000, n_features=20, flip_y=0.1, random_state=0)
# Scoring function: a teacher's confidence in each true label, sorted easiest first
teacher = LogisticRegression(max_iter=1000).fit(X, y)
confidence = teacher.predict_proba(X)[np.arange(len(y)), y]
order = np.argsort(-confidence)
# Pacing function: start with the easiest 20% and add 20% more each epoch
student = SGDClassifier(random_state=0)
for epoch in range(5):
pool = order[: int((0.2 + 0.2 * epoch) * len(order))]
student.partial_fit(X[pool], y[pool], classes=[0, 1])
print(f"Epoch {epoch}: {len(pool)} samples, mean teacher confidence {confidence[pool].mean():.2f}")풀은 샘플 400개에서 2,000개로 늘어나며, 가장 어렵고 마지막에 추가되는 샘플 20%가 포함되는 마지막 에포크에는 교사 모델의 평균 신뢰도가 0.99에서 0.89로 낮아집니다.
자기 주도 학습은 모델이 현재 손실을 바탕으로 자체 커리큘럼을 구성하게 하여 교사 모델의 필요성을 없애며, Soviany 외의 조사 논문에서 다룬 주요 커리큘럼 계열 중 하나입니다. 각 라운드에서 모델이 이미 잘 처리하는 샘플을 학습 풀에 추가하고, 모든 샘플이 포함될 때까지 손실 임계값을 높입니다.
커리큘럼 학습이 효과적인 경우#
직관이 시사하는 것만큼 커리큘럼이 효과적인 경우는 많지 않습니다. 수천 회의 학습 실행을 조사한 Wu, Dyer, Neyshabur는 표준 이미지 벤치마크에서 개선 폭이 미미했으며, 확장되는 풀 안에서 데이터를 무작위 순서로 제시해도 쉬운 예제부터 어려운 예제 순으로 제시한 경우와 비슷한 성능을 보인다는 점을 확인했습니다. 커리큘럼은 학습 시간 예산이 제한되거나 라벨에 노이즈가 있는 경우에 성능을 개선했으며, 이는 실무자들이 커리큘럼을 가장 자주 사용하는 상황입니다.
실제 적용 사례#
로보틱스를 위한 강화 학습에서는 에이전트가 향상됨에 따라 태스크 난이도를 높입니다. OpenAI는 자동 도메인 무작위화를 적용해 로봇 손으로 루빅스 큐브를 풀도록 학습했습니다. 정책이 현재 범위에서 충분히 좋은 성능을 보일 때마다 시뮬레이션된 물리 속성과 외관의 범위를 넓혔습니다.
컴퓨터 비전에서 객체 감지 커리큘럼은 크고 가려지지 않은 객체부터 시작해 이후 작거나 밀집되어 있거나 조명이 어두운 장면을 추가할 수 있습니다. Ultralytics YOLO26 학습도 시간에 따라 강조점을 바꿉니다. 엔드투엔드 손실은 매 에포크마다 조밀한 일대다 헤드에서 nms=False이 사용하는 일대일 헤드로 가중치를 옮기며, close_mosaic=10는 마지막 10개 에포크에서 모자이크, 믹스업, CutMix, 카피-페이스트 증강을 비활성화해 실제 입력과 비슷한 이미지로 학습을 마무리합니다. 의료 영상 분석에서는 전문가 어노테이터가 동의하는 스캔으로 학습을 시작한 다음 모호한 사례를 추가할 수 있어, 커리큘럼이 가장 효과적인 노이즈 라벨 상황에 적합합니다.
커리큘럼 학습과 관련 개념 비교#
- 연속 학습: 시간이 지나며 새 태스크나 데이터 분포를 추가하고 기존 태스크를 잊지 않도록 해야 합니다. 커리큘럼 학습은 고정된 단일 태스크의 데이터 순서를 바꿉니다.
- 액티브 러닝: 라벨링할 미라벨 예제를 선택하는 반면, 커리큘럼 학습은 이미 라벨이 지정된 예제의 순서를 정합니다.
- 전이 학습: 일반적인 대규모 데이터셋으로 사전 학습한 다음 다른 타깃 태스크에 파인튜닝하므로, 단계 사이에 태스크 자체가 바뀝니다.
- 하드 네거티브 마이닝: 하드 예제 마이닝은 모델이 가장 크게 틀리는 예제에 중점을 두며, 이는 쉬운 예제부터 시작하는 커리큘럼과 반대입니다. Fast R-CNN 감지기의 온라인 하드 예제 마이닝(OHEM)은 각 이미지에서 손실이 가장 큰 영역 제안에 대해서만 역전파합니다.










