LoRA

LoRA(ローラ、Low-Rank Adaptation)は、2021年6月にマイクロソフトの研究者等が発表した、大規模データセットで学習したニューラルネットワークを小規模データセットでファインチューニング(微調整)するための手法である。ニューラルネットワーク汎用で開発されているが、主に、Transformerを使用した大規模言語モデル (LLM) や画像生成モデルでの使用を想定している[1][2]。

従来のファインチューニングでは、モデルの全パラメータを対象に学習を行うため、計算コストやメモリ使用量が膨大になるという課題があった。LoRAは、モデルの全結合層に階数因数分解した低階数の行列を加算し、その行列のみをトレーニングすることで、これらの課題を解決する[3][2]。

手法

LoRAでは、全結合層(dense[4]とeinsum[5])のカーネル(バイアスは対象外)の重みのみを再学習対象とする。元の重み行列 W が d × k 行列の時、d × r 行列の B、r × k 行列の A を用意し、行列 W を W + BA で置換する。r の事を階数(ランク)と呼び、d や k よりもはるかに小さい値を使用する。BA の形で階数因数分解することで、より少ないパラメータ数で扱える。

W' = W + BA

行列積をした BA によって、元の重み行列 W に対する小さな修正が表現される。ファインチューニング時には、元の重み行列 W は固定し、行列 A と B のみを更新する。これにより、元のモデルの知識を保持したまま、特定のタスクに適応するための調整が可能になる。A は標準正規分布で初期化し(ただしKerasのデフォルトはHeの一様分布[6])、B は 0 で初期化してから学習する。[1][2]

利点

LoRAは、従来のファインチューニング手法と比較して、以下の利点を持つ。

  • 計算コストとメモリ使用量の削減: 低ランク行列を用いることで、計算コストとメモリ使用量を大幅に削減できる。
  • 元のモデルの知識の保持: 元の重み行列を固定することで、元のモデルの知識を保持したままファインチューニングを行うことができる。
  • タスクごとの行列の保存: タスクごとに学習した行列を別々に保存することで、複数のタスクに対応する際に、モデル全体を保存する必要がなくなり、ストレージ容量を節約できる。
  • 高い汎用性: テキスト生成、質問応答、機械翻訳など、様々な自然言語処理タスクに適用可能である。また特定の人物や特定の絵柄の生成などの画像生成タスクにも適用ができる。

脚注

  1. 1 2 “LoRA: Low-Rank Adaptation of Large Language Models”. arXiv.org. 2025年9月5日閲覧。
  2. 1 2 3 “LoRA(ローラ)とは|今年注目の画像生成AI (Stable Diffusion) のファインチューニングを試してみた”. Ledge.ai. 2024年8月11日閲覧。
  3. ↑ “NVIDIA TensorRT-LLM による、LoRA LLM のチューニングとデプロイ”. NVIDIA 技術ブログ (2024年4月2日). 2024年8月11日閲覧。
  4. ↑ Team, Keras. “Keras documentation: Dense layer”. keras.io. 2025年9月6日閲覧。
  5. ↑ Team, Keras. “Keras documentation: EinsumDense layer”. keras.io. 2025年9月6日閲覧。
  6. ↑ “keras/keras/src/layers/core/dense.py at v3.11.3 · keras-team/keras”. 2025年9月7日閲覧。

関連項目

外部リンク