RNNから注目へ

従来のニューラル ネットワークではタイミング情報を取得できないと前回述べましたが、自然言語処理タスクではタイミング情報が非常に重要です。

例えば、「リンゴを食べました」という文では、「リンゴ」の品詞や意味は前の単語の情報に依存します。 」はジョブズによって「Apple」と訳されることもあります。

しかし、RNNの登場によりタイミング情報を処理できるようになりました。


1. 従来のニューラルネットワーク

従来のニューラル ネットワークの構造は比較的単純です: 入力層 - 隠れ層 - 出力層。以下の図に示すように、
入力は x で、出力 y は線形変換 Wx+b活性化関数 fによって取得されます。これは皆さんもうよくご存じかと思います。

従来のニューラルネットワーク
しかし、実際のアプリケーションでは、シーケンス形式のデータも数多く発生します。
たとえば、次のとおりです。

  • 自然言語処理の問題。x1 は最初の単語、x2 は 2 番目の単語、というように考えることができます。これは、記事冒頭の「リンゴ」の例と同じです。
  • 音声処理。このとき、x1、x2、x3…が各フレームの音声信号となります。
  • 時系列の問題。例えば毎日の株価など。

2. RNN (リカレントニューラルネットワーク)

2.1 RNN の基本構造単位 (N 対 N)

RNN と従来のニューラル ネットワークの最大の違いは、毎回前の出力が一緒にトレーニングするために次の隠れ層にもたらされることです。以下の図に示すように、
ここに画像の説明を挿入
RNN は次の図に示すように時系列に展開されます。

ここに画像の説明を挿入

  • 上図の左側の部分は RNN のタイムステップと呼ばれます. このタイムステップでは、時刻 t において、入力変数 x t がRNN の基本モジュール A を通過して出力変数 h tになり、その情報が RNN に渡されることがわかります。時刻 t は次の瞬間 t+1 に送信されます。
  • 上図の右側に示すように、モジュールは時系列に従って展開されており、RNN は複数の基本モジュール A の相互接続であり、各モジュールが現在の情報を次のモジュールに渡すことがわかります。 。

プロセスを次の図に示します。

RNN

矢印は、対応するベクトルに対して f(Wx+b) と同様の変換を実行することを意味し、ここでの矢印は、出力 y1 を取得するために h1 に対して変換を実行することを意味します。

出力の残りの部分も同様に処理されます (y1 と同じパラメーター V および c を使用します)。

ここに画像の説明を挿入

これは最も古典的な RNN 構造であり、ビルディングブロックのように構築しました。入力は x1、x2、...xn、出力は y1、y2、...yn です。つまり、入力シーケンスと出力シーケンスは同じ長さでなければなりません。

2.2 RNN_(N 対 1)

場合によっては、対処しなければならない問題の入力がシーケンスであり、出力がシーケンスではなく単一の値である場合があります。それをどのようにモデル化すればよいでしょうか? 実際、出力変換は最後の h に対してのみ実行します。

N対1

この構造は、シーケンス分類問題を扱うためによく使用されます。たとえば、テキストを入力してカテゴリを判断する、文章を入力して感情傾向を判断する、ビデオを入力してカテゴリを判断するなどです。

2.3 RNN_(1 vs N)

入力がシーケンスではなく、出力がシーケンスである場合にどう対処するか?
入力計算はシーケンスの先頭でのみ実行できます。
1vsN
1vsN
この 1 VS N 構造で処理できる問題は次のとおりです。

  • 画像からテキスト(画像キャプション)を生成します このとき、入力 X は画像の特徴、出力 Y シーケンスは文章になります。
  • カテゴリから音声や音楽などを生成

2.4 RNN_(N vs M)

RNN の最も重要なバリアントを紹介しましょう。N vs M
この構造はとも呼ばれますエンコーダ-デコーダモデル、としても知られるシーケンス 2 シーケンスモデル。

元のN vs N RNN では、等しい長さのシーケンスが必要です。しかし、私たちが遭遇する問題シーケンスのほとんどは、長さが等しくありません。たとえば、機械翻訳では、ソース言語とターゲット言語の文の長さが同じでないことがよくあります。

この目的を達成するために、Encoder-Decoder 構造はまず入力データをエンコードします。コンテキスト ベクトル c

ここに画像の説明を挿入

c を取得するには多くの方法があります。最も簡単な方法は、Encoder の最後の隠し状態を c に割り当てることです。最後の隠し状態を変換して c を取得したり、すべての隠し状態を変換したりすることもできます。

ここに画像の説明を挿入

c を取得した後、別の RNN ネットワークを使用してそれをデコードします。RNN ネットワークのこの部分はDecoderです。具体的な方法は、c を前の初期状態 h0 として Decoder に入力することです。

もう 1 つの方法は、c を各ステップの入力として使用することです。
ここに画像の説明を挿入
このエンコーダー デコーダー構造は入力と出力のシーケンス長を制限しないため、次のような非常に広い範囲に適用できます。

  • 機械翻訳: Encoder-Decoder の最も古典的なアプリケーション。実際、この構造は機械翻訳の分野で最初に提案されました。
  • テキストの要約: 入力はテキスト シーケンスであり、出力はこのテキスト シーケンスの要約シーケンスです。読解。入力記事と質問を別々にエンコードし、それをデコードして質問に対する回答を取得します。
  • 音声認識: 入力は音声信号のシーケンスであり、出力は単語のシーケンスです。
  • …………

全体として、RNN はタイミング依存性の問題を解決しますが、ここでのタイミングは一般に短距離のことを指します。まず、短距離依存長距離依存の違いを紹介しましょう。

  • 近距離依存性: この穴埋め問題「バスケットボールが見たい____」の場合、「バスケットボール」の後に「ゲーム」が来ると簡単に判断できます。この近距離依存問題は RNN に非常に適しています。 。
  • 遠距離依存: この穴埋め問題「私は中国の陶磁器の首都である景徳鎮で生まれました。小学校と中学校は家からとても近いです。...、私の母語は___です。」、近距離依存の場合は、「私の母国語は」の後に「中国語」、「英語」、「フランス語」を続けることができますが、正確な答えが必要な場合は、「私はいた」という表現に戻る必要があります上記の長い距離で「中国の磁器の首都、景徳鎮で生まれました」と答えた場合、その答えは「中国人」と判断され、RNN がこの情報を学習することは困難です。

2.5 RNN の勾配消失問題

RNN が長距離依存問題に適していないのはなぜですか?

ここに画像の説明を挿入

RNN アプリケーションの例:
RNN

  1. ユーザーの発話意図を判断する必要がある場合 (天気を尋ねる、時間を尋ねる、目覚まし時計をセットする...)、ユーザーが「今何時ですか?」と発言した場合、最初にこの文を分割する必要があります。
  2. 次に、RNN を順番に入力し、最初に「何を」を RNN の入力として使用し、出力「01」を取得し、次に「時刻」を順番に RNN ネットワークに入力し、出力「02」を取得します。
  3. この処理では、「時間」が入力されると、その前の「何を」の出力も影響します(隠れ層の半分は黒になります)。
  4. 類推して、以前のすべての入力は将来の出力に影響を与え、円形の隠れ層には以前のすべての色が含まれていることがわかります。
  5. 意図を判断する場合、最後の層の出力「05」だけが必要です。

RNN の欠点も非常に明らかです

欠点がある

上記の例を通じて、短期記憶(オレンジ色の領域など)はより大きな影響を及ぼしますが、長期記憶はほとんど影響を与えない(黒と緑の領域など)ことがわかりました。 RNNの項記憶問題。

  1. RNN には短期記憶の問題があり、非常に長い入力シーケンスを処理できません
  2. RNNのトレーニングには莫大なコストがかかる

これらの欠点があるため、私たちはアテンション メカニズムを導入しました。

3.RNN+アテンション

Encoder-Decoder 構造では、Encoder はすべての入力シーケンスを統一された意味論的特徴 c にエンコードしてからデコードします。そのため、c には元のシーケンスのすべての情報が含まれている必要があり、その長さがモデルのパフォーマンスを制限するボトルネックになります。例えば、機械翻訳の場合、翻訳する文章が長い場合、a c に多くの情報を格納することができず、翻訳精度が低下する可能性があります。

アテンション メカニズムは、毎回異なる c を入力することでこの問題を解決します。次の図は、アテンション メカニズムを備えたデコーダを示しています。

ここに画像の説明を挿入

各 c は、現在の y の出力に最適なコンテキスト情報を自動的に選択します。具体的には、 ijを使用して、Encoder の j 番目のステージとデコードの i 番目のステージの h j間の相関を測定します。最終的に、Decoder の i 番目のステージの入力コンテキスト情報 C i は、次の式から得られます。すべての h j をに変換しますij

機械翻訳を例に挙げます (中国語を英語に翻訳します)。

ここに画像の説明を挿入

入力シーケンスは「I love China」であるため、Encoder の h1、h2、h3、h4 はそれぞれ「I」、「Love」、「中国」、「国」を表す情報とみなすことができます。英語に翻訳すると、最初のコンテキスト c 1 は単語「I」に最も関連するはずなので、対応する a 11は比較的大きく、対応する a 12、a 13、および a 14は比較的小さいです。c 2 は「愛」に最も関連しているはずなので、対応する a 22は比較的大きくなります。最後の c 3は h3 と h4 に最も関連しているため、a 33と a 34の値は比較的大きくなります。

これまでのところ、アテンション モデルに関する最後の質問は 1 つだけです。それは、
これらの重みがどのようにして得られるのかということです。

実際、ijもモデルから学習されます。これは、デコーダーの i-1 番目のステージの隠れ状態とエンコーダーの j 番目のステージの隠れ状態に実際に関連しています

1j計算:
ここに画像の説明を挿入
2j計算:
ここに画像の説明を挿入
3j計算:
ここに画像の説明を挿入
以上が、アテンションによる Encoder-Decoder モデル計算の全プロセスです


おすすめ

転載: blog.csdn.net/weixin_68191319/article/details/129216141