ノートPCで270Mモデルをファインチューニングした

モデルをファインチューニングする3つの手法をテストしています。すべてに同じタスクを使用し、最小のモデルから最大のモデルへとスケールアップさせていきます。

シリーズの構成は以下の通りです:

  • Full Fine-Tuning (270M パラメータ)
  • LoRA (1.5B パラメータ)
  • QLoRA (7B パラメータ)

メカニズムを理解したいと考えています。チュートリアルを盲目的にこなすだけでは意味がないからです。

最初のステップでは、フルファインチューニング(Full Fine-Tuning)を使用しました。この手法はモデル内のすべての重みを更新します。これは、トレーニングにおいて最もコストがかかる方法です。

Banking77データセットを使用しました。これには13,000件のカスタマーサポートメッセージが含まれています。目的は、「カードの紛失」や「為替レート」といった77種類の異なるインテント(意図)を識別することです。

Gemma 3 (270M) を選択しました。このモデルは、Apple Siliconを搭載したノートPCでトレーニングできるほど十分に軽量です。フルファインチューニングでは、勾配(gradients)とオプティマイザの状態(optimizer states)を保存するために、モデルサイズの4倍のメモリが必要になります。

分類ヘッド(classification head)を追加する代わりに、モデルにインテントをテキストとして生成させました。これにより、プロセスがインストラクションチューニング(instruction tuning)と同一になります。これは、プロジェクトを次のステップへ進めるための準備でもあります。

重要なステップは、損失(loss)のマスキングです。プロンプトを無視し、ラベルのみに基づいて自身を評価するようにモデルに指示しなければなりません。これをスキップすると、モデルはプロンプトを繰り返すことを学習するために労力を無駄に消費してしまいます。

学習率は 5e-5 という低い値を使用しました。フルファインチューニングにおいて、高い学習率は事前学習済みの知識を破壊してしまいます。2e-4 の学習率では、モデルの学習に失敗しました。

結果:

  • 一般的なインテントにおいて96%の精度。
  • ノートPCで良好に動作。
  • 「カードの到着」と「配送予定」をまだ混同してしまう。

パート2では、5倍大きなモデルを使用します。LoRAを使用して、重みの1%未満をトレーニングします。同じ精度が得られるかどうかを確認する予定です。

ソース: https://dev.to/sumanpro/i-fine-tuned-a-270m-model-on-my-laptop-full-fine-tuning-from-scratch-3p4l

学習コミュニティ(任意): https://t.me/GyaanSetuAi