マルチクエリアテンションの解説

マルチクエリアテンションの解説'を美容とファッションの専門家が解説

マルチクエリアテンション(MQA)は、モデルのパフォーマンスを確保しながら、デコーダーでトークンを生成する速度を高めるためのアテンションメカニズムの一種です。

これは大規模言語モデルの時代に広く使用されており、多くのLLM(Large Language Models)がMQAを採用しています。例えば、FalconPaLMStarCoderなどです。

マルチヘッドアテンション(MHA)

MQAの紹介に入る前に、まずはトランスフォーマーのデフォルトのアテンションメカニズムについて repviewします。

マルチヘッドアテンションはトランスフォーマーモデルのデフォルトのアテンションメカニズムであり、以下の図1に示されています。

図1

ただし、テキストの生成に関しては、トランスフォーマーデコーダーベースの自己回帰言語モデルには問題があります。

トレーニング中は、真のターゲットシーケンスにアクセスし、効率的に並列処理を行うことができます。

しかし、推論中には各位置のクエリが、その位置の前または前のすべてのキー値ペアに関連付けられます。つまり、特定の位置の自己アテンション層の出力は、次のトークンの生成に影響を与えます。並列計算を行うことができないため、デコーディングは遅くなります。

以下は、トランスフォーマーデコーダーベースの自己回帰言語モデルの自己アテンション層のデコーディングプロセスです。

def MHAForDecoder(x, prev_K, prev_V, P_q, P_k, P_v, P_o):    q = tf.einsum("bd, hdk−>bhk", x, P_q)    new_K = tf.concat([prev_K, tf.expand_dims(tf.einsum ("bd, hdk−>bhk", x, P_k), axis = 2)], axis = 2)    new_V = tf.concat([prev_V, tf.expand_dims(tf.einsum("bd, hdv−>bhv", x, P_v), axis = 2)], axis = 2)    logits = tf.einsum("bhk, bhmk−>bhm", q, new_K)    weights = tf.softmax(logits)    O = tf.einsum("bhm, bhmv−>bhv", weights, new_V)    Y = tf.einsum("bhv, hdv−>bd", O, P_o)    return Y, new_K, new_V

変数:

  • x: 現在のステップ(m + 1ステップ)の入力テンソル。形状は[b, d]です。
  • P_q, P_k: クエリとキーの射影テンソル。形状は[h, d, k]です。
  • P_v: 値の射影テンソル。形状は[h, d, v]です。
  • P_o: 学習済みの線形射影。形状は[h, d, v]です。
  • Prev_K: 前のステップからのキーテンソル。形状は[b, h, m, k]です。
  • Prev_V: 前のステップからの値テンソル。形状は[b, h, m, v]です。
  • new_K: 現在のステップのキーテンソルの追加を含むテンソル。形状は[b, h, m+1, k]です。
  • new_V: 現在のステップの値テンソルの追加を含むテンソル。形状は[b, h, m+1, v]です。

次元:

  • m: これまでの実行されたステップ数
  • b: バッチサイズ
  • d: 入力と出力の次元
  • h: ヘッド数
  • k: Q, Kテンソルの別の次元
  • v: Vテンソルの別の次元

マルチクエリアテンション(MQA)

マルチクエリアテンションは、マルチヘッドアテンションのバリエーションです。

MQAのアプローチは、Qの元のヘッド数を保持し、KとVには1つのヘッドのみを持つことです。つまり、すべてのQヘッドが同じKヘッドとVヘッドのセットを共有するため、「マルチクエリ」という名前が付けられます。図2に示されています:

Figure 2

MQAのデコーディングプロセスのコードは、MHAのコードと基本的に同じですが、K、V、P_k、およびP_vのtf.einsum方程式から次元を表す文字「h」が削除された点が異なります:

def MQAForDecoder(x, prev_K, prev_V, P_q, P_k, P_v, P_o):    q = tf.einsum("bd, hdk−>bhk", x, P_q)    new_K = tf.concat([prev_K, tf.expand_dims(tf.einsum ("bd, dk−>bk", x, P_k), axis = 2)], axis = 2)    new_V = tf.concat([prev_V, tf.expand_dims(tf.einsum("bd, dv−>bv", x, P_v), axis = 2)], axis = 2)    logits = tf.einsum("bhk, bmk−>bhm", q, new_K)    weights = tf.softmax(logits)    O = tf.einsum("bhm, bmv−>bhv", weights, new_V)    Y = tf.einsum("bhv, hdv−>bd", O, P_o)    return Y, new_K, new_V

性能

MQAは実際にどれだけ速度を向上させることができるのでしょうか?元の論文で提供されている結果表を見てみましょう:

上の表から、MQAのエンコーダーにおける速度の改善はそれほど顕著ではないが、デコーダーにおいてはかなり顕著であることが分かります。

また、論文では品質に関する実験も行われており、MQAはベースラインと比較してわずかに性能が低いことが示されています。詳細については、この記事の下部にあるリンク先の論文をご参照ください。

なぜMQAは推論の高速化を実現できるのですか?

よりメモリ効率が高い

MQAでは、キーと値のテンソルのサイズはb * kおよびb * vですが、MHAでは、キーと値のサイズはb * h * kおよびb * h * vであり、ここでhはヘッドの数を表します。

より低い計算量

KVキャッシュを使用することにより、MQAの各ステップでテンソルキーと値を計算するための計算コストは、MHAの1/h分になります。ここでhはヘッドの数を表します。

まとめ

一般的に、MQAは次の方法により推論の高速化を実現しています:

  • キーと値のキャッシュサイズがh(ヘッドの数)の倍だけ減少するため、GPUメモリに格納する必要があるテンソルも減少します。節約されたスペースはバッチサイズを増やすために使用でき、効率が向上します。
  • メモリから読み込むデータ量が減少し、計算ユニットの待ち時間が減少し、計算利用率が向上します。
  • MQAは、キャッシュ(SRAM)に収まる比較的小さなKVキャッシュを持っていますが、MHAはキャッシュに完全に格納できず、GPUメモリ(DRAM)から読み込まなければならないため、時間がかかります。

結論

MQAは2019年に提案され、当時は適用範囲がそれほど広くありませんでした。これは、以前のモデルではこれらの側面を考慮する必要がなかったためです。例えば、LSTMでは状態を1つだけ維持すれば十分であり、キャッシュを保持する必要がありませんでした。

トランスフォーマーは最初に提案されたとき、主にSeq2Seqタスク、特にエンコーダーデコーダーモデルで使用されました。しかし、モデルのスケールは大きくなく、実用的な需要もほとんどなかったため、MQAにはあまり注意が集まりませんでした。

その後、代表的なモデルであるBERTが登場し、トランスフォーマーエンコーダー構造に基づいて直接順方向のパスが実現されました。

最近では、GPTのようなトランスフォーマーデコーダーを基にした大規模言語モデルが広く利用されるようになったことで、推論のボトルネックが発見されました。その結果、数年前のテクニックを再評価し、非常に有用であることがわかりました。言い換えれば、主に大規模なGPTスタイルの生成モデルに対する実用的な需要があるためです。

最後に、このテキストに何かエラーや抜け漏れがある場合は、ご指摘いただければ幸いです。

参考文献

MQA論文:高速トランスフォーマーデコーディング:ワンライトヘッドがすべてを解決する

注意すべきはすべてです

https://paperswithcode.com/method/multi-query-attention

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI研究

希望、恐怖、そしてAI:AIツールに対する消費者の態度に関する最新の調査結果

米国の消費者が人工知能(AI)に関する意見と認識について述べた最新の「Trust Survey」の結果を明らかにしたThe Vergeの報告...

データサイエンス

学ぶための勇気: L1&L2正則化の解明(パート3)

「‘MLの学びへの勇気:L1とL2正則化の解読’ 第3回目にお帰りなさい前回は、正則化の目的について掘り下げ、L1とL2の方法を解...

AIニュース

「AIで生成されたコードはさらにテストが必要ですか?」

「AIを搭載したツールを使用すれば、アプリケーションのプログラミングが簡単になりますしかし、人間によって書かれたコード...

機械学習

「SIEM-SOAR インテグレーションによる次世代の脅威ハンティング技術」

NLP、AI、およびMLは、データ処理の効率化、自動化されたインシデント処理、コンプライアンス、および積極的な脅威検知を通じ...

データサイエンス

『GPT-4を使用したパーソナライズされたAIトレーディングコンサルタントの構築』

はじめに 近年、人工知能(AI)を株式取引に統合することで、投資家の意思決定に革命が起きています。GPT-3やGPT-4などの大規...

機械学習

「時系列予測と再帰型ニューラルネットワーク」

この記事は、時系列予測に関する包括的なガイドを提供しており、リカレントニューラルネットワーク(RNN)を使用した予測方法...