トランスフォーマー-《必要なのは注意だけ》

目次

0.トランス紹介

1.self-attention 和多頭のself-attention

1.1 セルフアテンション(セルフアテンションのメカニズム)

1.2 マルチヘッドセルフアテンション(マルチヘッドセルフアテンション機構)

2. ネットワーク構造

2.1 エンコーダー(エンコーダー)

2.2 デコーダ(デコーダ)

2.3 位置別フィードフォワードネットワーク(FFN)

2.4 位置エンコーディング 

2.5 追加&標準化

3. 参考ブログ投稿


0.トランス紹介

2017 年に Vaswani らは、「Attending Is All You Need」で Transformer モデルを提案しました。これは、入力と出力の計算を自己注意に完全に依存する最初のモデルであり、自然言語の分野で広く使用されています。それ以来の処理。

論文のタイトル: 「必要なのは注意だけです」 

論文アドレス: https://arxiv.org/abs/1706.03762

Transformer は典型的な Seq2Seq モデルです。Seq2Seq モデルの中心的な考え方は、シーケンス (テキストなど) を固定サイズのベクトル表現にエンコードし、それを別のシーケンスにデコードすることです。このようなモデルには通常、エンコーダとデコーダが含まれており、それぞれ入力シーケンスを隠れた表現にエンコードし、隠れた表現を出力シーケンスにデコードする役割を果たします。したがって、Transformer はこの全体的なアーキテクチャに従い、次の図に示すように、エンコーダーとデコーダーの両方でスタック型セルフアテンションとフィードフォワード NN (順方向伝播層) を使用します。

1.self-attention 和多頭のself-attention

1.1 セルフアテンション(セルフアテンションのメカニズム)

アテンション メカニズムは、クエリ、キー、値、出力がすべてベクトルである、クエリ キー値を出力にマッピングするプロセスとして説明できます。出力は値の加重合計として計算され、各値に割り当てられた重みはクエリと対応するキーの関数として計算されます。アテンションの計算式を次の図に示します。

1) qkv を初期化して生成します。

次の図は例です。入力は 3 つのノード a1、a2、a3 で、埋め込み層を介して 3 つの入力データはベクトル x1、x2、x3 に変換され、その後 3 つのノードのベクトルと重み行列 Wq に変換されます。 、Wk、Wv (これら 3 つのパラメーターはトレーニング可能で共有されます) を計算して、以下の図に示すように qi、ki、vi を取得します。(q は将来各 k と照合されるクエリを表します。k は
将来各 q と照合されるキーを表します。v は入力ベクトル x から抽出された情報を表します)

 2) 関連性スコアスコアを計算します。

QK^{T}自己注意の 2 番目のステップは、注意の計算式の一部である相関スコアを計算することです。スコアは、クエリ ベクトル (Queries) と、スコアリングする対応する単語のキー ベクトル (keys) の内積によって計算され、2 つのベクトル間の相関の度合いを表します。値が大きいほど、度合いが高くなります。相関関係の。

内積公式:\vec{a}\ast \vec{b}=\left |  \vec{a} \right |\ast \left |\vec{b} \right |\ast\cos \theta

スコアの計算では、qi と ki の内積演算を 1 つずつ実行してスコア値を取得します。たとえば、q1 を k1、k2、k3 でそれぞれ実行し、3 つのスコア値を取得します。 

3) スコアをスケールおよび正規化します。

原文では、ドット乗算後の値が非常に大きく、ソフトマックスを通過した後の勾配が小さくなることが指摘されているため、この論文ではモデルトレーニングの勾配をより安定させるためにスケーリング操作が使用されています。ズーム操作は、アテンションの計算式で で割ることです\sqrt{d_{k}}。これはd_{k}入力 q の次元で、元のテキストでは 64 であるため、平方根後の値は 8 になります。

スコア値をスケーリングした後、ソフトマックスを使用してスコアがすべて正になり、合計が 1 になるように正規化します。これは、各 v の重みを計算することと同等であり、ソフトマックス スコアは、文内の各単語の位置の重要性を決定します。

4) 各単語の重要性を再配分します。

各値ベクトル (値) に対応するソフトマックス スコアを掛けます。その目的は、各単語の重要性、つまりアテンションの式でソフトマックスの V を乗算した部分を再配分することであり、計算された値がアテンションの値になります。たとえば、セルフアテンション処理後の単語「a1」の出力は、0.70 x v1 + 0.18 x v2+ 0.12 x v3 です。つまり、現在の文がセルフアテンションによって処理された後、単語「a1」の意味は次のようになります。自身の意味の 70%、次の単語 "a2" の意味の 18%、次の単語 "a3" の意味の 12% が含まれており、このような処理はテキスト コンテキストの関係を反映します。

5) 要約: 

実際の計算では、処理を高速化するために、入力単語ベクトル x1、x2、x3 と重み行列を通じて得られた Q、K、V を行列に結合します。上の図に示すように、Q、K、V は入力行列で、それぞれクエリ行列、キー行列、値行列を表し、dk はベクトル次元です。この式の機能は、Q と K の類似度を重み付けすることにより、入力に対応する V の重み付き和を取得し、注意メカニズムの出力行列を取得することです。

1.2 マルチヘッドセルフアテンション(マルチヘッドセルフアテンション機構)

著者らは論文の中で、多頭注意によりモデルが異なる場所の異なる表現部分空間からの情報に共同で焦点を当てることができると指摘している。単一のアテンションヘッドの場合、平均化によりこれが抑制されます。

 したがって、実際の運用においては、基本的にはマルチヘッドアテンション機構(Multi-heads Attendance)が利用される。マルチヘッドセルフアテンションの式は次のとおりです。

マルチヘッド アテンションの場合、クエリ ベクトル (Queries)、キー ベクトル (key)、および値ベクトル (value) のセットが複数あります。ここで、q、k、v ベクトルのセットをヘッドと呼び、各ヘッドを連結スプライシング操作の結果が実行され、スプライスされた結果にわ^{お}融合用の追加の重み行列 (学習可能なパラメータ) が乗算され、融合後に最終結果行列が取得されます。

この論文では 8 つのアテンション ヘッドが使用されており、アテンション ヘッドの各セットのパラメータはトレーニング可能であり、トレーニング後は、入力データのさまざまな位置に焦点を当てるモデルの機能を拡張できます。8 つのアテンション ヘッドはそれぞれ 8 つの出力を生成しますが、実際に必要な出力は 1 つだけです。したがって、これら 8 つの出力を 1 つの行列に圧縮する方法が必要です。この方法も非常に簡単で、追加の重み行列を乗算するだけですわ^{お}。この操作は、次の図に示すように、ニューラル ネットワーク層を通じて簡単にマッピングできます。

2. ネットワーク構造

2.1 エンコーダー(エンコーダー)

エンコーダは、入力情報を特徴ベクトルにエンコードする役割を担うアルゴリズム コンポーネントです。この入力情報はタスクによって異なりますが、テキストは画像である場合もありますが、テキストや画像そのものをエンコーダに直接入力することはできません。エンコーダに送信するには、ベクトル化 (埋め込み) してベクトルにする必要があります。

エンコーダは主に入力シーケンスを固定長ベクトルに変換します。Transformer のエンコーダは 6 つの同一の層で構成され、各層には 2 つの部分が含まれます: 1) マルチヘッド セルフ アテンション (マルチヘッド セルフ アテンション層
)
2 ) フィードフォワード ニューラル ネットワーク (順伝播層)

エンコーダ モジュールでは、エンコーダのセルフ アテンション層の周囲に残留接続があり、次に Layer Norm 層の正規化操作が行われ、正規化された出力はフィードフォワード ネットワーク FNN (フォワード ニューラル ネットワーク) を介してマッピングされ、さらなる処理が行われます。フィードフォワード ネットワークは基本的にニューラル ネットワーク層の複数の層であり、中央に ReLU 活性化があり、以下のセクション 2.3 で説明する MLP ブロックなどの 2 つの層間の残りのリンクがあります。

ネットワークでは、残りの接続が勾配の逆伝播に役立ち、モデルの収束をより速く、より適切に行うことができます。層正規化は、ネットワークを安定させ、深層学習モデルの不安定な数値転送の問題を軽減するために使用されます。

2.2 デコーダ(デコーダ)

デコーダは生成タスクを実行しますが、それが識別タスクである場合、デコーダ構造は必要ありません。デコーダーは、必要なターゲット シーケンスを生成するために、エンコーダーの出力を変換および解釈する必要があります。

デコーダは、エンコーダによって生成されたベクトルから出力シーケンスを生成するために使用されます。デコーダも 6 つの同一の層で構成され、各層には 3 つの部分が含まれます: 1) マスクされたマルチヘッド アテンション (マスク マルチヘッド サブアテンション層
) )

これはエンコーダーのマルチヘッド アテンションの計算原理と同じですが、追加のマスク コードが追加されます。Transformer のマスキング メカニズムは、シーケンスの処理時にモデルがアクセスすべきではない情報にアクセスするのを防ぐために使用されます。モデルにはパディング マスクとシーケンス マスクの 2 種類のマスクが含まれます。

a.パディングマスク

自然言語処理タスクでは、異なる長さの文をモデルにフィードするために、通常、短い文を最も長い文と同じ長さになるようにパディングする必要があります。パディングは通常、<pad> などの特殊な記号を使用して表されます。

パディング マスクの目的は、セルフ アテンションの計算中にこれらのパディング位置を無視することです。これは、これらのフィラー シンボルが実際には意味のある情報を持たず、他の単語間の注意の重みの計算に影響を与えたくないために行われます。パディング マスクは、パディング位置に対応するアテンション ロジットを非常に大きな負の数に設定することによって実装されます。このようにして、ソフトマックス関数が適用されると、塗りつぶされた位置に対応する注目の重みはゼロに近くなります。

b.sequence マスク
シーケンス マスクは、デコーダが将来の情報を参照できないようにするためのものです。シーケンスの場合、time_step が t の場合、デコード出力は t 前の出力にのみ依存し、t 後の出力には依存しません。したがって、t 以降の情報を非表示にする方法を考える必要があります。これは、トレーニング中にターゲット データをデコーダに完全に入力するたびに、予測中には必要ないため、トレーニング中に効果的です。予測中には、直前の時点で予測された出力のみを取得できます。
シーケンス マスクは、下三角行列 (上三角部分が負の無限大である) をアテンション ロジット行列に追加することによって実装されます。このように、ソフトマックス関数を適用すると、現在位置以降の単語に対応する注目の重みがゼロに近くなります。これにより、デコーダは各タイム ステップで現在のワードと前のワードのみに焦点を当てるようになります。

c.概要

パディング マスクはパディング シンボルの影響を無視するために使用されますが、シーケンス マスクは生成プロセス中にデコーダが自己回帰原理に従うことを保証します。マスキングにより、シーケンスを処理する際のモデルの安定性と信頼性を高めることができます。エンコーダのマルチヘッド アテンションもマスクする必要がありますが、エンコーダではパディング マスクのみが必要で、デコーダではパディング マスクとシーケンス マスクが必要です。

2) Encoder-Decoder Multi-Head Attention (マルチヘッドエンコーディング-デコーディングサブアテンション層)

エンコーダのマルチヘッド アテンションはセルフ アテンションに基づいています。デコーダの 2 番目のマルチヘッド アテンションはアテンションのみに基づいています。その入力 Quer はマスクされたマルチヘッド アテンションの出力とキーから来ます値はエンコーダーから取得され、最後のレイヤーの出力となります。

3) フィードフォワード NN (順伝播層)

これはエンコーダ内のものと同じであり、セクション 2.3 に示すように MLP モジュールを使用して実装されます。

デコーダの最終出力では、まず線形変換が行われ、次に Softmax が出力確率分布を取得し、辞書照合を通じて、最も高い確率で対応する単語が予測出力として出力されます。

2.3 位置別フィードフォワードネットワーク(FFN)

Transformer では、フィード フォワード (FNN) 層は、セルフ アテンション メカニズムの後のシーケンス内の各ベクトルに個別に適用される MLP です。FFN 層の式は次のとおりです。

 MLP ブロックは 2 つの全結合層と非線形活性化関数 (ReLU または GELU など) で構成されます。最初の全結合層は、最終出力に残留接続があるため、入力ノードの数を 4 倍に拡張します。次の図に示すように、2 番目の完全に接続された層は入力ノードの数を復元します。

2.4 位置エンコーディング 

セルフアテンションの計算機構では位置情報は考慮されておらず、入力シーケンスの各要素情報を識別したいため、エンコーダとデコーダの入力段でPositional Encodingが行われます。位置コードは、シーケンス内の各位置に関する情報を表すベクトルです。位置エンコーディングの次元は入力ベクトルと同じであるため、位置情報を維持しながら要素ごとに追加できます。

 位置エンコーディングは、固定することも (サイン関数やコサイン関数に基づくものなど)、学習可能 (トレーニングを通じて取得したベクトル) にすることもできます。Transformer の元の論文では、著者はサイン関数とコサイン関数に基づく固定位置エンコーディングを使用していました。指定された位置 pos とエンコーディング次元 i に対して、位置エンコーディングの計算式は次のようになります。

PE_{\left ( i,2k \right )}=\sin \left ( \frac{i}{10000^{2k/d}} \right )

PE_{\left ( i,2k+1 \right )}=\cos\left ( \frac{i}{10000^{2k/d}} \right )

このうち、PE(i,2k)とPE(i,2k+1)は位置符号化行列のi行2k列2k+1列の値、dは入力ベクトルの次元です。この式により、入力シーケンス内の各位置の位置エンコーディング ベクトルを生成できます。このベクトルは、特定のパターンを持ち、シーケンス内の位置の位置情報を表すことができます。

入力シーケンスに位置エンコードを追加するには、次の図に示すように、入力シーケンス内の各単語ベクトルを対応する位置エンコード ベクトルに追加して、位置情報を含む入力ベクトルを取得します。

2.5 追加&標準化

1.追加

  Add は計算結果に基づいて残差ブロックを追加することです. 残差ブロックを追加する目的は, ディープ ニューラル ネットワークの学習における劣化の問題を防ぐことです. 劣化とは, ディープ ニューラル ネットワークがネットワーク層数, 損失を増加させることを意味します.徐々に減少し、その後安定する傾向にあり、飽和に達し、ネットワーク層の数が増加し続けると、代わりに損失が増加します。

2.標準

 ニューラル ネットワークをトレーニングする前に、次の目的で入力データを正規化する必要があります。

1. トレーニングをスピードアップできます。

2. トレーニングの安定性を向上させます。 

Transformer では正規化のために Layer Normalization が使用されています。これは、元の論文では、transformer が NLP フィールドに適用され、layer_norm がテキストの長さを目的としており、テキストのシーケンス全体がbatch_norm よりも優れているためです。

Batch Normalization の処理対象はサンプルのバッチであり、Layer Normalization の処理対象は単一のサンプルです。バッチ正規化は、このサンプルのバッチの同じ次元の特徴を正規化することであり、レイヤー正規化は、この単一サンプルのすべての次元の特徴を正規化することです。


3. 参考ブログ投稿

1. Encoder-Decoder_qq_47537678 のブログ - CSDN ブログ

2.エンコーダーデコーダーモデル - 魔法中学校

3. トランスフォーマー(トランスフォーマー) ~魔法小学校~

4.  Transformerにおけるセルフアテンションとマルチヘッドアテンションの詳細説明

5.バッチ正規化とレイヤー正規化の違い - について知る

6. 史上最小の白いトランスを詳しく解説_Stink1995のブログ - CSDNブログ

おすすめ

転載: blog.csdn.net/damadashen/article/details/130927320