概要
PEFT(パラメータ効率的ファインチューニング)は、元の重みを凍結したまま少数の新しい重みをトレーニングすることでモデルを適応させる手法の総称です。2021年にHuらによって導入されたLoRA(Low-Rank Adaptation)は、最も広く使用されています。これは、ファインチューニングが大規模な重み行列に加えるべき変更は、行列自体よりもはるかに少ない数値で記述できるという1つの観察に基づいています。数学的な用語で言えば、この変更は低ランクを持ちます。
仕組み
形状がd × kの重み行列Wを持つ1つの線形レイヤーを例に挙げます。フルファインチューニングでは、同じ形状の変更ΔW、つまりd × k個の新しい数値を学習します。代わりにLoRAは、その変更を2つの薄い行列の積として学習します。A(r × k)はレイヤーの入力をr個の数値に圧縮し、B(d × r)はそれらを元に拡張します。ランクrは通常4〜64と小さいのに対し、dとkは数千の規模になります。
h = W·x + (α / r) · B·A·x
W : d × k frozen
A : r × k trainable, random at the start
B : d × r trainable, zero at the start → B·A = 0 at step 0
trainable weights per adapted layer = r × (d + k)- 初期化。 Aはランダムに、Bはゼロから開始されるため、B·A = 0となり、ステップ0の時点では適応されたモデルはベースモデルと完全に同一です。学習が進むにつれて徐々に変化します。
- スケーリング。 アダプターの出力にはalpha ÷ rが乗算されます。これにより、rが変化してもその効果の大きさがほぼ安定するため、ランクごとに学習率を再調整する必要がありません。派生型であるランク安定化LoRA(rsLoRA)は、代わりにrの平方根で除算し、高いランクでより良好に機能します。
- マージ。 学習後、B·Aを展開してWに加算することができます。マージされたモデルは元の形状を保ち、元の速度で実行され、レイテンシの増加はありません。あるいは、アダプターを小さな別ファイルとして保持し、ベースの上に読み込むことで、1つのベースモデルで複数のアダプターを処理することも可能です。
- 1つの4096 × 4096アテンション射影: Wに1,680万の重み。
- ランク8のLoRA: Aは8 × 4096、Bは4096 × 8であるため、2 × 4096 × 8 = 65,536の学習可能な重みとなり、レイヤーの0.4%に相当します。
- すべての線形レイヤーにおいてランク16のLlama型7Bモデル(32の各レイヤーに4つのアテンション射影と3つのMLP射影):約4,000万の学習可能な重みとなり、モデルの約0.6%に相当します。
- 学習メモリ: これら4,000万の重みは、勾配とAdamWの状態に約0.6 GBを必要とします。これに対し、70億すべてのフルファインチューニングには約112 GBが必要です。
- 保存されたアダプターは16ビットで約80 MBですが、モデルの完全なコピーには14 GBが必要です。
- 元の論文では、GPT-3 175Bにおいて、LoRAはAdamを用いたフルファインチューニングと比較して、学習可能なパラメータを最大10,000分の1に、GPUメモリを約3分の1に削減しました。
設定
AとBの内部次元であり、アダプターの容量でもあります。つまり、各レイヤーで学習できる独立した変更の方向の数を示します。トレーニング可能な重みはrに比例して増加します。トーン、スタイル、フォーマットには低いランクで十分ですが、知識を多く含む大規模なデータセットでは、より高いランクが有効です。アダプターがデータに対して十分な容量を持つと、ランクを上げても結果は改善されず、コストが追加されるだけになります。一部のプロバイダーはこれをアダプターサイズと呼んでいます。
スケーリング係数:アダプターの出力にはalpha ÷ rが乗算されます。アルファを大きくすると、高い学習率と同様に、各更新の影響が大きくなります。そのため、多くの設定ではアルファを固定し、代わりに学習率を調整します。一般的な慣例としては、アルファをrと同じにする、アルファをrの2倍にする、または16や32などの固定値にするなどがあります。1つの慣例を選び、それを維持してください。アルファを固定したままrを変更すると、スケールも変更されます。
- ターゲットモジュールは、どのレイヤーにアダプターを適用するかを決定します。元の論文では、アテンションのクエリとバリューの射影のみを適応させていました。QLoRAやThinking Machinesによる2025年の研究を含むその後の研究では、フルファインチューニングに匹敵するためには、すべての線形レイヤー、特にMLP(フィードフォワード)レイヤーを適応させる必要があることが判明しました。通常、ライブラリには「すべての線形レイヤー」のオプションが用意されています。
- LoRAドロップアウトは、トレーニング中にアダプターの入力の一部をランダムにゼロにします。これは、小規模なデータセットでの過学習に対する緩やかな防御策となります。一般的な値は0から0.1です。
- 学習率。 LoRAは通常、フルファインチューニングよりも高い学習率を必要とします。Thinking Machinesの研究では約10倍高く、また最適な学習率はランク間でほとんど変化しないことも判明しました。
- バッチサイズ。 同研究では、LoRAはフルファインチューニングほど非常に大きなバッチを許容できないことが判明したため、中程度のバッチサイズを選択する方が安全です。
QLoRA:4ビットベース上のアダプター
QLoRA(Dettmersら、2023年)は、通常の16ビットLoRAアダプターをトレーニングしますが、凍結されたベースモデルを正規分布の重み用に設計された4ビット形式(NF4)で保存します。これには、量子化定数自体を圧縮する二重量子化と、メモリのスパイクを吸収するページドオプティマイザが追加されています。この論文では、16ビットファインチューニングのタスクパフォーマンスを維持しながら、単一の48 GB GPUで650億パラメータのモデルをファインチューニングしました。トレードオフは速度です。4ビットの重みはオンザフライで展開されるため、各ステップはやや遅くなります。
LoRAが適切な選択となる場合
| 状況 | 推奨される手法 |
|---|---|
| 数百から数千のサンプルに基づく、トーン、フォーマット、またはドメイン固有の言い回し | LoRA |
| 限られたGPUメモリまたは予算 | LoRA、またはQLoRA |
| 1つのベースモデルに対する複数のタスク固有のバリアント | LoRA:それぞれに1つの小さなアダプター |
| ベースモデルの一般的な能力を維持することが重要 | 忘却が少ないLoRA |
| コードや数学など、実質的な新しいスキルを学習させるための非常に大規模なデータセット | フルファインチューニングにより、さらに多くの学習が可能になる場合があります |
よくある間違い
- アテンションレイヤーのみを適応させること。ほとんどのファインチューニングデータにおいて、これはMLPを含むすべての線形レイヤーにアダプターを適用した場合よりもパフォーマンスが劣ります。
- フルファインチューニングの学習率を再利用すること。LoRAは通常、約10倍高い学習率を必要とします。そうでない場合、ほとんど学習が進みません。
- アルファを固定したままランクを変更し、alpha ÷ r、つまり実効的なステップサイズも変更されていることに気づかないこと。
- より高いランクが、小規模または一貫性のないデータセットを救うと期待すること。サンプルに明確なパターンがない場合、容量を増やしても効果はありません。
- トレーニング時とは異なるベースモデル、またはその異なるバージョンにアダプターをロードすること。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01LoRA: Low-Rank Adaptation of Large Language ModelsHu et al., 2021 · arXiv · arxiv.org元の論文:低ランクのアイデア、alpha ÷ rのスケーリング、およびGPT-3の結果。
- 02QLoRA: Efficient Finetuning of Quantized LLMsDettmers et al., 2023 · arXiv · arxiv.org4ビットNF4ベース重み、二重量子化、およびページドオプティマイザ。
- 03LoRA Without RegretThinking Machines Lab, 2025 · thinkingmachines.aiLoRAがフルファインチューニングに匹敵する場合、すべてのレイヤーが重要である理由、および10倍の学習率の法則。
- 04LoRAHugging Face PEFT docs · huggingface.co実装されているすべてのLoRA設定:ランク、アルファ、ドロップアウト、ターゲットモジュール、およびrsLoRA。
- 05A Rank Stabilization Scaling Factor for Fine-Tuning with LoRAKalajdzievski, 2023 · arXiv · arxiv.org