ファインチューニング vs LoRA
ファインチューニングは事前学習済みモデルを追加学習して特定タスクやドメインへ適応させる手法の総称、LoRAはその実現方法の1つで、元の重みを凍結したまま低ランク行列の差分だけを学習するパラメータ効率的手法(PEFT)。両者は対立する選択肢ではなく、「全パラメータを更新するフルファインチューニング」と「LoRAによる部分的な更新」の比較として捉えるのが実態に近い。
3行で違いを説明
- ファインチューニングは追加学習によるモデル適応の総称で、LoRAはその中の手法の1つ。
- フルファインチューニングは全パラメータを更新するため、大量のGPUメモリと計算資源を必要とする。
- LoRAは元の重みを凍結し、低ランク行列の差分だけを学習するため、学習パラメータ数とGPUメモリを抑えられる。
- 限られた計算資源でLLMを特定タスク向けに調整する場合は、LoRA(またはQLoRA)が第一候補になる。
Comparison Table
| Item | ファインチューニング | LoRA |
|---|---|---|
| Purpose | 事前学習済みモデルを特定タスク・ドメインへ適応させる | 少ない学習パラメータとGPUメモリでファインチューニングを行う |
| Scope | 追加学習によるモデル適応の総称(フル更新・PEFTを含む) | ファインチューニング手法の1つ(PEFTの代表例) |
| Originator | 特定の提案者はない(転移学習の一般的な手法) | Microsoftの研究チーム |
| Release | LLM文脈では2018年前後(ULMFiT/BERT)から普及 | 2021年(論文発表) |
| Open Source | 実装(Hugging Face Transformers等)はオープンソースのものが多い | 公式実装・Hugging Face PEFTがオープンソースで公開 |
| Programming Language | Python(PyTorch/Hugging Face Transformers等)が主流 | Python(Hugging Face PEFT等)が主流 |
Architecture
ファインチューニング
事前学習済みモデルの重みを、タスク・ドメイン固有のデータセットで追加学習して更新する。フルファインチューニングでは全パラメータが更新対象になる。
LoRA
元の重み行列を凍結したまま、各層に小さな低ランク行列のペア(A・B)を追加し、その差分のみを学習する。学習後は低ランク行列の積を元の重みに加算してマージでき、推論時の追加遅延は発生しない。
Feature Comparison
| Feature | ファインチューニング | LoRA |
|---|---|---|
| 更新するパラメータ | 全パラメータ(フルファインチューニングの場合) | 追加した低ランク行列のみ |
| 必要なGPUメモリ | 大きい | 小さい |
| 用途別アダプタの切り替え | — | ○ |
| 推論時の追加遅延 | なし | なし(重みへマージした場合) |
| 量子化との組み合わせ(QLoRA) | — | ○ |
Advantages
Disadvantages
ファインチューニング
- フルファインチューニングは計算資源・GPUメモリのコストが大きい
- 汎用能力を失う破滅的忘却のリスクがある
- タスク固有の厳選された学習データが必要
LoRA
- 低ランクという制約があるため、適応の自由度はフルファインチューニングより限られる
- ランクや適用する層などのハイパーパラメータ選択が結果に影響する
Best Use Cases
ファインチューニング
十分な計算資源があり、モデルの振る舞いを大きく変える必要がある場合や、ベースモデルそのものを新しいドメイン向けに作り直したい場合。
LoRA
個人や小規模チームが限られたGPU資源でLLMを特定タスクへ適応させる場合や、1つのベースモデルに対して用途別のアダプタを複数運用したい場合。
Migration
フルファインチューニングからLoRAへ切り替える場合、学習データセットはそのまま流用できる。まずLoRAで要件を満たせるか検証し、性能が不足する場合にランクの引き上げや適用層の拡大、フルファインチューニングを検討する進め方が一般的。
FAQ
LoRAとファインチューニングは別物?
別物ではない。LoRAはファインチューニングを効率的に行うための手法の1つであり、比較の対象は「全パラメータを更新するフルファインチューニング」と「LoRAによる部分的な更新」になる。
LoRAで学習したモデルは推論が遅くなる?
学習した低ランク行列の積を元の重みに加算してマージすれば、推論時に追加の遅延は発生しない。マージせずにアダプタとして切り替えて使う運用も可能。
参考文献
- Research PaperLoRA: Low-Rank Adaptation of Large Language Models
- GitHubHugging Face PEFT
- DocumentationOpenAI Fine-tuning Guide