AdaLoRAとは?LoRAのランクを重要度に応じて再配分する省パラメータ学習

AdaLoRAは、LoRAの低ランク更新を全層へ均等に置かず、学習中の重要度に応じてランク予算を再配分するPEFT手法です。仕組み、実験結果、実装とプロダクトへの活かし方を解説します。

参考文献

Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning

Qingru Zhang, Minshuo Chen, Alexander Bukharin, Nikos Karampatziakis, Pengcheng He, Yu Cheng, Weizhu Chen, Tuo Zhao

論文を見る

今回の論文

今回取り上げるのは、Qingru Zhangらの「Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning」です。2023年にarXivで公開され、ICLR 2023で発表されました。公開元はarXivおよびICLR、URLは https://arxiv.org/abs/2303.10512 、研究分野はパラメータ効率的ファインチューニング(PEFT)です。

選んだ理由は、LoRAを「低ランク行列を追加する手法」から一歩進め、限られた更新パラメータをどこに割り振るべきかという実務的な問いへ答えているためです。同じ保存容量・GPU予算でも、重要な層へ更新の自由度を寄せられれば、ドメイン適応の精度を上げられる可能性があります。

どんな技術か

AdaLoRA(Adaptive Low-Rank Adaptation)は、基盤モデルを凍結したまま加える低ランク更新のランクを、層・モジュールごとに学習中に変える手法です。通常のLoRAは、たとえば全ての対象行列へ一律ランク8を与えます。AdaLoRAは初めは少し余裕を持たせ、損失への寄与が小さい更新成分を徐々に落とし、重要な場所へ予算を残します。

ポイントは、単にLoRA行列を削るのではなく、更新行列をSVDに似た形で表現することです。これにより「どの成分を止めるか」を特異値単位で扱えます。低い追加パラメータ数でも精度を保ちたい、複数の業務タスク用アダプタを保管したい場面に向く設計です。

課題

フルファインチューニングでは、タスクごとに基盤モデル全体のコピーを持つことになり、学習・保存・配布のコストが大きくなります。LoRAは重み差分を低ランクへ制限してこの問題を緩和しますが、均一なランク配分には次の限界があります。

  • Transformerの全層・全モジュールが、下流タスクへの適応に同じだけ重要とは限りません。論文の予備実験では、FFNや上位層へ更新を置く方が有利な傾向が見られました。
  • 一律ランクでは、重要でない行列にも更新パラメータを使い、重要な行列の表現力が不足することがあります。
  • 予算が厳しいほど、この配分ミスは精度に効きます。小規模GPUで多数の専門アダプタを作る場合、単純にランクを下げるだけでは性能低下が大きくなり得ます。

この問題は、社内文書向けRAGの回答器、顧客・部門別の文章生成、分類器のドメイン適応などで現実的です。タスクごとに同じ「r=8」を試すだけでなく、モデル内の更新容量を学習データに基づいて配分する必要があります。

用語解説

PEFT(Parameter-Efficient Fine-Tuning)
基盤モデル全体を更新せず、ごく少数の追加・選択パラメータだけを学習する方法の総称です。AdaLoRAは、限られた学習可能パラメータをどこへ使うかを最適化します。
LoRA
凍結した重みWに対し、低ランクな差分BAだけを学習してW + BAとして使う手法です。AdaLoRAは、この差分のランクを一律に固定しない点が異なります。
ランク
行列の更新が持てる独立した変化方向の数です。ランクを上げるほど表現力と学習パラメータは増えます。AdaLoRAではこれが配分する「予算」になります。
特異値分解(SVD)
行列を左右の直交ベクトルと、それぞれの強さを表す特異値へ分解する表現です。特異値をゼロに近づければ、更新の重要度を保ったままランクを落としやすくなります。
感度(sensitivity)
ある値を変えたとき損失がどれほど動くかの指標です。AdaLoRAは値と勾配の積を基に、移動平均と不確実性を加えて、残すべき特異値成分を判定します。

技術の仕組み

AdaLoRAの核は、「更新行列を細かい成分へ分けて観測し、全体のランク予算を重要な成分へ集める」ことです。基盤モデルの重みは更新しません。

SVD型の低ランク更新

通常のLoRAは、重み行列Wに対して ΔW = BA を加えます。AdaLoRAは概念的に ΔW = PΛQ と表します。PとQは左右の低ランク基底、Λは対角行列で、対角要素が各成分の強さです。PとQへ直交性を促す正則化を加えるため、Λの各要素を「重複しにくい変化方向の重要度」として扱えます。

学習開始時はΛをゼロ、PとQをランダム初期化します。そのため、開始直後のモデル出力は元モデルと同じです。直接SVDを何度も計算すると高コストですが、このパラメータ化なら学習中の微分更新だけで近い性質を得られます。

成分ごとの重要度を測る

対象はattentionのQ/K/V投影と、FFNの重み行列などです。各行列のi番目の成分について、P・Λ・Qの要素ごとの「値×勾配」の絶対値から感度を出し、それらを合算して成分スコアにします。

ミニバッチ一回の勾配は揺れるため、論文は指数移動平均で感度を平滑化し、平均との差という不確実性も追跡します。単に特異値が大きいから残すのではなく、損失を変えそうで、観測が安定している成分を優先する発想です。

余裕を持って始め、段階的に絞る

全対象行列の特異値数の合計をグローバル予算と定義します。初期予算は目標の1.5倍程度にしてウォームアップし、その後は三次スケジュールで目標予算まで減らします。最後は得られた配分を固定し、残りのステップで微調整します。

一定間隔(論文例では100ステップ)で低スコアのΛをマスクします。PとQ自体は保持・更新し続けるので、早く落とし過ぎた成分にも再活性化の余地があります。LoRAのB/A列を丸ごとゼロ化する構造化プルーニングより、学習を不安定にしにくい理由です。

推論時は通常のLoRAと同じ

訓練後は、残った PΛQ を重み差分としてロードするだけです。推論中に重要度を計算したり、層選択を実行したりはしません。したがって、用途別アダプタの切替や既存のPEFT配布の仕組みに載せやすい一方、学習時にはスコア追跡とスケジュールという追加処理が入ります。

実験と結果

論文はDeBERTaV3-baseをGLUEとSQuAD v2.0へ、BART-largeをXSumおよびCNN/DailyMailの要約へ適応しました。比較対象はフルファインチューニング、Adapter、BitFit、通常のLoRAです。AdaLoRAとLoRAは、Q/K/VとFFNを含む同じ対象行列を更新し、予算の差が結果に混ざらないようにしています。

少ない更新パラメータでのGLUE

GLUEでは、総パラメータに対して0.08%、0.16%、0.32%、0.65%という4つの予算を比較しました。AdaLoRAは全データセット・全予算で既存手法と同等以上の成績を示しました。たとえばCoLAでは、0.3Mの学習パラメータでMCC 70.04を達成し、より大きい0.6M・1.2M予算のベースラインを上回ったと報告されています。

これは「更新可能な要素数」だけでは精度を説明できず、配置が効くことを示します。特に低予算での差は、専門アダプタを小さく保ちたい実装に重要です。

QA・要約でも一貫して改善

SQuAD v2.0では、0.08〜0.65%の予算でExact MatchとF1を比較し、AdaLoRAが各予算で既存法を上回りました。要約ではBART-largeをXSumとCNN/DailyMailに適応し、0.13%、0.26%、1.10%、2.20%の学習可能パラメータ数を比較しています。ここでも低予算ほど優位性が見えやすく、分類だけに閉じないことを検証しました。

何が効いたのか

LoRAの列を構造化プルーニングする比較では、AdaLoRAがSST-2、RTE、CoLAの全設定で上回りました。たとえばCoLAの0.65%予算では、Prune LoRAのMCC 69.57に対しAdaLoRAは71.45でした。また感度だけ、特異値の絶対値だけで優先順位を付ける変種より、感度の平滑化と不確実性を含むスコアが概ね良く、最大0.9ポイントの性能低下を防ぎました。

一方で学習コストがゼロになるわけではありません。同一V100での比較では、MNLIの1エポック当たり時間はLoRAの105分に対してAdaLoRAは116〜117分で、メモリ使用量はほぼ同じでした。精度・保存容量を得る代わりに、学習時間はおおむね1割程度増えるというトレードオフです。

何に使える?

部門・顧客ごとの小型アダプタ

同じ基盤LLMに、法務、営業、サポートなどのアダプタを多数持つなら、各アダプタの保存サイズは効きます。AdaLoRAは少ない予算をタスク固有の重要層へ寄せるため、固定低ランクLoRAより同じ容量で品質を上げられる候補になります。

ドメイン特化RAGの回答形式適応

検索精度を変えず、引用の書き方、社内用語、定型回答だけをモデルへ覚えさせたい場合に使えます。RAGで事実を供給し、AdaLoRAは「与えられた根拠をどう回答へ整形するか」へ役割を絞ると、少量データでも評価しやすくなります。

小規模GPUでの実験ループ

フル更新が難しい開発環境では、まず固定ランクLoRAをベースラインにし、同じ予算でAdaLoRAを比較できます。個別層のランクを手で総当たりするより、探索の初期段階では現実的です。ただし、学習例が極端に少ない場合は重要度スコア自体が不安定になるため、検証セットを別に取ります。

開発や事業へのヒント

「アダプタの容量」をプロダクト要件にする

PEFTを使う際、ランクは学習ハイパーパラメータとして放置されがちです。しかしマルチテナントSaaSでは、アダプタ数×サイズがストレージ、配信、切替時間に直結します。目標容量を先に決め、品質との関係を評価する設計にすると、AdaLoRAの予算スケジューリングを生かせます。

配分結果を診断ログにする

最終ランクがFFN・上位層へ偏るか、タスク間でどれほど違うかは、モデルがどの部分の表現を使って適応したかの手掛かりになります。ただし因果的な説明ではありません。精度悪化時の仮説生成や、次に試す対象モジュールを絞る観測値として扱うのが安全です。

固定LoRAを必ず基準線にする

AdaLoRAは万能な上位互換ではなく、感度計算、正則化、予算スケジュールの調整が増えます。プロダクトでは同一データ・同一総パラメータで固定ランクLoRAを比較対象にし、低予算での改善が学習時間増を上回る場合に採用するのが堅実です。

限界

AdaLoRAは事前学習済みモデルのどの行列を更新対象にするかを完全に自動化するものではなく、対象モジュール、初期ランク、最終予算、ウォームアップ期間などは決める必要があります。データが少ない・偏っていると、ミニバッチ勾配から計算する重要度が偶然のパターンを拾う可能性もあります。

訓練ではLoRAよりスコア計算とマスク更新が加わり、論文のV100比較で時間は約11〜16%増えました。推論負荷は小さい一方、短時間で何度も学習を回す開発では無視できません。また論文の主な検証はNLPの分類・QA・要約であり、最新の巨大生成モデル、画像・音声モデル、分布外データで同じ配分則が再現することまでは示していません。

よくある質問

Q. AdaLoRAはLoRAより推論が速くなりますか?

A. 主目的は推論高速化ではありません。最終アダプタが低ランクなら追加演算は小さくできますが、論文の中心は同じ学習パラメータ予算での精度向上です。推論速度を重視するなら量子化、バッチング、KVキャッシュ最適化も別に検討します。

Q. 固定ランクLoRAから置き換える価値はありますか?

A. 保存容量が厳しい、低ランクで精度が落ちる、層ごとのランクを手で調整している場合は試す価値があります。反対に十分なランクと学習予算があり、固定LoRAが安定しているなら、追加の学習複雑性に見合うか実測で判断すべきです。

Q. なぜ小さい特異値を落とすだけでは不十分ですか?

A. 値が小さくても損失に敏感な成分は重要かもしれません。AdaLoRAは値そのものではなく、値と勾配、さらに時間方向の安定性を使います。論文の比較でも特異値絶対値だけの順位付けは、提案スコアより劣りました。

Q. 学習データが少なくても使えますか?

A. 使えますが、重要度推定のノイズは増えます。ホールドアウト評価を用意し、初期予算・最終予算・乱数シードを複数試してください。数十例程度なら、まず固定LoRAとプロンプト設計を強い基準線にする方が原因を切り分けやすいです。

Q. RAGがあればファインチューニングは不要ですか?

A. RAGは最新・社内固有の事実を外部文書から与えるのに強く、AdaLoRAは回答形式や分類方針などの振る舞い適応に向きます。事実の記憶をアダプタへ詰め込む代わりではなく、両者の担当を分けると更新しやすくなります。

今日の学び

この論文は、LoRAで限られた更新パラメータを全層へ均等に配ると、重要な箇所の表現力を無駄に制限してしまう課題を扱いました。AdaLoRAは更新をSVD型の成分へ分け、感度に基づいてランク予算を段階的に再配分します。

得られるヒントは、PEFTの設計で「何パラメータ学習するか」だけでなく「その予算をどこへ置くか」を評価対象にすることです。小型アダプタを多数運用するなら、固定LoRAとの同条件比較から始めると、容量と品質の両方を改善できる可能性があります。