Curriculum Learningのメモ

ChatGPTさんによるCurriculum Learningとは
カリキュラム学習は、機械学習の一手法であり、簡単なサンプルから徐々に難しいサンプルへと段階的に学習していくことで、モデルの学習効率と性能を向上させることを目指しています。この手法は人間が学び方を模倣しており、人間が新しいスキルを学ぶ際には基本的な概念から始めて徐々に難易度を上げていくのと同様です。
LLM(Large Language Models)などの事前学習モデルにおいてカリキュラム学習を適用する際、学習プロセスは通常、大量のテキストデータを用いて行われますが、これらのデータをランダムに提供するのではなく、学習の難易度に応じて順序付けして提供します。例えば、初期段階では文法的にシンプルで内容的にも理解しやすいテキストを使用し、モデルがこれらを学習した後、徐々により複雑な構造を持つテキストや、抽象的な概念を含むテキストへと移行していきます。
カリキュラム学習の利点は以下の通りです:
効率的な学習: 初期段階で簡単な例から学習することで、モデルが基本的な概念を早期に把握し、後の段階でより複雑な概念に対処するための基礎を築きます。
収束の改善: 段階的な難易度の上昇は、学習過程の安定性を向上させ、収束に至るまでの時間を短縮する可能性があります。
性能の向上: モデルが様々な難易度のデータに対処する能力を段階的に向上させることで、最終的なモデルの性能が向上することが期待されます。
カリキュラム学習を実装する際の課題の一つは、どのようにしてテキストの難易度を定量化し、適切な順序で学習データを提供するかという点です。これにはテキストの複雑さを評価するための指標の開発や、適切な学習スケジュールの設計が含まれます。また、全てのモデルやタスクにおいてカリキュラム学習が有効であるわけではなく、適用する場合はその有効性を検証する必要があります。

DeepSpeedでは文章の長さで難易度を定量化
configの設定例
"curriculum_type": "seqlen",
"min_difficulty": 8,
"max_difficulty": 1024,
curriculum_typeは現状seqlen
のみサポート

schedule_typeには、fixed_linear
、fix_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
モデルが特定の難易度に長時間留まると、次の難易度に切り替えるときに過学習を起こす可能性がある。

Token-based LR decayPermalink
Curriculum Learningによりバッチごとのトークンの数が変化するので、token baseのLR decayに変える必要がある。LR warmupについては、token baseを利用しない。

DeepSpeedによる解説と実装
各configの説明