【ITニュース解説】How does low-rank adaptation for large language models work
2025年09月13日に「Dev.to」が公開したITニュース「How does low-rank adaptation for large language models work」について初心者にもわかりやすく解説しています。
ITニュース概要
LoRAは、巨大なAIモデルのファインチューニング時、全ての重みを更新せず、ごく一部の小さな追加行列だけを学習する技術だ。これにより、学習パラメータ数を大幅に削減し、必要なストレージや計算資源を劇的に減らす。元のモデルの性能を維持しつつ、推論速度を低下させないため、効率的なモデル運用が可能になる。
ITニュース解説
大規模言語モデル(LLM)は、近年急速な発展を遂げ、様々な分野で活用され始めている。しかし、GPT-3のようなモデルは1750億もの膨大なパラメータ(学習によって調整される数値)で構成されており、その訓練や運用には莫大な計算資源とストレージが必要となる点が大きな課題だ。特に、事前に学習された汎用モデルを特定の用途に特化させる「ファインチューニング」という追加学習では、その負担が顕著に現れる。
従来のファインチューニング、これを「フルファインチューニング」と呼ぶが、これはモデルが持つ全てのパラメータを新しいデータに合わせて更新する方法である。モデルの各層は、入力データを処理するために「重み行列」と呼ばれる数値の集合を用いる。フルファインチューニングでは、これらの重み行列の全要素が更新され、その結果として「更新量(ΔW)」と呼ばれる重みの差分が学習される。この更新量ΔWは、元の重み行列W0と全く同じサイズを持つ。例えば、W0が1750億パラメータを持つモデルであれば、ΔWも同じく1750億パラメータで構成される。最終的に、元のW0と学習されたΔWを足し合わせた新しい重み行列Wftが保存されるが、そのサイズは元のモデルと変わらない。もし企業が100種類の異なるタスクに合わせたモデルを運用しようとすれば、それぞれのモデルをフルファインチューニングすることで、合計で数十テラバイトものストレージが必要になる。これは、モデルの展開と管理において大きな課題となる。
この課題を解決するために開発されたのが「LoRA(Low-Rank Adaptation)」という技術だ。LoRAの根底には、「大規模モデルを特定のタスクに適応させるために必要な重みの変化は、実はそれほど複雑ではない(低ランクである)」という仮説がある。つまり、巨大な更新量ΔWを直接学習するのではなく、ずっと少ない情報でその変化を近似できる、という考え方だ。LoRAでは、大きな更新行列ΔWを、二つのより小さな行列AとBの積(BとAを掛け合わせた結果)で表現する。ここで「ランク(r)」と呼ばれる小さな数値(例えば1、8、64など)を選ぶことで、行列AとBのサイズを決定する。例えば、元の重み行列W0がd行k列というサイズだとすると、LoRAで導入される行列Bはd行r列、行列Aはr行k列となる。このrを小さくすることで、学習が必要なパラメータの総数は劇的に削減される。LoRAでは、ファインチューニング中、元の重みW0は完全に固定され、新しく導入されたAとBの二つの小さな行列だけが学習の対象となる。これにより、学習に必要な計算資源と時間、そして最終的に保存するモデルのサイズが大幅に削減される。元のモデルの数百ギガバイトに対し、LoRAで学習されたパラメータはわずか数十メガバイト程度で済む場合もある。
データがモデルを通過して結果を出力する流れを「順伝播(フォワードパス)」と呼ぶ。LoRAを組み込んだモデルでは、順伝播は元の重みW0による計算結果と、LoRAの行列AとBによる計算結果を足し合わせる形で行われる。具体的には、入力データxが与えられると、まずW0とxを掛け合わせた元のモデルの出力経路の計算を行う。次に、Aとxを掛け合わせた結果にさらにBを掛け合わせることで、LoRAによる追加の出力経路の計算を行う。最終的に、これら二つの経路から得られた結果を合計し、モデルの最終的な出力を得る。この時、元の重みW0は固定されているため、その数値自体が変化することはない。
モデルが自身の予測と実際の正解との誤差を認識し、その誤差を減らすためにパラメータを調整する過程を「逆伝播(バックワードパス)」と呼ぶ。LoRAの大きな効率性はこの逆伝播の段階で発揮される。フルファインチューニングでは、モデル内の全ての重みに対して、誤差を減らすための「勾配」(重みをどれだけ調整すべきかを示す情報)を計算する必要がある。しかし、LoRAではW0が固定されているため、勾配計算の対象から完全に除外される。勾配は、新しく導入された小さな行列AとBに対してのみ計算されるのだ。これにより、逆伝播における計算量とメモリ消費が劇的に削減される。例えば、出力層から伝わってくる勾配の情報を使って、まず行列Bの各要素をどの程度変更すれば誤差が減るかを計算する。次に、その勾配情報をさらに行列Aへと伝播させ、行列Aの各要素についても同様に調整量を計算する。最終的に、学習率(学習のペースを制御する値)に応じてAとBの各要素が更新され、モデルは新たなタスクに適応していく。W0の勾配を計算したり保存したりするメモリが不要なため、LoRAは非常に効率的な学習を可能にする。
LoRAは、Transformerモデルの核となる「自己注意機構」内の重み行列によく適用される。自己注意機構では、入力トークンから「クエリ(Query)」「キー(Key)」「バリュー(Value)」というベクトルが生成され、これらがWq、Wk、Wvといった重み行列と入力データの積によって計算される。さらに、最終出力はWoという重み行列を通る。LoRAは、これらのWq, Wk, Wv, Woの各行列に対し、それぞれ対応する小さな行列のペア(AqとBq、AkとBkなど)を追加することで適用される。学習時には、これらの小さなLoRA行列だけが訓練され、元のWq, Wk, Wv, Woは固定されたままだ。これにより、自己注意機構全体が効率的に新しいタスクに適応できるようになる。
LoRAのもう一つの大きな利点は、モデルを実際に使用する「推論時」に、計算速度(レイテンシ)を全く増加させない点にある。訓練中はW0の経路とA・Bの経路の二つがあるため、わずかに計算量が増える。しかし、学習が完了した後は、行列BとAを掛け合わせて、LoRAによる最終的な更新行列ΔWを一度だけ計算する。そして、この計算されたΔWを、元のW0に直接足し合わせることで、新しい統合された重み行列Wft(W0 + ΔW)を作成する。推論時には、このWftという一つの巨大な重み行列だけを使って計算が行われる。これは、ファインチューニングされていない元のモデルと全く同じ計算パスであるため、推論速度は全く低下しない。また、異なるタスク向けにLoRAで学習されたモデルを切り替える際も、新しく計算されたΔWを元のW0に足し合わせるだけでよく、これは非常に高速な処理であるため、数百ギガバイトのモデル全体をディスクから読み込み直す必要がなく、大幅な時間短縮と柔軟な運用が可能になる。
なぜ、このように少ないパラメータの調整だけで大規模モデルがうまく適応できるのか、という「低ランク仮説」についても説明する。これは、巨大で多数のパラメータを持つモデルでも、新しいタスクに適応するために必要な変化は、実際にはより少ない「本質的な次元」の中で行われる、という深層学習の研究に基づいている。つまり、1750億ものパラメータを持つモデルであっても、その振る舞いを決定する主要な要素は、もっと限られた範囲に集約されているという考えだ。LoRAは、この仮説を「重みの変化(ΔW)も低ランクである」と拡張し、実際にAとBという小さな行列でΔWを近似することで、その妥当性を示している。ランクが1や2といった極めて小さい値でも高い性能を発揮するLoRAの成功は、この低ランク仮説が深層学習の文脈で非常に有効であることを強く裏付けている。
LoRAは、大規模言語モデルを実社会で幅広く活用していく上で、ファインチューニングの大きな障壁となっていた計算資源、ストレージ、および運用の複雑さを劇的に軽減する画期的な技術である。限られたリソースでも高性能なLLMを特定の目的に合わせてカスタマイズできる道を開き、これからのAI開発と展開において、ますますその重要性を増していくだろう。