リソース/モデルのトレーニング/トレーニング手法

手法

教師ありファインチューニング(SFT)

教師ありファインチューニングは、例を用いてモデルに学習させます。会話と希望する返答を提示し、その返答がトークンごとに生成されやすくなるように重みを微調整します。

第7章読了時間 2分参考文献 5件

概要

教師ありファインチューニングは、モデルの振る舞いを変更する最も直接的な方法です。望ましい会話の例を与え、その回答を再現するようにトレーニングします。「教師あり」とは、すべての例に正解が付与されていることを意味します。モデルは判断や探索を求められるのではなく、それぞれのコンテキストにおいて次に続くべき正しい言葉を指示されます。

事前学習済みモデルは、公開されているテキストから言語や世界に関する膨大な知識をすでに学習しています。しかし、貴社の製品、チームのトーン、ユーザーが期待するフォーマットはまだ学習していません。SFTは、事前学習で使用される数兆個のトークンではなく、数百から数千の優れた会話という比較的小さなデータセットでそのギャップを埋めます。LIMAの研究はこの点を明確に示しています。厳選されたわずか1,000個の例でファインチューニングされた65Bパラメータのモデルが、有能なアシスタントとして機能しました。著者らはこれを、ほぼすべての知識は事前学習で獲得され、ファインチューニングは主にその知識を使用するためのフォーマットを教えるものであるという証拠として解釈しています。

仕組み

各トレーニングレコードは1つの会話です。トレーニング可能としてマークしたアシスタントの回答がターゲットであり、ターゲットより前にあるすべての情報がコンテキストとなります。

1つの教師ありレコード(チャット形式)
{"messages": [
  {"role": "system",    "content": "You are Scalata's support assistant."},
  {"role": "user",      "content": "How do I reset my password?"},
  {"role": "assistant", "content": "Open Settings → Security and choose Reset password. You'll get an email link valid for 30 minutes."}
]}

モデルはレコードをトークンの長いシーケンスとして読み込みます。ターゲット内の各位置で、語彙内のすべてのトークンに対する確率を予測し、トレーナーは実際に次に来るトークンにどれだけの確率が与えられたかを確認します。1つのトークンに対するペナルティは−ln p、つまりその確率の負の自然対数です。回答全体で平均化したものが交差エントロピー損失となります。

1行で表すクロスエントロピー
loss for one reply = average over its target tokens of  −ln p(correct next token | everything before it)

p = 0.90  →  0.11
p = 0.50  →  0.69
p = 0.05  →  3.00

ターゲットトークンのみがスコアリングされます。システムメッセージとユーザーの言葉は予測を形成するために読み込まれますが、評価されることはありません。これが損失マスキングです。モデルはユーザーを模倣するのではなく、貴社のチームのように回答することを学習します。

systemあなたはScalataのサポートアシスタントです。読み取り · マスク済み
userパスワードをリセットするにはどうすればよいですか?読み取り · マスク済み
assistant設定 → セキュリティを開き、パスワードをリセットを選択します。スコア化 · 損失計上
モデルはすべてのトークンを読み取りますが、その誤差はターゲットとなる返答でのみ測定されます。コンテキストは予測を形成しますが、それ自体が評価されることはありません。
コンテキスト(読み取りのみ、スコアリングなし): “パスワードをリセットするにはどうすればよいですか?”
Openp 0.20 · 1.61␣Settingsp 0.85 · 0.16␣→p 0.62 · 0.48␣Securityp 0.90 · 0.11
ペナルティの合計 2.364つのターゲットトークン損失 ≈ 0.59
1回に1つのターゲットトークンを対象とした教師あり損失。各トークンのペナルティは −ln p であり、p はモデルが正しいトークンを出力した確率です。確信を持った正しい推測のコストはほぼゼロですが、予期しない結果のコストは大きくなります。回答の損失はその平均値となります。

各バッチの後、バックプロパゲーションによって、ターゲットトークンの確率を高めるために各トレーニング可能な重みをどのように変更すべきかが計算され、オプティマイザがその方向に小さなステップを踏み出します。学習率がそのステップサイズを決定します。すべてのレコードを1回処理することをエポックと呼びます。

1つの返答のトークンごとのスコアリング
  1. ターゲットの返答は「Open Settings → Security」で始まります。モデルがこれら4つのトークンに0.20、0.85、0.62、0.90の確率を与えたとします。
  2. ペナルティは、−ln 0.20 = 1.61、−ln 0.85 = 0.16、−ln 0.62 = 0.48、−ln 0.90 = 0.11となります。
  3. それらの合計は2.36で、4つのトークンの平均は約0.59です。ペナルティの大部分は最初の単語によるものです。モデルは返答が「Open」で始まるとは予想していませんでした。
  4. この更新により4つすべての確率が上昇し、最も意外なものが最も大きく上昇します。各トークンへの押し上げは、その確率が1からどれだけ離れているかに応じて大きくなるためです。類似の返答で数エポック実行すると、平均は約0.2まで低下する可能性があります。

SFTの得意なことと不得意なこと

目標SFT?理由
一貫したトーンとボイスはいデータ内のすべての回答がそれを示しています。
固定の出力フォーマット(セクション、JSON、長さ)はいフォーマットは提示しやすく、トークンごとにスコアリングするのも容易です。
ドメイン特有の言い回しと製品の語彙はいモデルは貴社のチームが使用する言葉を習得します。
頻繁に変化する事実(価格、在庫、ポリシー)まれ学習された事実は古くなります。回答時に検索する方が安全です。
単一の正解がない「より優れている」という判断部分的プレファレンスチューニングは比較を直接表現します。
結果を確認できるタスク(計算、テストに合格するコード)部分的強化学習によるファインチューニングは、固定された1つの言い回しではなく、正しい結果に対して報酬を与えることができます。

SFTにおける予期せぬ結果のほとんどは、「模倣する」という1つの特性で説明できます。10回に1回の割合で、回答する代わりに「サポートにお問い合わせください」と返答している場合、モデルも約10回に1回の割合でそう言うように学習します。回答に矛盾がある場合、モデルは両方が混ざった曖昧な内容を学習します。ターゲットの数よりも、クリーンで一貫性のあるターゲットであることが重要です。

チューニング方法

ほとんどの教師あり学習の実行では、チューニングはほとんど必要ありません。プロバイダーのデフォルト設定(「Auto」)から始め、学習曲線を確認しながら、一度に1つずつ変更を加えてください。

エポック一般的 1〜3、またはAuto#

モデルがすべてのトレーニングレコードを参照する回数です。少なすぎると回答はほとんど変化せず、多すぎるとモデルが例を暗記してしまうため、トレーニング損失は低下し続ける一方で検証損失は上昇に転じます。通常、小規模なデータセットは大規模なものよりも多くのエポックを許容します。

学習率乗数一般的 プロバイダーのデフォルト(×0.5–2)#

ホスト型モデルでは、プロバイダー独自のデフォルト学習率に対する乗数が公開されており、生の値ではありません。1より大きいと学習は速くなりますが、オーバーシュートしたり一般的なスキルを損なう可能性があります。1未満だとより穏やかで遅くなります。検証損失にノイズが多い場合や早期に上昇する場合は、この値を下げてください。

  • 両方の損失が低下している場合: まだ学習中です。もう1エポック追加すると効果的かもしれません。
  • トレーニングの損失が低下し、検証の損失が横ばいになる場合: ほぼ適切です。ここで停止してください。
  • トレーニングの損失が低下し、検証の損失が上昇する場合: 過学習です。エポック数を減らすか、乗数を下げるか、より多様なデータを使用してください。
  • どちらもあまり変動しない場合: データに一貫性がないか、学習率が低すぎる可能性があります。

よくある間違い

  • 繰り返されたくない回答でトレーニングすること。質の低い回答、古い回答、一貫性のない回答も、優れた回答と同じように忠実に学習されてしまいます。
  • 小規模なデータセットで多数のエポックを実行し、低下するトレーニング損失を過信すること。検証損失を注視してください。
  • 変化する事実を記憶させるためにSFTを使用すること。事実が変わっても、モデルは古い事実を繰り返し続けます。
  • 損失のみで実行結果を判断すること。損失が低いということは、回答をより忠実に模倣していることを意味するだけであり、必ずしも回答の質が向上しているとは限りません。評価を実行してください。
  • 検証用の分割を残さないこと。これにより、過学習を検出する手段がなくなります。

参考文献および関連資料

外部ソースは新しいタブで開きます。

  1. 01SFT TrainerHugging Face TRL docs · huggingface.coトークンレベルの交差エントロピー損失を書き出し、コンプリーションのみのトレーニングがどのように機能するかを示します。
  2. 02Supervised fine-tuningOpenAI API docs · developers.openai.comホスティングプロバイダーによるウォークスルー:データフォーマット、ハイパーパラメータ、および結果の評価。
  3. 03LIMA: Less Is More for AlignmentZhou et al., 2023 · arXiv · arxiv.org厳選された1,000個の例は、65Bモデルを強力なアシスタントにファインチューニングするのに十分でした。
  4. 04Training language models to follow instructions with human feedbackOuyang et al., 2022 · arXiv · arxiv.orgInstructGPT:教師ありファインチューニングを最新のポストトレーニングの第一歩とした論文。
  5. 05Finetuned Language Models Are Zero-Shot LearnersWei et al., 2021 · arXiv · arxiv.org指示に基づくファインチューニングが、モデルが未経験の指示に従うのに役立つことを示す初期の証拠。

専門家が数週間かける作業を数分に短縮します

Scalataがお客様のチーム、データ、および統制にどのように適合するかをご確認ください。

営業へのお問い合わせ