アテンションメカニズム、デコーダーおよびエンコーダーの改善

注意構造

Seq2seq は非常に強力で、応用範囲が広いフレームワークですが、ここでは seq2seq をさらに強化するアテンション機構を紹介します。このアテンション機構に基づいて、人間と同じように必要な情報に集中することができます。

seq2seqの問題、

Seq2seqでは、時系列データをエンコーダで符号化し、その符号化情報をデコーダに渡すのですが、このときデコーダの出力は固定長のベクトルになります。固定長ベクトル。 の固定長 A ベクトルは、出力文の長さに関係なく (どんなに長くても)、同じ長さのベクトルに変換されることを意味するため、

テキストがどれだけ長くても、現在のエンコーダーはそれを固定長ベクトルに変換します。ちょうど大きなスーツをクローゼットに詰め込むのと同じように、エンコーダーは情報を強制的に固定長ベクトルに変換しますが、このように実行します。遅かれ早かれボトルネックにぶつかります。最終的にはスーツがクローゼットから落ちてくるようなものです。便利で、ベクトルから情報が溢れます。次に、
seq2seq を改善しましょう。最初にエンコーダーを改善し、次にデコーダーを改善します。
ここに画像の説明を挿入

エンコーダの改善

これまでのところ、lstm 層の最後の隠し状態をデコーダに渡しただけですが、エンコーダの出力の長さは入力テキストの長さに応じて変更される必要があり、これはエンコーダを改善できる箇所です。具体的には、各瞬間の lstm 層の非表示状態を使用します。
ここに画像の説明を挿入

ここで hs として示されている各瞬間の lstm 層の隠れ状態を使用すると、入力単語と同じ数のベクトルを取得でき、5 つの単語を入力できます。この時点で、エンコーダーは 5 つのベクトルを出力します。そのため、エンコーダーは次のように要求します。固定長ベクトルのメカニズムは、多くの深層学習フレームワークで、RNN 層を初期化するときに、常に隠れ状態ベクトルを返すか、前回の隠れ状態ベクトルを返すか、隠れ状態とはどのような情報かを選択できます。
1 つ確かなことは、各瞬間の非表示状態には、現時点での入力単語に関する多くの情報が含まれていることです。たとえば、猫が入力されたときの lstm 層の出力は、最も多くの情報を含んでいますこのときの入力単語 cat の影響を受けるため、この隠れ状態ベクトルには cat 成分が多く含まれていると考えることができ、エンコーダが出力する hs 行列は各単語に対応するベクトルの集合とみなすことができます。
ここに画像の説明を挿入

エンコーダは左から右に処理されます 現在ワードベクトルには現時点より数ワード前の情報が含まれています 全体のバランスを考えると、時系列データを双方向から処理する双方向RNNや双方向LSTMの方が効果的です まとめ:改善
点エンコーダへの要求は、エンコーダの隠れた状態を常にすべて取り出すことだけであり、この小さな変更により、デコーダは入力文の長さに応じて情報を比例的にエンコードできるようになります。

デコーダーの改良

エンコーダは全体として各単語に対応する lstm 層の隠れ状態ベクトル hs を出力し、この hs が時系列変換のためにデコーダに渡されます。
ここに画像の説明を挿入

エンコーダの最後の隠れ状態ベクトルのみがデコーダに渡されます。具体的には、エンコーダの lstm 層の最後の隠れ状態がデコーダの lstm 層の初期隠れ状態に渡されます。
ここに画像の説明を挿入

すべての hs を使用できるようにデコーダを改良します。
機械翻訳の歴史の中で、入力と出力のどの単語がどの単語に関連しているかをどのように扱うか、多くの研究が cat = cat、このような表現語の対応関係の情報をアライメントと呼びます 初期のアライメントは主に手動で行われていました 次にアテンション技術により seq2seq へとうまく融合していきます これもまた手動操作から機械的自動化への進化です 私たちの目標は Find
out翻訳対象の単語と対応関係にある翻訳元の単語情報を取得し、その情報を翻訳に利用する、つまり必要な情報のみに注目し、その情報に基づいて時系列変換を行うことを目的としています。この仕組みに注意が必要です
ここに画像の説明を挿入

何らかの計算を行うために新しい層を追加しますが、この種の計算は、デコーダの lstm 層の隠れた状態とエンコーダの hs をその時々で受け取り、そこから必要な情報を選択してアフィンに出力します。全結合層前と同じように、エンコーダの最終隠れ状態ベクトルがデコーダの最初の lstm 層に渡されます。

上図のネットワークが行う作業は単語のアライメント情報を抽出することであり、具体的にはデコーダの出力単語に対応する単語ベクトルをその時々の hs から選択することです。例えばデコーダが I を出力する場合、 hs からの wu 対応するベクトル、つまり、この選択操作を何らかの計算によって実現したいのですが、ここで問題があります。微分計算ができない
一般的に学習は誤差逆伝播アルゴリズムで行われるため、構造ネットワークが微分操作できる場合は誤差逆伝播の枠組みで学習でき、微分演算を使用しない場合は基本的に学習する方法がありません。誤差逆伝播法を使用する 方向伝播法において、
選択演算を微分可能な演算に置き換えることはできますか? 実は、この問題を解決するアイデアは、コロンブスの卵のように非常に単純ですが、最初は思いつきません。ルーチンを打破するためのアイデアは、単一の選択肢ではなく、複数の選択肢を選択する方が良いということです。私たちは目を覚まして各単語の重要性の重みを計算します。
ここに画像の説明を挿入

行内では各単語の重要度を表す重み(aとする)が使用されている.このとき、aの確率分布は確率分布と同じである.各要素は0.0から1.0までのスカラーであり、その和は1. 次に、各単語の重要度を表す重みを計算します。 hs の重み付き和が目的のベクトルを求めることができます。
ここに画像の説明を挿入

単語ベクトルの重み付けされた合計を計算します。ここで、結果はコンテキスト ベクトルと呼ばれ、記号 c で示されます。ちなみに、注意深く観察すると、me の対応する重みは 0.8 であることがわかります。ベクトル c には多くの単語が含まれています. ベクトルの構成, この加重和は基本的にベクトルを選択する操作を置き換えると言えます. カラーと I に対応する重みは 1、他の単語に対応する重みは です0, これは I ベクトルの選択に相当しますコンテキスト ベクトル c には、現時点での変換に必要な情報が含まれます。より正確には、モデルはこの能力をデータから学習する必要があります。

デコーダーの改良

各単語の重要度を表す重み a は、重み付け和により文脈ベクトルを求めることができます。では、この a をどのように求めるかというと、もちろん手動で指定する必要はありません。データから自動的に学習するモデル
、単語の重みaを解く方法、まずはエンコーダの処理から隠れ状態ベクトルを出力するデコーダの第1lstm層の処理までのフローチャート

デコーダの lstm 層の隠れ状態ベクトルを表すために h を使用します。この時点での目標は、数値を使用して、この h が hs の個々の単語ベクトルにどの程度類似しているかを示すことです。方法はいくつかあります。ベクトル内積のベクトル類似度を計算するにはいくつかの方法がありますが、内積以外にも小さなニューラルネットワークを使用してスコアを出力する方法もあります。
ここに画像の説明を挿入

ここで hs と h の各行の類似度を
内積で計算します。 ここで h と hs の各単語ベクトルの類似度をベクトル内積で計算し、その結果を s で表しますが、この s は前の値です正則化 (スコアとも呼ばれます) を使用し、古いソフトマックス関数を使用して s を正則化します。
ここでの計算グラフは、繰り返しノード、対応する要素の積を表す X ノード、合計ノード、およびソフトマックス層で構成されます。
ここに画像の説明を挿入

デコーダーの改善 3

ここに画像の説明を挿入

コンテキストベクトルを算出するための計算グラフは、
コンテキストベクトルcを求めるための計算グラフの全体像を示しており、重み合計層と注意重み層に分けて実装しています。繰り返しになりますが、ここで行われる計算はアテンション重み層は、エンコーダによって出力された各単語ベクトル hs が各単語の重み a と結合され、その後、重み合計層が a と hs の加重和を計算し、コンテキスト ベクトル c を出力します。一連の計算されたレイヤー、注目レイヤーを
ここに挿入します。画像の説明

全体的な構成は次のとおりです
ここに画像の説明を挿入

上図に示すように、デコーダの出力 hs を各瞬間の注目層に入力し、さらに lstm 層の隠れ状態ベクトルをアフィン層に入力してデコーダを改良します。前章のデコードに関する注意情報。
ここに画像の説明を挿入

seq2seqの実装に注意

双方向LSTM

ここに画像の説明を挿入

双方向 lstm は、前の lstm 層に逆方向に処理された lstm 層を追加し、各瞬間の 2 つの lstm 層の隠れ状態をつなぎ合わせ、最終的にそれを最終的な隠れ状態ベクトルとして使用します。

このような双方向の処理により、各単語に対応する隠れ状態ベクトルは 2 方向からの情報を集約することができ、よりバランスのとれた情報を符号化することができます
。各層を出力する単語の並びを調整する 具体的には、一方の層の入力文は先ほどと同じで、もう一方の lstm 層の入力文を右から左に入力すると、2 つの lstm 層の出力はspliced 、双方向 lstm レイヤーを作成できます

Seq2seq の深化により
解決すべき問題はさらに複雑になるため、注目すべき seq2seq の表現力をより強くしたい場合、RNN 層と lstm 層の深化を検討します。レイヤーを使用すると、より強力なパフォーマンスのモデルを作成できます。
ここに画像の説明を挿入

図に示すように、lstm層とattentionの3層からなるseq2seqが使用されますが、通常はデコーダとエンコーダで同じ層数のlstm層が使用されます。アテンション層. ここでは、デコーダの lstm 層の隠れ状態を入力します. アテンション層に移動し、コンテキスト ベクトル アテンション層の出力をデコーダの複数の層 (lstm 層とアフィン層) に渡します。
さらに、深化レイヤーを別の量で使用します。秘訣は、レイヤーをまたがる残留リンクです。リンクの簡単なヒント
ここに画像の説明を挿入

いわゆる残差リンクは層を越えて圧縮するものであり、残差リンクのリンクでは、2 つの出力が 2 つの残差リンクに追加されます。この追加は、正確には、対応する要素の追加であることに注意してください。加算はバックプロパゲーションの際に勾配をそのまま伝播するので非常に重要で、残留リンクの勾配は影響を与えることなく前の層に伝播できるため、層が深くなっても勾配は正常に伝播することができます。勾配の消失や勾配の爆発がなく、スムーズに学習を進めることができます。

RNN 層のバックプロパゲーションでは、時間方向では勾配消失または勾配爆発が問題となりますが、勾配消失は lstm や gru などで、勾配爆発は勾配クリッピングで対処できます。深さ方向の勾配消失はここで紹介されています 残留接続はうまく機能します

変成器

これまで、言語モデルからテキスト生成まで、アテンションとそのコンポーネントを使用した seq2seq から seq2seq まで RNN を使用してきました。RNN を使用すると、可変長シーケンスの時系列データをうまく処理できますが、RNN には並列処理などの欠点もあります。それは、
RNNは直前の計算結果に基づいて段階的に計算する必要があるため、RNNを時間方向に並列計算することは基本的に不可能であり、ディープラーニングにGPU並列計算を使用する場合、これが大きなボトルネックとなります。したがって、RNN を回避するインセンティブが存在します。
ここに画像の説明を挿入

Transformer は論文「Attending is all you need」で提案された手法です. 論文のタイトルにもあるように、Transformer は RNN を使用せず、attention を使って処理を行います. ここでこの Transformer について簡単に説明します
ここに画像の説明を挿入

左の図は従来の注意、右の図は自己注意です。
その前に、これら 2 種類の時系列データの翻訳間の対応関係を解くために注意を使用しました。左の図の場合、アテンション層の 2 つの入力は異なる時系列データを入力しますが、右側のセルフアテンションの 2 つの入力は同じ時系列データです。このように、時系列データの要素間の対応関係は次のようになります。取得できる。

Transformer の層構造
Transformer は RNN の代わりに Attention を使用します。実際、エンコーダとデコーダの両方が Self Attend を使用します。上図のフィードフォワード層はフィードフォワード ニューラル ネットワークを表し、活性化関数は完全に接続されたニューラル ネットワークです。なお、図中のNxは灰色部分の背景で囲まれた要素がN回重ねられていることを示しており、

上図は Transformer を簡略化したものです. 実際には, このアーキテクチャの処理に加えて, 残差接続や層正規化などの技術も使用されます. その他の一般的な技術には, 複数のアテンションを並列に使用すること, 時系列データの位置情報をエンコードすること,等

トランスフォーマーを使用すると、計算量を制御し、GPU 並列コンピューティングの利点を最大限に活用できます。

まとめ
翻訳や音声認識など、ある時系列データを別の時系列データに変換するタスクでは、時系列データ間に対応関係が存在することがよくあります アテンションは、2つの時系列データ間の対応関係をデータから学習します アテンションはベクトル内積計算を使用

ますベクトル間の類似度を計算し、その類似度を重み付けしたベクトルを出力します
アテンションに使用される演算は微分可能であるため、誤差逆伝播法に基づいて学習できます
アテンション計算の重みを可視化することで、入力とベクトルを観察できます出力間の対応関係、

おすすめ

転載: blog.csdn.net/dream_home8407/article/details/131312979
おすすめ