Open5

Curriculum Learningのメモ

if001if001

ChatGPTさんによるCurriculum Learningとは

カリキュラム学習は、機械学習の一手法であり、簡単なサンプルから徐々に難しいサンプルへと段階的に学習していくことで、モデルの学習効率と性能を向上させることを目指しています。この手法は人間が学び方を模倣しており、人間が新しいスキルを学ぶ際には基本的な概念から始めて徐々に難易度を上げていくのと同様です。

LLM(Large Language Models)などの事前学習モデルにおいてカリキュラム学習を適用する際、学習プロセスは通常、大量のテキストデータを用いて行われますが、これらのデータをランダムに提供するのではなく、学習の難易度に応じて順序付けして提供します。例えば、初期段階では文法的にシンプルで内容的にも理解しやすいテキストを使用し、モデルがこれらを学習した後、徐々により複雑な構造を持つテキストや、抽象的な概念を含むテキストへと移行していきます。

カリキュラム学習の利点は以下の通りです:

効率的な学習: 初期段階で簡単な例から学習することで、モデルが基本的な概念を早期に把握し、後の段階でより複雑な概念に対処するための基礎を築きます。
収束の改善: 段階的な難易度の上昇は、学習過程の安定性を向上させ、収束に至るまでの時間を短縮する可能性があります。
性能の向上: モデルが様々な難易度のデータに対処する能力を段階的に向上させることで、最終的なモデルの性能が向上することが期待されます。
カリキュラム学習を実装する際の課題の一つは、どのようにしてテキストの難易度を定量化し、適切な順序で学習データを提供するかという点です。これにはテキストの複雑さを評価するための指標の開発や、適切な学習スケジュールの設計が含まれます。また、全てのモデルやタスクにおいてカリキュラム学習が有効であるわけではなく、適用する場合はその有効性を検証する必要があります。

if001if001

DeepSpeedでは文章の長さで難易度を定量化

configの設定例

"curriculum_type": "seqlen",
"min_difficulty": 8,
"max_difficulty": 1024,

curriculum_typeは現状seqlenのみサポート

if001if001

schedule_typeには、fixed_linearfix_root fixed_discreteが指定できる

fixed_linear

"schedule_type": "fixed_linear",
"schedule_config": {
  "total_curriculum_step": 15000,
  "difficulty_step": 8
}

難易度は、total_curriculum_stepの間min_difficultyからmax_difficultyへ徐々に線形増加する
total_curriculum_stepは大きくても小さくても良くない。
詳細はドキュメント参照

fixed_root schedule

1/root_degree乗の緩やかな形で徐々に難易度が増加、root_degree=1のときにfixed_linearになる。

"schedule_type": "fixed_root",
"schedule_config": {
  "total_curriculum_step": 15000,
  "difficulty_step": 8,
  "root_degree": 2
}

## fixed_discrete schedule
離散的に難易度が増加

"schedule_type": "fixed_discrete",
"schedule_config": {
"difficulty": [1,2,3],
"max_step": [5,10]
}


stepが1-5のとき、難易度1
stepが6-10のとき、難易度2
stepが11-のとき、難易度3

モデルが特定の難易度に長時間留まると、次の難易度に切り替えるときに過学習を起こす可能性がある。