Ch.08
PEFT 1:PEFTとLoRA
大きい表より、小さな二枚
大きな重み表を一から全部書き換えるのではなく、縦に長い B と 横に長い A を掛けて更新を作ります。真ん中の幅 r が小さいほど、学習する数はずっと少なくなります。
図の格子は例として 4×2 · 2×5 → 4×5 のサイズです。
① B: 縦② r: 狭い③ A: 横④ 一枚に
学習する数は小さな二枚の行列ぶんに抑えられ、表全体をマス目ごとに合わせるよりずっと少なくなります。LoRA はその二枚だけを更新します。
PEFT・LoRA: 少ないパラメータだけで微調整
巨大な本線 $W_0$ はそのまま、狭いLoRAランプ $A,B$ だけ敷いてタスクへ合わせます。
大きな事前学習ブロック(W₀)はそのまま。小さなA·Bだけ学習して出力を少し動かします。太い道と細い近道が合わさって最終出力になります。
バックボーン読込W₀凍結A·B学習α/rスケール出力/マージ
学習の流れ
- ① バックボーン読込: すでに学習済みの大きなモデルをそのまま用意する。
- ② 凍結: もとの重みは触らず、LoRAと上の層側に学習信号を通す。
- ③ LoRA学習: 小さな二枚(A·B)だけを新しく合わせて、出力を少し動かす。
- ④ 強さの調整: LoRAがどれだけ効くか、スケール(多くは α÷r など)で合わせる。実装ごとに違う。
- ⑤ 使う・統合・配布: 十分か確認したあと、更新を本体にまとめるか、アダプターだけ配る。
AIモデルを学習させることを家をリフォームすることに例えてみませんか?第05章の ViT や巨大言語モデルは、すでに立派に建った大邸宅(事前学習モデル)のようなものです。好みに合わせて変えたいとき、柱と壁を全部壊して建て直すのがフルファインチューニングです。性能は上がるかもしれませんが、膨大なメモリと保存容量、そして時間がかかります。
救世主が PEFT(Parameter-Efficient Fine-Tuning) です。PEFTは「家の骨組みはそのまま、本当に必要な小さなオーダーメイド家具(アダプター)だけ足そう」という、賢く経済的な戦略です。
そのPEFT一族でいちばん有名なのが LoRA(Low-Rank Adaptation) です。元の巨大な知識行列はそのままに、横にとても狭い迂回路(低ランク行列)を敷いてショートカットを作ります。式では、巨大な の代わりに、小さな二つの行列の積 から新しく学ぶ知識 を作ります。
モデルの出力は になります。もともとの賢さ()に、新しく教えた知識()をそっと足す原理です。本章では、大きなモデルを自分のPCでも軽く扱えるようにしてくれるLoRAの魔法を、やさしく噛み砕いて説明します。
数式の読み方(LoRA・線形層1つ)
1) 事前学習重みと凍結
ひとこと: 大きな はそのまま、小さな 補正 だけ学びます。
重み , 入力 , 出力 とすると、LoRA でよく見る形は「元の出力 + 追加分」です。
- : 事前学習で得た部分(多くは凍結)
- : タスク用に足す部分(LoRA は主に を学習)
フルFTは の全要素を更新しますが、LoRA は を触らず補正だけを軽く合わせるイメージです。
2) を低ランクで書く
ひとこと: を巨大な1枚として保存しないで、真ん中が だけ細い二枚 と の積で表します。
とし、, のとき
- : 細い通路 を通ってできる補正の形
- : 補正を出力にどれだけ混ぜるかのスケール(実装で と の結合の書き方はやや異なることがあります)
学習するパラメータ数は、ざっくり と の要素数の和、すなわち です。 全体を書き換えるよりずっと少なくなります。
3) なぜ低ランクか
直感: 必要な変化が「すべての方向」ではなく、主要な少数方向に集まると考えると、中間の幅 を小さくしても足りることがあります。
- を大きく → 表現力は上がるが、コストも増える
- どこに付けるか(注意の か FFN か)で効き方が変わります
4) 推論時のマージ(任意)
ひとこと: 毎回 LoRA 経路を別に通さず、一枚の重みにまとめたいときに使います。
学習後に を に足して
とすると、普通の線形層のように 行列積一回で推論でき、遅延を抑えやすくなります(数値・実装はフレームワーク依存)。
PEFTとLoRA: 少ないパラメータだけ直してファインチューニング
1. なぜ PEFT?(骨組みは残して家具だけ)
* 概念: ChatGPT級の巨大モデルはパラメータが数百億あります。フルファインチューニングはすべて更新するため強力なGPUと巨大な保存が要ります。PEFTは全体のごく一部(通常1%未満)だけ学習して、モデルを効率よく賢くする技術の総称です。
* 比喩: 冬の雰囲気のためにスマホを買い替える人はいません。冬用ケース(PEFT)を付けるだけでしょ?用途に合わせてケースを替えるように、モデルも軽く変身できます。
* 実戦: コスパは最高ですが、追加するパラメータが小さすぎたりデータが足りなかったりすると知識が吸収できません。学習率などの設定調整が鍵です。
2. LoRAの秘密: 巨大行列の代わりに二つの小さい行列の積
* 概念: ディープモデルは巨大な表(行列)の集まりです。元の巨大行列を とします。LoRA は を凍結し、新しい知識を学ぶ小さな二つの行列 と を作ります。核は です。
* 比喩: 1000ページの百科事典()の誤植を直すのに全刷りは非効率。小さな付箋()をそのページに貼るようなものです。
* 詳細: は情報を要約(圧縮)し、 はそれを元のサイズに戻す(復元)役です。巨大行列を直接いじるより、学習する数が劇的に減ります。
3. LoRAの操縦席: ランク とスケール
* 概念: LoRA を操るには二つのダイアル、ランク と スケール が重要です。
* ランク (補助レーンの本数): 付箋の大きさのイメージ。 なら8車線の迂回路、 なら広い——賢くなるほどメモリも増えます。
* スケール (知識の混ぜ方の強さ): 新しく学んだ を凍結した にどれだけ強く混ぜるかの増幅器です。
* 実戦のコツ: メモリがきつければ を下げる!データに合わないなら を少し上げてみる。
4. 他章とのつながり
* 概念: 第04・05章の注意(Attention)モジュール、覚えていますか?LoRA は多くの場合 などの部品に付箋を貼るように使われます。線形層(重み行列)がある所ならどこにでも貼れます。
* 予告: それでも元の巨大な家()自体が太ってメモリを食います。だから第09章では、モデル本体を軽い素材に圧縮する量子化と LoRA を組み合わせた QLoRA が登場します。
重要性
誰でも部屋の片隅のGPUで巨大モデルを育てられる
昔は巨大モデルを自在に変えるのに巨大データセンターが要りました。LoRA なら学習するパラメータが100分の1、1000分の1に減ります。スタートアップや学生でも、限られたGPUで自分のドメイン(医療・金融・法律など)に合わせて微調整できます。
カメレオンのようなモデル: マルチタスク配布の魔法
一つのモデルを「翻訳家」「プログラマー」「料理人」にするには、本来はモデル全体を3つ保存する必要があります。PEFT なら賢い共通の脳(ベース)は1つだけ、翻訳用・コーディング用の付箋(LoRAアダプター)だけ軽く保存すればよい。アダプターだけ差し替えれば運用と管理が格段に楽になります。
過去を忘れない賢さ: 忘却リスクの低減
新しい知識を無理やり詰め込む(フル微調整)と、元の常識を忘れる「忘却」が起きがちです。大学数学を覚えて九九を忘れるようなもの。LoRA は脳()を凍結し補助だけ学習するので、汎化を保ちつつ新しい知識を安全に足せます。
大きな絵の中の効率
第01〜03章の骨格(線形層)の上に、どう効率よく肉付けするか——その答えが本章です。むやみに全部を変えずパラメータ効率を極めたなら、より高度な最適化へ進む準備はできています。
使い方
第1段階: ベースは氷!LoRAだけ解凍(学習戦略)
1. まず巨大モデルの重みに凍結の鍵をかけます。
2. 重要な関節(注意層など)ごとに空の LoRA モジュールを取り付けます。
3. この LoRA だけが学習するようにします。全体より速いですが、データが少ないときは検証セットで過学習を見張ってください。
第2段階: 配布は合体!(マージと推論)
学習が終われば、付箋()の内容を百科事典()に印刷してしまうこともできます。これを重みマージ(Weight Merge)といいます。
*
合体すれば、推論時に二回も行列積を回す必要がなく、レイテンシの悪化を避けられます。
第3段階: 自分に合うPEFTの服を選ぶ
* アダプター: 各層の末尾に小さなネットを足す方式。
* プロンプトチューニング: プロンプトの前に「仮想の単語」を足して誘導します。
* LoRA: 重み行列そのものを滑らかに直すので制約が少なく性能が良く、今どきの業界標準です。
✅ 実戦チェックリスト
* 性能: 物足りなければランク()、スケール()、または `target_modules` の範囲を広げる。
* メモリ: まだ足りなければバッチを減らし、次章の 量子化+LoRA(QLoRA) を検討。
* 再現性: どの層にどの で LoRA を付けたか、実験ログに残す。
まとめ
一行まとめ — 巨大な事前学習重み は安全に凍結し、更新は低ランク行列 にまとめて学習パラメータを劇的に減らす魔法です。
前章とのつながり: 第01〜03章の線形層・注意の上で、モデルを自分好みに適応させる最も経済的でスマートな方法が LoRA と PEFT です。
実務: ランク()、スケール()、ターゲットモジュールのダイアルを合わせ、メモリがまだ厳しければ第09章の QLoRA(量子化) にバトンを渡してさらに軽く最適化します。
解法のヒント
LoRA/PEFTの問題は 凍結した と 低ランク 、そして 学習可能パラメータ数・・ をセットで考えると解きやすいです。ViTのパッチ数(第05章復習)は 。正方形 層にLoRAを付けた典型形では およそ パラメータと結びつけます。
① セッションで出やすい数値型の例(銀行と同じ形)
LoRA 学習パラメータ数(aggregate) — 1層で , のとき おおよそ = 512
一辺のパッチ数(config) — 縦横とも 8 個ずつなら総マス数は? → 64
パッチ数(vote型) — 入力 、パッチ 、CLSなし → 4
パッチトークン数(ensemble) — 、パッチ 、CLS除く → 196
密な注意のスケール(ensemble) — トークン数 のとき は? → 400
例(概念) — 「PEFTの主目的に最も近いのは?」
② 少ない追加パラメータで適応 → 2
例(計算) — 「, で LoRA パラメータをおおよそ とみなすと?」 → → 512
例(○×) — 「LoRAでは通常 全部を学習する」→ 通常 凍結 → 0
例(応用) — 「多タスクを安く運びたい?」
② PEFTアダプターだけ保存 → 2
ViT復習 — , パッチ , CLSなし → 196
定義 — 「LoRAは常にフルランクの を直接学習する」→ 誤り(低ランク)。0
○× — 「 を上げると学習パラメータは増えがち」→ 正。1
選択 — 「LoRA を使いながらさらに VRAM を節約するには、次章で何と組み合わせる?
① 量子化
② データラベルだけ削除」→ 1
計算 — 「, , は?」→ 128