LORA: 大規模言語モデルの低ランク適応

LORA: 大規模言語モデルの低ランク適応 (論文の読書)

Edward H、マイクロソフト、arXiv2021、引用数: 354、コード論文

1 はじめに

自然言語処理の重要なパラダイムは、一般的なドメイン データに対して大規模な事前トレーニングを実行し、その後、特定のタスクまたはドメインに従って適応トレーニングを実行することです。モデルを大規模に事前トレーニングするにつれて、完全な微調整 (すべてのモデル パラメーターの再トレーニング) はますます実現可能性が低くなります。GPT-3 175B を例に挙げると、それぞれが 175B パラメーターを持つ独立した微調整モデル インスタンスをデプロイするとコストがかかりすぎます。私たちは、事前トレーニングされたモデルの重みを凍結し、トレーニング可能なランク因数分解行列を Transformer アーキテクチャの各層に注入する、低ランク適応 (LoRA) 手法を提案します。 。Adam で微調整された GPT-3 175B と比較して、LoRA はトレーニング可能なパラメーターの数を 10,000 分の 1 に削減し、GPU メモリ要件を 3 分の 1 に削減できます。LoRA は、モデル品質の点で RoBERTa、DeBERTa、GPT-2、および GPT-3 の微調整と同等かそれ以上のパフォーマンスを発揮します。トレーニング可能なパラメーターが少なく、トレーニング スループットが高く、アダプターと比較して追加の推論を導入しません。待ち時間。また、言語モデルの適応におけるランク欠落に関する実証研究も実施しており、これは LoRA の有効性を明らかにするのに役立ちます。

2. 全体論的思考

モデルが大きく、直接微調整するのは困難ですが、この記事のアイデアは、事前学習済みモデルの重みを適応させることです。具体的な方法は下図のとおりです。大きなモデルの隣にあるエンコーダー (?) をトレーニングして特定のタスクに適応させ、出力値を元の大きなモデルと融合します。

3. はじめに

多くの人は、一部のパラメータのみを調整したり、新しいタスク用の外部モジュールを学習したりすることで、この問題を軽減しようとします。この方法では、タスクごとにタスク固有のパラメータの小さなセットと事前トレーニングされたモデルを保存して読み込むだけで済み、展開時の運用効率が大幅に向上します。ただし、既存の手法では、モデルの深さを増やすか、モデルで利用可能なシーケンスの長さを減らすことにより、推論の遅延が発生することがよくあります。

推理延迟(Inference Latency)是指从输入数据传入模型,到模型输出结果可用的时间间隔。
在机器学习中,模型的推理过程通常包括将输入数据传递给模型,模型执行计算并生成输出结果。
推理延迟是指从输入数据传入模型开始,到最终输出结果可用的时间,包括数据传输、计算和处理的时间。

さらに、これらの方法は通常、微調整ベースラインと一致することができず、効率とモデルの品質の間にはトレードオフの関係があります。学習されたハイパーパラメータ化モデルは、実際には低い固有次元に存在します。適応中のモデルの重み変化も低い「固有ランク」を持つと仮定して、低ランク適応(LoRA)方法を提案します。LoRA を使用すると、図 1 に示すように、事前トレーニングされた重みを一定に保ちながら、適応プロセス中に高密度層の重み変更のランク因数分解行列を最適化することで、ニューラル ネットワーク内の一部の高密度層を間接的にトレーニングできます。GPT-3 175B を例にとると、フルランク (すなわち d) が 12,288 と高くても、非常に低いランク (すなわち、図の r ) が非常に高いことが証明されます。

ここに画像の説明を挿入
LoRA には、いくつかの重要な利点があります。
• 事前トレーニングされたモデルを共有し、さまざまなタスク用の小さな LoRA モジュールを構築するために使用できます。図 1 の行列 A と B を置き換えることにより、共有モデルをフリーズし、タスクを効率的に切り替えることができます。これにより、ストレージ要件とタスク切り替えのオーバーヘッドが大幅に削減されます。
• LoRA は、適応オプティマイザーを使用することでトレーニングをより効率的にし、ほとんどのパラメーターの勾配を計算したり、オプティマイザーの状態を維持したりする必要がないため、ハードウェアの参入障壁を最大 3 倍まで削減します。代わりに、元のモデルよりもはるかに小さい、注入された低ランク行列のみを最適化します。
• シンプルな線形設計により、デプロイメント時に固定重みを使用してトレーニング可能な行列を組み込むことができ、完全に微調整されたモデルと比較して推論遅延が発生しません。
• LoRA は、以前の多くの方法と直交しており、プレフィックス調整などの多くの方法と組み合わせることができます。

3.1 問題の記述

私たちの提案はトレーニングの目的とは関係ありませんが、動機付けのケースとして言語モデリングに焦点を当てています。以下は、言語モデリングの問題、特にタスク固有の手がかりが与えられた条件付き確率の最大化について簡単に説明します。

パラメータΦ Φがあるとします。Φパラメーター化された事前トレーニング済み自己回帰言語モデルP Φ ( y ∣ x ) P_Φ(y|x)PF( y x )。たとえば、P Φ ( y ∣ x ) P_Φ(y|x)PF( y x )は、GPT などの Transformer アーキテクチャに基づく汎用マルチタスク学習器にすることができます。この事前トレーニング済みモデルを、要約、機械読解 (MRC)、自然言語から SQL (NL2SQL) などの下流の条件付きテキスト生成タスクに適用することを検討してください。各ダウンストリーム タスクは、コンテキストとターゲットのペアのトレーニング データセットによって表されます:Z = ( xi , yi ) , i = 1 , ..., NZ = {(x_i, y_i)}, i=1,...,NZ=( ×私はy私は=1 .. N。ここで、 xi と yi は両方ともトークン シーケンスです。たとえば、NL2SQL では、xi x_iバツ私はは自然言語クエリです。yi y_iy私はは、対応する SQL コマンドです。要約生成では、xi x_iバツ私は記事の内容です、yi y_iy私ははその要約です。

完全な微調整中、モデルは事前にトレーニングされた重みΦ 0 Φ_0に初期化されます。ファイ0、勾配を繰り返しトレースすることで条件付き言語モデリングの目標を最大化します。Φ 0 + ∆Φ Φ_0 + ∆Φとして更新されます。ファイ0+ΔΦ . 完全な微調整の主な欠点は、下流タスクごとに異なるパラメータ セット∆Φ ∆Φ∆Φ、その寸法∣ ∆ Φ ∣ |∆Φ|∣∆Φ∣は∣ Φ 0 ∣ |Φ_0|に等しいΦ0したがって、事前学習済みモデルが大きい場合 (GPT-3 など)、∣ Φ 0 ∣ |Φ_0|Φ0∣約1,750 億)、多くの独立した微調整されたモデル インスタンスを保存して展開することは困難であるか、実行不可能である可能性があります。この論文では、よりパラメータ効率の高いアプローチを採用します。タスク固有のパラメータの増分ΔΦ = ΔΦ ( Θ ) ΔΦ = ΔΦ(Θ)ΔΦ=ΔΦ ( Θ )はΦ 0 Φ_0よりもはるかに小さいサイズを渡しますファイ0パラメータセットΘ ΘΘ、つまり∣ Θ ∣ < < ∣ Φ 0 ∣ |Θ| << |Φ_0|∣Θ∣<<Φ0したがって、ΔΦ ΔΦ∆ΦのタスクはΘ ΘのタスクになりますΘが最適化されます。∆Φ ∆Φに対して低ランク表現を使用することを提案します。ΔΦはエンコードされるため、計算効率とメモリ効率の両方が向上します。事前学習モデルが GPT-3 175B の場合、学習可能なパラメータの数∣ Θ ∣ |Θ|∣Θ∣ はΦ 0 Φ_0まで小さくすることができますファイ00.01%。

3.2 関連作品

私たちが解決しようとしている問題は決して新しいものではありません。転移学習の出現以来、モデルの適応をよりパラメトリックかつ計算的に効率的に行うために、数十のアプローチが専念されてきました。言語モデリングを例にとると、主に 2 つの効率的な適応戦略があります。それは、アダプター層 (アダプター) を追加すること、または何らかの形式の入力層アクティブ化を最適化することです。ただし、どちらの戦略にも制限があり、特に大規模でレイテンシの影響を受けやすい運用シナリオでは制限があります。

プロンプト エンジニアリングと微調整: GPT-3 175B は少数の追加トレーニング サンプルのみを使用して動作を調整できますが、結果は入力プロンプトに大きく依存します。これには、ヒント エンジニアリングまたはヒント改善として知られる、目的のタスクでモデルのパフォーマンスを最大化するためにヒントを組み合わせてフォーマットする経験的なトリックが必要です。微調整とは、一般的なドメインで事前トレーニングされたモデルを特定のタスクに合わせて再トレーニングすることです。その変形には、パラメータのサブセットのみを学習することが含まれますが、実務者は通常、下流のパフォーマンスを最大化するためにすべてのパラメータを再トレーニングします。ただし、GPT-3 175B のサイズが大きいため、生成されるチェックポイントが大きく、事前トレーニングと同じメモリ フットプリントがあるため、ハードウェアの参入障壁が高いため、通常の方法で微調整することが困難になります。

パラメータの効率的な適応: 多くの人が、ニューラル ネットワークの既存の層の間にアダプター層を挿入することを提案しています。私たちの方法では、同様のボトルネック構造を使用して、重みの更新に低ランクの制約を課します。主な機能の違いは、学習した重みを推論中にメインの重みとマージできるため、遅延が発生しないのに対し、アダプター層にはこの機能がないことです。アダプターの最新の拡張機能は COMPACTER です。これは基本的に、クロネッカー積と所定の重み共有スキームを使用してアダプター層をパラメーター化します。同様に、LoRA を他のテンソル積ベースの手法と組み合わせると、パラメータ効率の向上に役立つ可能性がありますが、これは将来の研究に残されています。最近、連続微分可能なヒント エンジニアリングによる一般化と同様に、微調整を行わずに入力単語の埋め込みを最適化することが多くの人によって提案されています。

深層学習における低ランク構造: 機械学習では低ランク構造が非常に一般的です。多くの機械学習の問題には、特定の固有の低ランク構造があります。さらに、多くの深層学習タスク、特に過パラメータ化されたニューラル ネットワークを使用したタスクでは、トレーニング後の学習済みニューラル ネットワークは低ランクの特性を持つことが知られています。これまでの研究の中には、生のニューラル ネットワークをトレーニングするときに低ランクの制約を明示的に課したものもありましたが、私たちの知る限り、これらの研究のどれも、下流タスクの凍結モデルに対する低ランクの更新を考慮していませんでした。理論文献では、基礎となる概念クラスが特定の低ランク構造を持つ場合、ニューラル ネットワークは、対応する (有限幅) ニューラル タンジェンシャル カーネルなどの他の古典的な学習方法よりも優れたパフォーマンスを発揮することが知られています。低ランクの適応は、敵対的なトレーニングに役立ちます。要約すると、私たちが提案する低ランク適応アップデートは文献から十分にインスピレーションを得たものであると考えています。

4. 方法

4.1 用語と規約

私たちはしばしば Transformer アーキテクチャについて言及し、その寸法について従来の用語を使用します。Transformer レイヤーの入力および出力の次元をdmodel d_{model}と呼びます。dモデル_ _ _ _。我们使用 W q , W k , W v W_q,W_k,W_v WqWWv W o W_o Wああセルフアテンション モジュールのクエリ/キー/値/出力射影行列を表します。WWW W 0 W_0 W0事前にトレーニングされた重み行列∆W ∆Wを参照します。ΔW は、適応プロセス中に蓄積された勾配更新を指します私たちはrrを使いますr はLoRA モジュールのランクを表します。モデルの最適化には Adam を使用し、Transformer MLP フィードフォワード次元dffn = 4 × dmodel d_{ffn} = 4×d_{model} をdふふん_=4×dモデル_ _ _ _

4.2 低ランクのパラメータ化のための更新行列

ニューラル ネットワークには、行列の乗算を実行する高密度の層が多数含まれています。これらの層の重み行列は通常、フルランクを持ちます。特定のタスクに適応させると、事前トレーニングされた言語モデルは「固有の次元」が低く、小さな部分空間にランダムに投影された場合でも効率的に学習します。これに触発されて、適応中の重みの更新も低い「固有ランク」を持つと仮説を立てます。事前トレーニングされた重み行列W 0 ∈ R d × k W_0 \in \mathbb{R}^{d \times k} の場合W0Rd × kを、 W 0 + ∆W = W 0 + BA を低ランク W_0 + ∆W = W_0 + BA で分解しますW0+ΔW _=W0+B Aは更新を制約します。ここで、B ∈ R d × r 、A ∈ R r × k B \in \mathbb{R}^{d \times r}、A \in \mathbb{R}^{r \times k}BRd × rRr × kトレーニング中、W 0 W_0W0AAはフリーズしており、勾配の更新を受信しません。ABBBにはトレーニング可能なパラメータが含まれています。W 0 W_0に注意してくださいW0 ∆ W = B A ∆W = BA ΔW _=Bと Aは両方とも同じ入力で乗算され、それらの出力ベクトルが座標上で合計されます。h = W 0 xh = W_0xの場合h=W0x、変更された前方パスの結果は次のようになります:
h = W 0 x + Δ W x = W 0 x + BA xh=W_0x+ΔWx=W_0x+BAxh=W0バツ+ΔW × _=W0バツ+B A x
A にはランダムなガウス初期化を使用し、B にはゼロ初期化を使用するため、トレーニングの開始時は∆W = BA ∆W = BAΔW _=B A はゼロです。次に、 α/r α/rを渡します。α / rΔW x ΔW xW xはスケーリングされます。ここで、α αアルファはrrですrの定数Adamで最適化する場合はα αα は学習率の調整とほぼ同じで、初期化を適切にスケールするだけです。したがって、単純にα αα は最初に試行するrrr、調整しないでください。

より一般的な形式の微調整では、事前トレーニングされたパラメーターのサブセットをトレーニングできます。LoRA はさらに一歩進んで、適応中に重み行列の累積的な勾配更新がフルランクになることを要求しません。これは、LoRA をすべての重み行列に適用し、すべてのバイアスをトレーニングするときに、LoRA のランクrrを適用することによって、r を事前トレーニングされた重み行列のランクに設定すると、完全な微調整の表現力を大まかに回復します。言い換えれば、トレーニング可能なパラメーターの数が増加するにつれて、LoRA のトレーニングは元のモデルのトレーニングにほぼ収束しますが、アダプター ベースのメソッドは多層パーセプトロン (MLP) に収束し、プレフィックス ベースのメソッドは長い入力シーケンスを処理できなくなることに収束します。モデル

4.3 loRAを変圧器に適用する

原理的には、LoRA をニューラル ネットワーク内の重み行列の任意のサブセットに適用して、トレーニング可能なパラメーターの数を減らすことができます。Transformer アーキテクチャでは、セルフアテンション モジュールに 4 つの重み行列があります ( W q 、 W k 、 W v 、 W o W_q、 W_k、 W_v、 W_oWqWWvWああ)、MLP モジュールには 2 つの重み行列があります。私たちはW q W_qしますWq(或 W k 、 W v W_k、W_v WWv) 次元としてdmodel × dmodel d_{model}×d_{model}dモデル_ _ _ _×dモデル_ _ _ _の単一の行列ですが、出力次元は通常、複数のアテンション ヘッドにスライスされます。簡素化とパラメーターの効率化のため、研究を下流のタスクにアテンションの重みを適応させることのみに制限し、MLP モジュールをフリーズします (したがって、下流のタスクではトレーニングされません)。

Transformer のどのウェイト マトリックスで Lora を使用する必要がありますか? パラメーターの予算が限られている中で、下流のタスクで最高のパフォーマンスを達成するには、LoRA を使用してどのような種類の重みを適応させるべきでしょうか? セルフアテンションモジュールでは重み行列のみを考慮します。GPT-3 175B では、パラメーター バジェットを 18M (FP16 に保存されている場合は約 35MB) に設定します。これは、96 レイヤーすべてに対して、1 種類のアテンション ウェイトをフィッティングする場合の r = 8、または 2 つのタイプをフィッティングする場合の r = 4 に相当します。結果を表5に示す。
ここに画像の説明を挿入
MLP レイヤー、LayerNorm レイヤー、バイアスの適応に関する実証研究は今後の作業に残されています。

おすすめ

転載: blog.csdn.net/qq_43800752/article/details/130976670