トランスフォーマーと自分自身のインタビュー1に参加

Transformerで Attendance 機構が提案されて以来、attention を付加する Seq2seq モデルはさまざまなタスクで改良されてきたため、現在の seq2seq モデルはrnn と tention を組み合わせたモデルを
指します。具体的な原理についてはポータルの記事を参照してください。その後、Google はシーケンス間問題を解決するためのトランスフォーマー モデルを提案し、lstm をフル アテンション構造に置き換え、翻訳タスクでより良い結果を達成しました。この記事では主に「Attending is all you need」という記事を紹介しています。私も最初に読んだときはまだ理解できませんでした。私の解釈が皆さんのこのモデルの理解に少しでも貢献できれば幸いです^ ^

1. モデル構造
モデル構造は以下のとおりです。

ほとんどの seq2seq モデルと同様に、transformer の構造もencoder と decoder で構成されます。

1.1 エンコーダ
エンコーダは N=6 個の同一のレイヤーで構成されています。レイヤーとは上の図の左側の単位を指します。一番左に「Nx」とありますが、ここでは x6 です。各層は2 つのサブ層、つまりマルチヘッド セルフ アテンション メカニズムと完全に接続されたフィードフォワード ネットワークで構成されます。残留接続と正規化が各サブレイヤーに追加されるため、サブレイヤーの出力は次のように表現できます。

次に、これら 2 つのサブレイヤーを順番に説明します:
マルチヘッド自己注意 注意
の原理に精通している人なら誰でも、注意が次の形式で表現できることを知っています。

マルチヘッド アテンションは、h 個の異なる線形変換を通じて Q、K、V を投影し、最後に異なるアテンションの結果をつなぎ合わせます。


自己注意はQ、K、Vと同じです。

さらに、この記事のアテンションの計算では、スケーリングされたドット積を使用します。つまり、次のようになります。

著者はまた、同様の複雑さではあるが、計算方法に注意が必要であることについても言及しており、d_k が小さい場合、結果は内積と同様になります。d_k が大きい場合、スケーリングを実行しない方がパフォーマンスは向上しますが、内積の計算速度は低下します。の方が高速であり、スケーリング後に影響を軽減できます (ソフトマックスでは勾配が小さすぎるため、詳細については論文のリファレンスを参照してください)。

Position-wise フィードフォワード ネットワーク
の 2 番目のサブ層は全結合層であり、位置に関する理由は、処理される注目出力が特定の位置 iの注目出力であるためです

1.2 デコーダ


Decoder と Encoder の構造は似ていますが、注目すべき追加のサブレイヤーがあります。まず、Decoder の入力、出力、およびデコード プロセスを明確にしましょう。

出力: i 位置に対応する出力ワードの確率分布 入力
: i-1 位置に対応するエンコーダーの出力とデコーダーの出力 したがって, 中間の注目は自己注目ではありません. その K と V はエンコーダから来ており, Q は前の位置のデコーダの出力デコードから来ています: ここで特別な注意を払う必要があります. エンコーディングは次のように計算できます
.並列して一度にエンコードしますが、デコードは一度にエンコードせず、シーケンスは解決されますが、前の位置の入力が注目のクエリとして使用されるため、rnn のように 1 つずつ解決されます。

デコード プロセスを明確にした後、上の画像は理解しやすいです。ここでの主な違いは、トレーニング中の出力はグラウンド トゥルースであるため、新たに追加されたアテンションによって余分なマスクが追加されることです。これにより、予測が保証されます。i 番目の位置は、未来の情報にさらされる。

マスクを追加したアテンションの原理は次の図に示すとおりです (マルチヘッド アテンションが付加されています)。

1.3 位置エンコーディング
メインのエンコーダとデコーダに加えて、データ前処理部分もあります。Transformer は RNN を放棄し、RNN の最大の利点は時系列データの抽象化であるため、記事の著者は、符号化データと埋め込みデータを加算し、相対位置情報を追加する 2 つの位置符号化手法を提案しました。

著者はここで 2 つの方法について言及しました。


異なる周波数のサイン関数とコサイン関数を使用して、位置埋め込み (参照)を直接計算して
学習します。実験の結果、2 つの結果が同じであることが判明したため、最終的に最初の方法を選択しました。式は次のとおりです。

著者は、方法 1 には 2 つの利点があると述べました。


2. それが学習された位置埋め込みである場合、(論文を読まずに私の意見では)単語ベクトルのような辞書サイズによって制限されますつまり、「位置2に対応するベクトルは(1,1,1,2)である」という表現しか学習できません。したがって、三角関数の公式の使用は明らかに系列の長さによって制限されません。つまり、遭遇した系列のうち長い系列を比較することによって表現できます。
2. メリット
著者は主に以下の3点について語ります。

層ごとの合計計算量 (每层计算复杂度)
2. 必要な連続演算の最小数によって測定される、並列化できる計算量

著者は、最小の直列化操作を使用して、並列化できる計算を測定します。つまり、特定のシーケンス x_1、x_2、…、x_n に対して、self-attention は x_i、x_j の内積結果を直接計算できますが、rnn は x_1 から x_n まで順番に計算する必要があります。

ネットワーク内の長距離依存関係間のパス長
ここで、パス長とは、シーケンス長 n のメッセージが通過する必要があるパスの長さを指します。CNN は視野を広げるために畳み込み層の数を増やす必要があり、rnn は 1 から n まで 1 つずつ計算する必要があり、self-attention は行列計算が 1 ステップだけで済みます。したがって、長期的な依存関係の問題は、rnn よりも自己注意の方がうまく解決できることもわかります。もちろん、計算量が多すぎる場合、たとえばシーケンス長 n > シーケンス次元 d の場合は、ウィンドウを使用してセルフ アテンション計算の数を制限することもできます。

さらに、付録で著者が示した例から、自己注意モデルがより解釈しやすいことがわかります。注意の結果の分布は、モデルが文法的および意味論的な情報を学習していることを示しています。

3. 欠点 欠点は
元の記事では触れられていませんでしたが、後ほど Universal Transformers で指摘されましたので、ここに追加しておきます。主に 2 点です: 実際には、RNN が簡単に解決できるいくつかの問題は、
Transformer では解決されません。string をコピーするとき. 特にトレーニング シーケンスより長いシーケンスに遭遇したとき.
理論的に: トランスフォーマーは計算上万能ではありません (チューリング完全)、(私が思うに) "while" ループを実装できないためです

4. まとめTransformer は、純粋な注意を払って構築された
最初のモデルであり、計算速度が速いだけでなく、翻訳タスクでより良い結果も得られます。Google の現在の翻訳はこれに基づいているはずですが、友人 1 人か 2 人に相談したところ、主にデータ量に依存するという答えが返ってきました。データ量が多い場合は、変圧器を使用した方が良いかもしれません。データが小さい場合は、rnn ベースのモデルを引き続き使用することをお勧めします

上記はhttps://zhuanlan.zhihu.com/p/44121378からのものです。
 

おすすめ

転載: blog.csdn.net/sinat_37574187/article/details/133254051