モデル学習ガイド2:3つの実践トレーニングの比較
本稿では、エンジニアリングの視点から、LLMトレーニングにおける3つの重要なステップをわかりやすく解説します。
レンダリング中...
この記事では、LLM(大規模言語モデル)のトレーニングにおける3つの主要なステップ、PT(継続的プリトレーニング)、SFT(教師ありファインチューニング)、DPO(Preference Optimization)を、エンジニアリングの実践的な視点から分かりやすく解説します。 ## 1. PT PT(継続的プリトレーニング):モデルに「本を読み込ませる」ようなもので、あなたの注力すべき点は**「スループット」**と**「データクレンジング」**です。 **あなたの手に渡るデータ:** 巨大な `.txt` または `.jsonl` ファイルの山で、中には長い文章がひしめき合い、「質問」と「回答」の区別はありません。 **あなたの主要なアクション:** - **分割(Chunking):** 何十GBものテキストを、それぞれ2048または4096の長さのブロックに分割します。 - **学習率を上げる?いいえ、下げる:** 学習率(LR)を非常に低く設定します(例:`1e-5`)。新しい単語を少しだけ学習させたいだけで、既存のロジックを壊したくないからです。 - **監視する指標:** **Loss(損失値)**。Lossがスムーズに減少していれば、モデルが「本を読んでいる」証拠です。 **操作完了の兆候:** モデルが、あなたが与えた専門用語を理解し始めます。 ## 2. SFT SFT(教師ありファインチューニング):モデルに「台本を演じさせる」ようなもので、あなたの注力すべき点は**「会話テンプレート」**と**「Mask(マスク)」**です。 **あなたの手に渡るデータ:** 厳密な質問と回答のペアです。 - `"instruction": "失恋してどうすればいい?"` - `"output": "抱きしめてあげるね。泣けば少しは楽になるよ..."` **あなたの主要なアクション:** - **テンプレートの選択(Template):** ここが最も失敗しやすい場所です。スクリプト内で、モデルに対応するテンプレート(例:`qwen` または `llama3`)を指定する必要があります。そうしないと、モデルは学習を台無しにしてしまいます。 - **Maskの設定:** 操作スクリプトで、モデルが**Outputに対してのみLossを計算する**ように設定する必要があります。設定を誤ると、モデルはユーザーの質問も暗記してしまい、質問を繰り返すだけになってしまいます。 **監視する指標:** **検証セットの精度**と **Loss**。Lossが速すぎる(例:瞬時に0.1以下)に減少する場合は、過学習です。モデルは台本を丸暗記しています。 **操作完了の兆候:** テスト問題を入力すると、あなたが設定したトーン(例:優しさ、ユーモア)であなたと会話してくれます。 ## 3. DPO DPO(Preference Optimization):モデルに「テスト問題に答える」ようなもので、あなたの注力すべき点は**「VRAM管理」**と**「Betaパラメータ」**です。 **あなたの手に渡るデータ:** トリプレットです。各質問には、**「良い回答」**と**「悪い回答」**が続きます。 **あなたの主要なアクション:** - **デュアルモデルのロード:** VRAMがすぐに逼迫します。なぜなら、「トレーニング中のモデル」と「参照モデル」を同時にロードする必要があるからです。 - **Beta値の調整:** DPOの唯一の神秘的なパラメータです。スクリプト内で `pref_beta` を変更します。トレーニング後にモデルの応答が極端になったり、繰り返されたりする場合は、この数値を変更する必要があります(通常は0.1〜0.5の間)。 **監視する指標:** **Rewards/margins(報酬差)**。2本の線が表示されます。1本はChosen、もう1本はRejectedです。2本の線の距離が広がれば、モデルは「良い」と「悪い」を区別することを学習した証拠です。 **操作完了の兆候:** 元々「冷たく、ロボットのような」応答が消え、モデルはあなたの好みをより理解するようになります。 ## 操作の相違まとめ | **操作項目** | **PT (知識の習得)** | **SFT (ルールの学習)** | **DPO (善悪の判断)** | | ------------------- | ----------------------- | ------------------------------ | -------------------------- | | **最も苦労すること** | ゴミテキストのクレンジングと除去 | 高品質な会話スクリプトの作成と校正 | モデルが間違えた回答の事例を探し、比較対照にする | | **スクリプトの主要なスイッチ** | `stage: pt` | `stage: sft` + `template: xxx` | `stage: dpo` + `beta: 0.1` | | **VRAMの要件** | 安定(単倍のVRAM) | 安定(単倍のVRAM) | **巨大(倍のVRAM)** | | **トレーニングの回数(Epoch)** | 通常は1回のみ(反復を避ける) | 3〜5回(深く学習するため) | 1〜2回(歪みを避けるため) |
END
コメント
ログインしてコメントを閲覧・投稿してください
ログインへ