大規模なモデルの場合、すべてのモデル パラメーターの完全な微調整を再トレーニングすることは不可能になります。たとえば、GPT-3 175B では、モデルに 175B パラメータが含まれていますが、トレーニングやモデルのデプロイメントの微調整であっても、それは不可能です。そこで Microsoft は、事前トレーニングされたモデルの重みを凍結し、トレーニング可能なランク分解行列を Transformer アーキテクチャの各層に注入する、低ランク適応 (Low-Rank Adaptation、LoRA) を提案しました。これにより、下流タスクのトレーニング可能なパラメーターの数が大幅に削減されます。 。
LoRA
事前トレーニングされた重み行列 W0 の場合、その更新を低ランク分解で表現される後者の条件に従って行うことができます。
トレーニング中、W0 はフリーズされ、勾配の更新を受け取りませんが、A と B にはトレーニング可能なパラメーターが含まれています。h=W0x の場合、修正された順伝播は次のようになります。
A にはランダムなガウス初期化を使用し、B にはゼロ初期化を使用するため、トレーニングの開始時に ΔW=BA はゼロになります (これには注意が必要です)。
このアプローチの利点は、運用環境に導入するときに、W = W0 + BA のみを計算して保存する必要があり、推論が通常どおり実行されることです。他の方法と比較して、追加のレイヤーを接続する必要がないため、追加の遅延は発生しません。
Transformer アーキテクチャでは、セルフアテンション モジュールに 4 つの重み行列 (Wq、Wk、Wv、Wo) があり、MLP モジュールに 2 つの重み行列があります。LoRA は下流タスクのアテンション ウェイトのみを調整し、MLP モジュールをフリーズします。したがって、大規模な Transformer の場合、LoRA を使用すると VRAM の使用量を最大 2/3 削減できます。たとえば、GPT-3 175B では、LoRA を使用すると、トレーニング中の VRAM 消費量を 1.2TB から 350GB に削減できます。
結果表示
HuggingFace Transformers ライブラリの事前トレーニング RoBERTa ベース (125M)、RoBERTa ラージ (355M)、および DeBERTa XXL (1.5B) を評価に使用しました。これらは、さまざまな微調整方法で微調整されます。
LoRA を使用すると、ほとんどの場合、GLUE で最高のパフォーマンスが得られます。
WikiSQL および mnli マッチングにおける GPT-3 175B のいくつかの適応メソッドのトレーニング可能なパラメーターの数の比較
GPT-3 を使用すると、LoRA は 3 つのデータセットすべてで微調整されたベースラインと一致またはそれを超えていることがわかります。
安定した拡散
Lora は最初に大規模言語モデルに適用されましたが、SD での彼のアプリケーションはより多くの人に知られるかもしれません。
安定拡散の微調整の場合、LoRA は、画像表現をそれを説明する手がかりと結び付けるクロスアテンション レイヤーに適用できます。以下の画像の詳細は重要ではありません。黄色のブロックが画像とテキスト表現の間の関係を構築する役割を担っていることだけを知っておいてください。
したがって、この方法でトレーニングされたカスタム Lora モデルは非常に小さいことがわかります。
私の個人的な実験: 安定した拡散には、包括的な微調整のために少なくとも 24G のビデオ メモリが必要です。しかし、Lora を使用すると、バッチ サイズ 2 の単一プロセス トレーニングを単一の 12 GB GPU (xformer なしで 10 GB、xformer ありで 6 GB) で実行できます。
したがって、Lora は、画像生成の分野でモデルを微調整するための非常に優れた方法でもあります。さらに詳しく知りたい場合は、論文のアドレスを以下に示します。
https://avoid.overfit.cn/post/407a85d672384969848f8bc5cb9bc5fe