Curriculum Learning
カリキュラム学習では、難易度スコアとペーシング関数に基づき、易しい例からモデルを学習させ、時間とともに難しい例を追加します。
カリキュラム学習は、例を一様にランダム抽出するのではなく、通常は簡単なものから難しいものへと意味のある順序で提示する機械学習のトレーニング戦略です。学校のカリキュラムと同様に、ニューラルネットワークは、曖昧で雑然とした、またはノイズの多い例に取り組む前に、クリーンな例から広範で単純なパターンを学習できます。Bengioらは2009年に、ディープラーニングにおけるこの考え方を提唱しました。簡単な例から始めることで、非凸な損失関数の最適化がより良い極小値に向かうと論じ、形状認識や言語モデリングのタスクで汎化性能が大幅に向上したと報告しました。
カリキュラム学習の仕組み#
HacohenとWeinshallによると、カリキュラムにはスコアリング関数とペーシング関数という2つの要素が必要です。スコアリング関数は、物体サイズ、オクルージョン、文の長さなどの人手によるヒューリスティック、事前トレーニング済みの教師モデルの信頼度、またはトレーニング中のモデルの損失を使い、トレーニングデータを難易度順に並べます。ペーシング関数は、難しい例をトレーニング対象のプールにどれだけの速さで追加するかを決めます。たとえば、最も簡単な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らのサーベイで紹介されている主要なカリキュラム学習の系統の1つです。各ラウンドで、モデルがすでに適切に処理できるサンプルをトレーニングプールに加え、すべてのサンプルが含まれるまで損失のしきい値を上げます。
カリキュラム学習が役立つ場合#
カリキュラム学習が役立つ場面は、直感的に考えられるほど多くありません。数千回のトレーニング実行を調べたWu、Dyer、Neyshaburは、標準的な画像ベンチマークでの効果はわずかであり、拡大するプール内のデータをランダムな順序で提示しても、簡単なものから難しいものへ並べた場合と同程度の結果になることを確認しました。一方、トレーニング時間が限られている場合やラベルにノイズがある場合には、性能が向上しました。これらは、実務でカリキュラム学習が最もよく使われる状況です。
実際のアプリケーション#
ロボティクスの強化学習では、エージェントの上達に合わせてタスクの難易度を上げます。OpenAIは、自動的なドメインランダム化を使って、ロボットハンドにルービックキューブを解かせるトレーニングを行いました。方策が現在の範囲で十分に性能を発揮するたびに、シミュレーションの物理特性と外観の範囲を広げました。
コンピュータービジョンでは、物体検出のカリキュラムを、大きく遮蔽されていない物体から始め、後から小さい物体、混雑したシーン、照明の悪いシーンを加えるようにできます。Ultralytics YOLO26のトレーニングでも、時間とともに重点を変えます。エンドツーエンドの損失では、各エポックで密なone-to-manyヘッドから、 nms=Falseが使用するone-to-oneヘッドへ重みを移します。また、close_mosaic=10は最後の10エポックでmosaic、mixup、CutMix、copy-pasteのデータ拡張を無効にし、実際の入力に似た画像でトレーニングを終えます。医用画像解析では、専門のアノテーター間で意見が一致するスキャンから始め、後から曖昧なケースを加えることができます。これは、カリキュラム学習が最も有効なノイズの多いラベルの状況に適しています。
カリキュラム学習と関連概念#
- 継続学習: 継続学習では、新しいタスクやデータ分布を時間とともに追加しながら、以前のタスクを忘れないようにする必要があります。カリキュラム学習では、単一の固定されたタスクのデータ順序を変更します。
- アクティブラーニング: アクティブラーニングは、ラベル付けに回す未ラベルの例を選びます。一方、カリキュラム学習は、すでにラベルが付いた例の順序を決めます。
- 転移学習: 転移学習では、大規模で汎用的なデータセットで事前トレーニングしてから、異なる対象タスクでファインチューニングするため、段階ごとにタスク自体が変わります。
- ハードネガティブマイニング: ハード例マイニングでは、モデルが最も間違えやすい例に重点を置きます。これは簡単な例から始めるカリキュラムとは逆のアプローチです。Fast R-CNN検出器向けのオンラインハード例マイニング (OHEM)は、各画像で損失が最も大きい領域提案だけを通して誤差逆伝播を行います。










