パラメータとハイパーパラメータ
モデルのパラメータ(重み)は学習されるものであり、トレーニングによって設定されます。ハイパーパラメータはトレーニング開始前にユーザーが設定するものであり、学習の行われ方を制御します。データを何回参照するか、各更新の規模、各更新に含まれるサンプルの数、アダプターのサイズなどです。トレーニング自体が適切なハイパーパラメータを見つけることはできません。実行、測定、調整を通じてユーザーが見つける必要があるため、最初の完璧な推測よりも、妥当なデフォルトと結果を明確に読み取る方法が重要になります。
設定
トレーニングがデータ全体を何回パスするか。少なすぎるとモデルはほとんど変化しません。多すぎるとサンプルを一言一句再現し始め(過学習)、トレーニング損失は低下し続ける一方で検証損失が上昇する現象として表れます。小さなデータセットではエポック数を少し増やすことができますが、大きなデータセットでは通常1回で十分です。選好チューニングは通常、教師あり学習よりも少ないエポック数を必要とします。また、エポックごとにコストも増加します。
各重み更新の大きさを指します。これは最も繊細な設定です。高すぎると更新が行き過ぎて損失が不安定になり、モデルが持っていたスキルを失う可能性があります。低すぎると、モデルが十分に学習する前に実行が終了してしまいます。ホスト型モデルでは、生の学習率の代わりに乗数が公開されることがよくあります。プロバイダーがそのモデルとお客様のデータに対して設定したデフォルトの学習率に、お客様が設定した値が掛けられます。つまり、1の場合はデフォルトを維持し、2の場合は2倍、0.5の場合は半分になります。オープンモデルでは、LoRAアダプターの場合は約1e-4、フルファインチューニングの場合は約1e-5といった生の学習率を使用します。
各重み更新に平均化されるサンプルの数。バッチサイズが大きいほど、更新はより滑らかで信頼性が高くなりますが、エポックあたりの更新回数は減り、より多くのメモリを必要とします。バッチサイズが小さいほど、更新頻度は高くなりますが、ノイズが多くなります。バッチサイズを変更する場合は、学習率も再検討してください。通常、バッチサイズが大きいほど高い学習率を許容し、また必要とします。小さなデータセットで非常に大きなバッチを使用すると、学習するためのステップ数が少なすぎることになります。
オープンモデルでのアダプタートレーニング用です。LoRAが各レイヤーの横でトレーニングする2つの小さな行列のランクであり、アダプターが学習できる量を設定します。トーン、スタイル、フォーマットにはランク4〜16で十分ですが、知識を多く含む大規模なデータセットではより高いランクを使用できます。ランクを高くするとメモリと時間がより多くかかり、アダプターが十分な容量に達すると効果がなくなります。LoRAのページでは、アルファ、ターゲットモジュール、ドロップアウトについて説明しています。
トレーニングの最初のステップでは、学習率は最初から最大値で始まるのではなく、ゼロに近い値から最大値まで徐々に上がります。初期段階では、オプティマイザーの実行統計は非常に少ない勾配に基づいているため、フルサイズのステップでは最初のアクションが不適切になるリスクがあります。短いウォームアップにより、不安定な開始を回避できます。これは、ステップ数または全ステップの割合として指定されます。ウォームアップ後、学習率は通常、実行の残りの期間にわたってゼロに向かって減衰します。
設定の相互作用
| 変更内容 | 併せて検討すべき事項 | 理由 |
|---|---|---|
| エポック数を増やす | より低い学習率。検証損失の監視 | パスの増加と大きなステップが組み合わさることで、過学習が悪化するため |
| バッチサイズを大きくする | より高い学習率 | エポックあたりのステップ数が減り、より信頼性が高くなるため |
| データセットを小さくする | より小さなバッチ。場合によってはエポック数を少し増やす | そうしないと、学習するためのステップ数が少なすぎるため |
| フルファインチューニングの代わりにLoRAを使用する | より高い学習率(約10倍) | アダプターはゼロから始まり、その出力はアルファ ÷ rでスケーリングされるため |
| 教師あり学習後にプレファレンスチューニングを行う | エポック数を減らし、学習率を低くする | 機能しているモデルを洗練させるため。大きなステップはモデルをドリフトさせます |
実践的なチューニングの順序
- Autoで一度実行します。 これは妥当なベースラインであり、プロバイダーがお客様のデータに対して何を選択するかを示します。
- 損失曲線を読み取ります。 検証損失が早期に上昇する場合:エポック数を減らすか、学習率を低くします。終了時に両方の損失がまだ低下している場合:エポック数を増やします。どちらも変動しない場合:まずデータを確認し、次により高い学習率を試します。
- 損失だけでなく、ベースモデルと比較して評価します。 損失が低いからといって、より良い回答が保証されるわけではありません。
- 何が違いを生んだのかを把握できるように、残りを固定したまま設定を一度に1つずつ変更します。 まず学習率とエポック数を変更します。バッチサイズとウォームアップを変更する必要はほとんどありません。
- 失敗した実行も保持します。 評価とともにアーカイブしておけば、数ヶ月後に「より高い学習率を試したか?」という疑問に答えることができます。
- 実行1(Auto): 3エポック、乗数1。トレーニング損失は全体を通して低下。検証損失はエポック2の初期に最も低くなり、その後上昇。
- 診断: 実行のほぼ中間から過学習が発生。学習率は適切に見える(曲線は滑らかで、ギザギザしていない)。
- 実行2: 2エポック、その他は変更なし。検証損失は最も低いポイントに近いところで終了し、実行コストは3分の1削減。
- 採用する前に: 実行2をベースモデルおよび実行1と比較して評価する。
よくある間違い
- 複数の設定を同時に変更すると、結果の良し悪しを説明できなくなります。
- トレーニング損失に基づくチューニング。エポック数を増やすか学習率を高くすると、ほぼ常に改善します。判断基準となるのは検証損失と評価です。
- 乗数を生の学習率として扱うこと。乗数2はプロバイダーのデフォルトを2倍にするものであり、学習率が2になるわけではありません。
- データサイズが大きく異なる実行から設定をコピーすること。ステップ数、ウォームアップ、適切なエポック数はすべてデータに応じてスケーリングします。
- ごく小さな検証セットでわずかな違いを追求すること。数十件のホールドアウトされた会話では、小さな差はノイズにすぎません。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01TrainerHugging Face Transformers docs · huggingface.co学習率やエポック数からウォームアップや重み減衰まで、トレーニング引数とそのデフォルトの完全なリスト。
- 02Linear regression: HyperparametersGoogle Machine Learning Crash Course · developers.google.com学習率、バッチサイズ、エポック数について、インタラクティブな例を用いて解説します。
- 03Accurate, Large Minibatch SGD: Training ImageNet in 1 HourGoyal et al., 2017 · arXiv · arxiv.orgバッチサイズと学習率を結びつける線形スケーリング則、および段階的なウォームアップ。
- 04Hyperparameter (machine learning)Wikipedia · en.wikipedia.org