Slide 1

Slide 1 text

Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning Qingru Zhang1, Minshuo Chen2, Alexander Bukharin1, Pengcheng He3, Yu Cheng3, Weizhu Chen3, Tuo Zhao1 1: Georgia Institute of Technology, 2: Princeton University, 3: Microsoft Azure AI 慶應義塾大学 杉浦孔明研究室 小槻誠太郎 ICLR23 Poster Q. Zhang, M. Chen, A. Bukharin, P. He, Y. Cheng, W. Chen, and T. Zhao, "Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning," in ICLR, 2023.

Slide 2

Slide 2 text

LoRAは増分行列Δを低ランク近似する際にランクを固定している →層やモジュールによってパラメータの寄与が異なるという事実を無視 増分行列Δを低ランク近似する際に特異値分解に基いて分解 (Δ = PΛ𝑄) LoRAでは固定だったランク𝑟の値を,適用する層に応じて適応的に変化させる (Λのサイズを変化させる) LoRAなどのベースライン手法を上回るパフォーマンス 2 SUMMARY – LoRAの派生手法であるAdaLoRAを提案

Slide 3

Slide 3 text

LLMのパラメータ総数は膨大 (E.g., GPT-3: 175B params) → △ Fine-tuning: 大量の学習可能パラメータ… → △ メモリ圧迫 → △ ストレージ圧迫 → △ 学習時間:長 どうにかして減らせないか? 3 前提 – LoRA (Low Rank Adaptation)

Slide 4

Slide 4 text

LLMのパラメータ総数は膨大 (E.g., GPT-3: 175B params) → △ Fine-tuning: 大量の学習可能パラメータ… → △ メモリ圧迫 → △ ストレージ圧迫 → △ 学習時間:長 どうにかして減らせないか? 4 前提 – LoRA (Low Rank Adaptation) LoRA パラメータの差分だけ学習 パラメータの差分を低ランク近似 → パラメータ数削減

Slide 5

Slide 5 text

ある線形層のパラメータ行列の更新 増分行列Δを分解 学習可能パラメータ減少 5 前提 – LoRA (Low Rank Adaptation)

Slide 6

Slide 6 text

ある線形層のパラメータ行列の更新 増分行列Δを分解 学習可能パラメータ減少 6 前提 – LoRA (Low Rank Adaptation) 嬉しさ 1. Backward path軽量化 2. LoRAはアダプタネットワークだが, 本質はパラメータの差分 →推論時は元のネットワークに 完全に統合可能 →オーバーヘッド無し 3. 保存するパラメータ数が小さい →ストレージにも優しい

Slide 7

Slide 7 text

He et al. [He+, ICLR22 (spotlight)] LoRA, Prefix Tuningなどのパラメータ効率の良い学習手法を, 事前学習済みモデル の特定の隠れ層への修正と捉えて再定義 LoRA [Hu+, ICLR22 (poster)] 増分行列のみを低ランク近似して学習 7 関連研究 – Parameter-efficient transfer learning

Slide 8

Slide 8 text

LoRA: 各増分行列Δのランク𝑟を事前に一つに固定 →層やモジュールによってパラメータの寄与は異なるという事実を無視 8 動機 – LoRAの制約:低ランク近似においてランクを固定

Slide 9

Slide 9 text

新規性 1. 特異値分解に基づく分割 + back prop.による更新 1. 増分行列の分解 2. 特異値ごとに分けた定式化 2. 重要度によるランクの割り当て 1. 特異値の更新 2. 重要度の定義 9 提案 – AdaLoRA: ランク𝑟を適用する箇所に応じて適応的に変化

Slide 10

Slide 10 text

増分行列の分解 LoRA AdaLoRA 差分 10 AdaLoRA – 1. 特異値分解に基づく適応

Slide 11

Slide 11 text

増分行列の分解 Δ = PΛ𝑄は特異値分解のオマージュ 𝑃, 𝑄: 特異ベクトルを並べた直交行列, Λ: 特異値を並べた対角行列 PΛ𝑄をback prop.で最適化 𝑃, 𝑄が直交性を持つよう正則化項𝑅(𝑃, 𝑄)を追加 11 AdaLoRA – 1. 特異値分解に基づく分割 + back prop. 特異値をΛに押し付けているので 直交していれば𝑃𝑇𝑃は単位行列

Slide 12

Slide 12 text

増分行列の分解 Δ = PΛ𝑄は特異値分解のオマージュ 𝑃, 𝑄: 特異ベクトルを並べた直交行列, Λ: 特異値を並べた対角行列 初期化: Λは0 𝑃, 𝑄はガウス分布に従うランダム 12 AdaLoRA – 1. 特異値分解に基づく分割 + back prop.

Slide 13

Slide 13 text

特異値ごとに分けた定式化 Λは対角行列なので対角成分だけ見ればよい Tripletを定義 AdaLoRAを適用するパラメータ行列が𝑛個あると仮定 𝑘個目のパラメータ行列の増分行列Δ𝑘 に対するtriplet↓ 13 AdaLoRA – 1. 特異値分解に基づく分割 + back prop.

Slide 14

Slide 14 text

特異値の更新 ランク割り当てのためにtriplet に対する重要度 を定義 この を元に特異値をON/OFFしてランクを操作 ↑つまり重要度の高い順に 個のパラメータのみ残して他は0にする操作 14 AdaLoRA – 2. 重要度によるランクの割り当て 𝑡は学習ステップ バジェット

Slide 15

Slide 15 text

重要度 の定義 𝑠(⋅)の定義: [Zhang+, ICML22] に従う 15 AdaLoRA – 2. 重要度によるランクの割り当て

Slide 16

Slide 16 text

初期値: , 目標値: 16 AdaLoRA – 3. バジェット のスケジューリング (イメージ)

Slide 17

Slide 17 text

モデル: DeBERTaV3-base データセット: GLUE development set 17 定量的結果 – LoRAや他のベースラインを上回る性能 5回実験の平均 P < 0.05

Slide 18

Slide 18 text

モデル: DeBERTaV3-base データセット: MNLI, SQuADv2.0, XSum 18 定量的結果 – 学習可能パラメータ数に寄らずLoRAより良い性能

Slide 19

Slide 19 text

AdaLoRAによる学習後のランク割り当ての分布 19 定性的結果 – 最初の検証実験の結果にある程度沿った割り当て

Slide 20

Slide 20 text

AdaLoRAによる学習後のランク割り当ての分布 線形層(𝑊𝑓1 )に多く割り当て 20 定性的結果 – 最初の検証実験の結果にある程度沿った割り当て

Slide 21

Slide 21 text

AdaLoRAによる学習後のランク割り当ての分布 深い層に多く割り当て 21 定性的結果 – 最初の検証実験の結果にある程度沿った割り当て

Slide 22

Slide 22 text

LoRAは増分行列Δを低ランク近似する際にランクを固定している →層やモジュールによってパラメータの寄与が異なるという事実を無視 増分行列Δを低ランク近似する際に特異値分解に基いて分解 (Δ = PΛ𝑄) LoRAでは固定だったランク𝑟の値を,適用する層に応じて適応的に変化させる (Λのサイズを変化させる) LoRAなどのベースライン手法を上回るパフォーマンス 22 SUMMARY – LoRAの派生手法であるAdaLoRAを提案

Slide 23

Slide 23 text

Strength モチベーションがしっかりしていて, かつ検証実験の結果と最終的な定性的結果がそ ろっている 豊富かつ堅実な実験 Weakness Typo, 誤植が多い バジェットスケジューリングのablationが無い 結果的に得られるパラメータはparameter-efficientかもしれないが, 計算コストは増 えている(Appendix. K) 23 Appendix – おきもち

Slide 24

Slide 24 text

Open Review Paper (ICLR23) Paper (arXiv) Implementation in PEFT v0.3.0 src/peft/tuners/adalora.py - `AdaLoraModel` src/peft/tuners/adalora.py - `AdaLoraLayer` src/peft/tuners/adalora.py - `SVDLinear` src/peft/tuners/adalora.py - `RankAllocator` 24 Appendix – Link