トピックハブ

ファインチューニングとアライメント

事前学習済み言語モデルを指示に従うモデルに変える方法。教師ありファインチューニング、LoRAとQLoRA、報酬モデルとRLHF、直接選好最適化、そして結果の確認方法を解説します。

更新 2026年11月13日 · 教師ありファインチューニング、LoRA、QLoRA、RLHF、DPO、報酬モデル、指示データ、アライメント評価

概要

事前学習済みモデルは、テキストのもっともらしい続きを予測します。質問に答えたり、書式に従ったり、何かを拒否したりはしません。次トークン予測にはそれを求めるものが何もないからです。ファインチューニングとアライメントは、ベースモデルをAPI経由で呼び出すアシスタントに変える段階であり、同じ段階をより小さな規模で行うことが、オープンモデルを自分のタスク、書式、ドメインに適応させる方法です。このハブは、現場のエンジニアが出会う手法を扱います。教師ありファインチューニング、パラメータ効率の良いアダプタ、選好最適化、そしてそれらが効いたかどうかを教えてくれる評価です。

最も重要な判断は、これらすべての前にあります。ファインチューニングはモデルの振る舞いを変えますが、事実を追加するのは苦手です。問題が知識の欠如なら、検索のほうが安価で更新も容易です。問題が書式、口調、狭いタスク、あるいは長いプロンプトによるレイテンシなら、小さなオープンモデルをファインチューニングするほうが、大きなモデルにプロンプトを与えるより優れていることがよくあります。

重要な考え方

教師ありファインチューニングは書式を教える

教師ありファインチューニング(SFT)は、望む振る舞いの例、すなわちプロンプトと理想的な応答を、ロールマーカー付きのモデルのチャットテンプレートを通して描画したもので学習を続けます。損失は事前学習と同じ次トークンの交差エントロピーで、通常はアシスタントのトークンだけが数えられるようマスクされます。丁寧に書かれた数千の例は、かき集めた10万の例に勝ります。これは2023年のLIMA論文の知見で、品質の基準は、各応答が本番に出ても満足できるかどうかです。チャットテンプレートは正確に合わせてください。あるテンプレートで学習し別のテンプレートで提供されたモデルは、静かに劣化します。

LoRAとQLoRAが手頃にする

7 Bモデルを16ビットでAdamを使ってフルファインチューニングすると、重み、勾配、最適化器の状態でパラメータあたり約16バイトが必要で、活性化を除いて110 GB以上になります。LoRAはベースの重みを凍結し、選んだ行列に対して低ランクの更新を学習します。Wを変える代わりにB×Aを加えるもので、AとBは小さな内部次元r、典型的には8から64をもちます。学習可能なパラメータは100分の1以下に減り、アダプタは数十メガバイトで、1つのベースモデルに対して複数のアダプタを保持できます。QLoRAはさらに進んで、凍結したベースを4ビットのNF4で保存しその場で逆量子化します。これにより7 Bのファインチューニングが8 GB未満に、70 Bのものが1枚の48 GBカードに収まります。

# snippet
import torch

class LoRALinear(torch.nn.Module):
    def __init__(self, base: torch.nn.Linear, r: int = 16, alpha: int = 32):
        super().__init__()
        self.base = base                     # frozen pretrained weight
        self.base.weight.requires_grad_(False)
        self.a = torch.nn.Parameter(torch.randn(r, base.in_features) * 0.01)
        self.b = torch.nn.Parameter(torch.zeros(base.out_features, r))  # zero: starts as identity
        self.scale = alpha / r

    def forward(self, x):
        return self.base(x) + (x @ self.a.T @ self.b.T) * self.scale

学習後、アダプタは追加コストなしでサービングできるようベースの重みにマージできますが、マージ先は16ビットの重みにしてください。4ビットの重みにマージすると、丸めによって学習した内容の一部が失われます。

選好最適化: RLHFとDPO

SFTは模倣しかできません。2つの回答のうち良いほうをモデルに好ませるには、選好に関する信号が必要です。人間のフィードバックによる強化学習(RLHF)では、人間が応答のペアを比較し、その比較を予測するように報酬モデルを学習し、報酬を上げるようにPPOで方策を更新します。その際、KLペナルティが方策をSFTモデルの近くに保ちます。これが2022年のInstructGPTのレシピで、今でもほとんどのアシスタント学習の骨格です。

ベースモデル事前学習済みSFTモデル指示データペアをサンプル2つの応答人間が順位付け採用、却下報酬モデル応答に点を付けるPPO更新報酬 - KL方策SFTから開始RLHFループ: サンプル、採点、更新、繰り返しDPO: log p(採用) - log p(却下)を上げるSFT参照モデル基準。報酬モデルもサンプリングも不要同じペア
RLHFループとDPOの近道。RLHFは人間の比較で報酬モデルを学習し、それに対して方策を最適化します。DPOは報酬モデルを省き、同じペアから方策を直接更新します。

2023年の直接選好最適化(DPO)は、同じ目的関数を選好ペアそのものに対する分類損失として書き直せることを示しました。参照モデルが報酬モデルの代わりを務めます。サンプリングループも別の報酬ネットワークも不要で、多くのチームが最初に試す手法になっているのはそのためです。数学やコードをはじめとする検証可能な答えをもつタスクでは、最近の研究は人間の選好を検証器とグループ相対方策更新(GRPO)に置き換えています。DeepSeek-R1(総パラメータ671 B、アクティブ37 B、128 kコンテキスト、MITライセンス、2025年1月)が長い推論トレースを生成するように学習されたのはこの方法です。

効いたかどうかの評価

同じホールドアウトセットでベースモデルおよびSFTモデルと比較してください。何とも比較しないのは論外です。自由形式の出力に対する通常の道具は、書かれたルーブリックをもつLLM判定器で、平均的には人間の評価者とよく相関しますが、長い回答と自分自身のスタイルを好む既知のバイアスがあります。指示追従はIFEvalで確認し、一般的な能力が後退していないことをいくつかの標準ベンチマークで確認し、過剰な拒否と追従(sycophancy)は手作業で探してください。選好学習されたモデルは報酬を攻略することを学びうるので、スコアだけでなく毎回出力のサンプルを読んでください。評価のハブはハーネスを、安全性のハブは結果のレッドチーミングを扱います。

どこから始めるか

まずLLMをうまく使うを読み、プロンプトが失敗したときにだけファインチューニングするようにし、PyTorchで最初のニューラルネットワークでその下にある学習ループを学んでください。次にApple SiliconでのLoRAファインチューニングプロジェクトを実行してください。SmolLM2-135M-Instruct(135 Mパラメータ、8 kコンテキスト、Apache-2.0、2024年11月)をラップトップで数分で適応させます。量子化フォーマットのリファレンスは、結果をサービングするときに出会うNF4とGGUFの各タイプを説明します。

ツールとプラットフォーム

ツール 用途 ライセンス プラットフォーム
PEFT Transformersモデル向けのLoRA、QLoRA、その他のアダプタ Apache-2.0 Hugging Face
TRL SFT、報酬モデリング、DPO、GRPO、PPOのトレーナー Apache-2.0 Hugging Face
bitsandbytes QLoRA向けの4ビットおよび8ビット重み読み込み MIT オープンソース
Unsloth 単一GPUでより高速なLoRA学習カーネル Apache-2.0 オープンソース
Axolotl 設定ファイル駆動のファインチューニング実行 Apache-2.0 オープンソース
mlx-lm Apple SiliconでのLoRAファインチューニング MIT Apple
OpenAI fine-tuning API クローズドモデルのホスト型SFTと選好チューニング プロプライエタリなサービス OpenAI
lm-evaluation-harness 前後での標準ベンチマーク MIT オープンソース

よくある間違い

  • 変化する事実を教えるためにファインチューニングする。モデルは前四半期の数値を自信をもって述べます。検索を使ってください。
  • サービング時に使うものと異なるチャットテンプレートで学習する。空白やシステムプロンプトの枠も含めてです。
  • 同じエクスポートからサンプリングしたという理由で、評価例を学習セットに残す。
  • フルファインチューニング向けの学習率をLoRAに使う、あるいはその逆。LoRAは典型的に10倍高い学習率を求めます。
  • ベースモデルのライセンスを無視する。Llamaの派生物にはLlamaのライセンスが付いて回り、Apache-2.0モデルの派生物にはそれがありません。
  • 出力を読まずに判定器のスコアを報告する。選好学習されたモデルは、こちらより先に判定器の盲点を見つけます。

さらに深く

実践プロジェクト

最近の論文

  • Maximizing Capacity Utilization of LoRA Adapters for Mitigating the Learning-Forgetting Trade-off

    T. Sawada, K. Goyal · arXiv cs.LG · ダイジェスト

    著者らは、混合ドメインや継続学習の設定におけるLoRAとフルファインチューニングの差は、アダプタが与えられたランクを使い切っていないことに一因があると主張します。学習済みアダプタの実効ランクは設定したランクをかなり下回ります。そこで、微分可能でSVD不要のRényi-2実効ランク正則化項を言語モデリング損失に加え、アダプタが更新をより多くの方向に広げるよう促します。3つのモデルでの混合ドメイン実験では、ペナルティ重み0.01により、設定ランク16以上のすべてで平均Wikipediaパープレキシティが素のLoRAより下がり、複数のLoRA変種で同じ使い残しが見られました。結果は1つの保留指標でのパープレキシティ改善なので、採用前にタスク精度を確認すべきですが、この正則化項は既存のPEFTの実行に安価に追加できます。コードは要旨からリンクされています。

  • Parsed, Plausible, Wrong: Output Format Controls Silent Errors in Small-Model Semantic Parsing

    U. Ahmed, M. Dunaev, M. N. Al Awad et al. · arXiv cs.CL · ダイジェスト

    著者らは10億未満のモデル2つ(Qwen3.5-0.8BとLFM2.5-350M)を、同じPIZZA注文の構文木を可逆に符号化した6つの形式(注文あたり44.3トークンから10.9トークンまで)でLoRAによりファインチューニングし、学習セットのサイズとシードを変えて300の実験を階層ブートストラップとHolm補正付きで行いました。出力を短くするだけでは決して改善しませんでしたが、目標を通常の単語で書くことは効きました。単語による符号化は両モデルで最も正確で、しかもネイティブのS式より4.1倍少ないトークンしか出力しません。出力は構文解析できるが間違っているというサイレントエラー率を、Qwenで2.3倍、LFM2で1.8倍削減し、利得の多くは否定表現にありました。すべてのモデルがメニュー外の入力を拒否することを学びましたが、厳格な拒否は実際の、多くは丁寧な注文の2.1から10.1%も拒否しました。この研究は1つのドメインと2つの小さなモデルに限られますが、そのレシピ(モデルが言語として読める目標形式を選ぶ)は構造化出力の仕事にそのまま移せます。

  • Rethinking "RL Generalizes, SFT Memorizes": The Role of SFT Data

    Y. Hou, F. Zhang, Y. Cheng et al. · arXiv cs.LG (NeurIPS 2026) · ダイジェスト

    強化学習は汎化し教師ありファインチューニングは記憶するという通説は、この論文の証拠によれば、主に使われたSFTデータについての言明です。Qwen2.5とQwen3のモデルで著者らは、慎重に混合したSFTセットは単一の大きなモデルが生成したデータに勝ること、SFTとRLの間で正解ロールアウトの数を揃えるとSFTの汎化が改善すること、総ロールアウト予算を揃えるとSFTがRLと同水準になることを示します。両方を組み合わせるとSFTはRLを上回ります。大きなデータセットは裾にある解法をより多くカバーし、著者らはそこに汎化可能な推論の信号があると主張しており、両方の学習方式における浅いTransformerの理論解析もこの見方を支持します。実験は1つのモデルファミリーに限られるので、RLの段階を捨ててSFTデータを増やす前に、予算を揃えた場合の結果を他で確認すべきです。

  • KernelMosaic: An Open Dataset and Agentic Framework for CUDA Kernel Generation

    N. Xi, Y. Lai, N. Miao · arXiv cs.LG · ダイジェスト

    KernelMosaicは、検証済みの解法とそれを生み出した推論の軌跡を対にしたCUDAタスクのオープンなデータセットで、人間のレビューと多様性を考慮した選択によって整備されています。エージェント型のフレームワークが強力なLLMを実装、正しさの修正、性能チューニングへと導いて軌跡を生成します。このデータセットで小さなオープンソースモデルをファインチューニングすると、KernelBenchのLevel 1、2、3での正答率が大幅に上がり、PyTorchのeager実行に勝る生成カーネルの割合が増えます。著者らはまた、軌跡を教師とするほうが最終回答だけを教師とするより優れると報告しています。要旨には絶対的な数値がなく、公開はCC BY-NC-ND 4.0の下で行われており、データの商用再利用が制限されます。