LoRA

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

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

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

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

 利点 

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

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

 脚注 

 関連項目 
 大規模言語モデル
 ファインチューニング
 自然言語処理

 外部リンク 
 2106.09685 LoRA: Low-Rank Adaptation of Large Language Models
 microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models"


Category:機械学習