人工知能
LoRa、QLoRA、QA-LoRA:低ランク行列分解による大規模言語モデルの効率的な適応性

大規模言語モデル(LLM)は、人間のようなテキストの理解と生成において比類のない能力を提供し、独自の地位を確立してきました。LLMの力は、しばしば数十億のパラメータを持つその膨大なサイズに起因します。この巨大な規模が性能を支える一方で、特に特定のタスクやドメインへのモデル適応において課題を生み出しています。全てのパラメータをファインチューニングするといった、LLMを管理する従来の方法は、多大な計算コストと金銭的負担をもたらし、実世界アプリケーションへの広範な採用における重大な障壁となっています。 以前の記事では、特定の要件に合わせて大規模言語モデル(LLM)をファインチューニングする方法について掘り下げました。命令ベースのファインチューニング、単一タスクファインチューニング、パラメータ効率的ファインチューニング(PEFT)など、異なるタスク向けにLLMを最適化するための様々な手法を探りました。議論の中心は、LLMの基盤であるトランスフォーマーアーキテクチャと、ファインチューニング中に膨大な数のパラメータを扱うことによる計算およびメモリ要求の課題でした。
上記の画像は、パラメータ数でソートされた様々な大規模言語モデルの規模を表しています。特に注目すべきは:PaLM、BLOOM, などです。 今年に入り、さらに大規模なモデルにつながる進展がありました。しかし、そのような巨大なオープンソースモデルを標準的なシステムで調整することは、専門的な最適化技術なしでは実行不可能です。 そこで登場したのが、マイクロソフトによってこの論文で紹介されたLow-Rank Adaptation(LoRA)です。これはこれらの課題を緩和し、LLMをよりアクセスしやすく適応可能にすることを目指しています。 LoRAの核心は、モデル全体を再トレーニングする複雑さに深入りすることなく、モデル適応に取り組むそのアプローチにあります。全てのパラメータが変更の対象となる従来のファインチューニングとは異なり、LoRAはより賢い道を採用します。事前学習済みのモデル重みを凍結し、トランスフォーマーアーキテクチャの各層に学習可能なランク分解行列を導入します。このアプローチにより、学習可能なパラメータ数が劇的に削減され、より効率的な適応プロセスが保証されます。
LLMチューニング戦略の進化
LLMチューニングの歩みを振り返ると、これまで実務家によって採用されてきたいくつかの戦略を特定できます。当初、焦点は事前学習済みモデルのファインチューニングに当てられていました。これは、手元の特定タスクに合わせてモデルパラメータを包括的に変更する戦略です。しかし、モデルがサイズと複雑さを増すにつれ、このアプローチの計算要求も増大しました。 次に注目を集めた戦略は、サブセットファインチューニングでした。これは前身のより抑制されたバージョンです。ここでは、モデルパラメータの一部のみがファインチューニングされ、ある程度計算負荷が軽減されます。その利点にもかかわらず、サブセットファインチューニングは依然としてLLMのサイズ成長率に追いつくことができませんでした。 実務家がより効率的な道を探求するにつれ、フルファインチューニングが厳密ではあるが報われるアプローチとして浮上しました。
LoRAの紹介
行列のランクは、その列によって作成される次元を垣間見せてくれ、それが持つ一意の行または列の数によって決定されます。
- フルランク行列:そのランクは、行数と列数のうち少ない方と一致します。
- 低ランク行列:行数と列数の両方よりも著しく小さいランクを持ち、より少ない特徴を捉えます。
さて、大規模モデルは、言語モデルにおける言語のように、そのドメインに関する広範な理解を把握しています。しかし、特定のタスク向けにそれらをファインチューニングするには、多くの場合、これらの理解のごく一部を強調するだけで済みます。ここでLoRAが輝きます。LoRAは、これらの重み調整を示す行列が低ランク行列、つまりより少ない特徴を捉えるものである可能性を示唆します。 LoRAは、この更新行列のランクを制限し、それを2つのより小さなランク行列に分割することで賢く対応します。したがって、重み行列全体を変更する代わりに、その一部のみを変更し、ファインチューニングタスクをより効率的にします。
トランスフォーマーへのLoRAの適用
LoRAは、特定の重み行列に焦点を当てることで、ニューラルネットワークのトレーニング負荷を最小化するのに役立ちます。トランスフォーマーアーキテクチャの下では、特定の重み行列がセルフアテンションメカニズム、すなわちWq、Wk、Wv、Woに関連付けられており、さらにMulti-Layer Perceptron(MLP)モジュール内の2つの行列もあります。
LoRAの背後にある数学的説明
LoRAの数学を分解してみましょう:
- 事前学習済み重み行列 W0:
- これは、次元 d×k の事前学習済み重み行列 W0 から始まります。これは、行列が d 行と k 列を持つことを意味します。
- 低ランク分解:
- 行列 W0 全体を直接更新する代わりに(これは計算コストがかかる可能性があります)、この方法は低ランク分解アプローチを提案します。
- W0 への更新 ΔW は、2つの行列の積として表すことができます: B と A。
- B の次元は d×r
- A の次元は r×k
- ここでの重要な点は、ランク r が d と k の両方よりもはるかに小さいことです。これにより、より計算効率の良い表現が可能になります。
- トレーニング:
- トレーニングプロセス中、W0 は変更されません。これは重みを「凍結」すると呼ばれます。
- 一方、A と B は学習可能なパラメータです。これは、トレーニング中にモデルの性能を向上させるために、行列 <span class="













