1. 概要

エンコーダー-デコーダーモデルとリカレントニューラルネットワークは、おそらくテキストシーケンスを表現するための最も自然な方法です。

このチュートリアルでは、それらが何であるか、さまざまなアーキテクチャ、アプリケーション、それらを使用して直面する可能性のある問題、およびそれらの問題を克服するための最も効果的な手法について学習します。

それを理解するために必要なすべての背景は、人工ニューラルネットワークとバックプロパゲーションに関する基本的な知識です。

2. 序章

2.1. リカレントニューラルネットワークを備えたエンコーダ

テキストを理解することは、人間にとって反復的なプロセスです。文を読むとき、テキストの最後まで情報を蓄積する各単語を処理します。

時間の経過とともに繰り返される同様のユニットで構成される情報を蓄積するシステムは、ディープラーニング分野のリカレントニューラルネットワーク(RNN)です。

一般に、テキストエンコーダーはテキストを数値表現に変換します。 このタスクはさまざまな方法で実装できますが、このチュートリアルでは、エンコーダーとはRNNエンコーダーを意味します。 図を見てみましょう:

教科書によっては、巻かれた表現で見つけることができます。

したがって、各ブロックは、時点で次の要素で構成されています。

ブロック入力:

  • 入力ベクトル(単語をエンコードする
  • 非表示の状態ベクトル(現在のブロックの前のシーケンス状態を含む)

ブロック出力:

  • 出力ベクトル。これは、すぐにわかるように、各ブロックによって常に生成されるとは限りません。

重み:

  • との間の重み
  • との間の重み
  • との間の重み

2.2. デコーダー

エンコーダーとは異なり、デコーダーはシーケンス状態を表すベクトルを展開し、テキスト、タグ、ラベルなどにとって意味のあるものを返します。

エンコーダーとの本質的な違いは、デコーダーは非表示状態と前の状態からの出力の両方を必要とすることです。

デコーダーが処理を開始すると、前の出力がないため、特別なトークンを使用しますそれらの場合のために。

機械翻訳がどのように機能するかを示す以下の例で、より明確にしましょう。

エンコーダーは、ソース言語(英語)で文を表す状態を生成しました:私は学習が大好きです

次に、デコーダーはその状態をターゲット言語(スペイン語)に展開しました: Amo elaprendizaje

シーケンス全体のベクトル化された表現と見なすことができます。つまり、エンコーダを大まかな手段として使用して、任意の長さのテキストから埋め込みを取得できますが、これは適切な方法ではありません。別のチュートリアルで確認します。

2.3. 詳細

前の図では、簡単にするために入力として単語を使用しましたが、実際に渡すのは、各単語埋め込みベクトル(、、…)です。

また、図のデコーダー部分には、その入力および非表示状態の確率が最も高い語彙から単語を見つけるsoftmax関数が必要です。

これらの追加の詳細で図を更新しましょう:

3. アーキテクチャとそのアプリケーション

3.1. 多対多

これは、分類、通常は感情分析またはタグ付けに広く使用されています。 入力は一連の単語であり、出力はカテゴリです。 この出力は、シーケンスの最後のブロックによって生成されます。

3.2. 1対多

このアーキテクチャの主な用途はテキスト生成です。 入力はトピックであり、出力はそのトピック用に生成された単語のシーケンスです。

3.3. 多対多(第1版)

これは、機械翻訳(seq2seqとも呼ばれます)で非常に人気のあるアーキテクチャです。 入力は一連の単語であり、出力も同様です。

ネットワークは、エンコードステップが内部状態の生成を完了するのを「待機」します。 エンコーダーが終了すると、デコードが開始されます。

3.4. 多対多(第2版)

このアーキテクチャの一般的なアプリケーションは、ビデオキャプションと品詞タグ付けです。 フレームが移動すると同時に、キャプション/タグが生成されるため、デコードする前に最終状態を待つ必要はありません。

4. 長所と短所

リカレントニューラルネットワークの利点は次のとおりです。

  • 任意の長さの入力をフィードできます
  • モデルサイズは入力サイズに応じて大きくなりません
  • 彼らは自然に時間の経過とともにイベントをモデル化します

欠点は次のとおりです。

  • それらは順番に処理する必要があるため、低速です。 現在の状態を計算するには、常に前の状態が必要であることに注意してください
  • 勾配の消失と爆発の問題があります
  • 長いシーケンスではうまく機能しません

5. LSTMおよびGRUユニット

5.1. 消失/爆発勾配とは何ですか?

勾配は、ネットワークの重みを更新するために使用するベクトルであり、将来的にパフォーマンスを向上させることができます。

バックプロパゲーションと連鎖律のため、勾配の更新が小さい場合、レイヤーの数とともに指数関数的に減少します。 したがって、多くの層がある非常に深いアーキテクチャでは、非常に深い層で発生する更新はフロント層に影響を与えず(消えます)、、ネットワークは学習できません

次の図では、最初の更新がシーケンスのフローとともに指数関数的に強度を失うRNNを示しています。

勾配が爆発するという逆の状況に直面します。勾配が大きいと、指数関数的に増加し、学習プロセスが非常に不安定になります。

LSTMおよびGRUユニットは、この種の問題を修正するために作成されました。

5.2. 基本的なRNNユニット

バニラRNNユニットは次のようになります。

  • 入力:シーケンス内の前の状態と現在の状態の単語ベクトル
  • 出力:次のユニットと出力ベクトルに渡される現在の状態

PythonとTensorflowでバニラユニットを使用してRNNをコーディングする方法を見てみましょう。

import tensorflow as tf

...

model = tf.keras.Sequential([
  tf.keras.layers.Embedding(vocab_size, 64),
  tf.keras.layers.GlobalAveragePooling1D(),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(1, activation='sigmoid')
])

5.3. LSTM

長短期記憶(LSTM)ユニットは、セル、入力ゲート、出力ゲート、および忘却ゲートで構成されます。

次の図には、LSTMの図があります。

このユニットを構成する各要素の機能は次のとおりです。

  • セルの状態:これはセル(メモリ)の状態です
  • 入力ゲート:新しい値がセルに流入できる量を調整します
  • ゲートを忘れる:セルに新しい値がどの程度残るかを制御します
  • 出力ゲート:セル内の値を使用してLSTMユニットの出力アクティベーションを計算する範囲を調整します

シーケンス内の長期的な依存関係を制御するこれらのゲートを使用することにより、RNNはいくつかの重要な情報が失われるのを回避します

LSTMを使用してRNNを作成するコードは次のようになります。

import tensorflow as tf

...

model = tf.keras.Sequential([
  tf.keras.layers.Embedding(vocab_size, 64),
  tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(1, activation='sigmoid')
])

5.4. GRU

ゲート付き回帰ユニット(GRU)はより最近のものであり、その設計は LSTMに似ていますが、使用するパラメーターが少なくなっています(出力ゲートがありません)。

コードを見てみましょう:

import tensorflow as tf

...

model = tf.keras.Sequential([
  tf.keras.layers.Embedding(vocab_size, 64),
  tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64)),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(1, activation='sigmoid')
])

5.5. それぞれをいつ使用するのですか?

一般に、はバニラRNNを使用せず、は常にLSTMまたはGRUユニットを使用します。

LSTMまたはGRUのどちらを選択するのですか? 経験則はありません。多くの場合、タスクによって異なります。両方を試して、最高のパフォーマンスを発揮するユニットを使用してください。

それらが同様に機能する場合、はLSTM よりもGRUを優先します。これは、計算コストが低いためです。

6. 注意メカニズム

LSTMとGRUは、シーケンスを長くすることでRNNのパフォーマンスを向上させますが、特定のタスクの中には、正しく機能するためにさらに多くの電力を必要とするものがあります。

典型的な例の1つは、エンコーダーとデコーダーの文法構造がまったく異なるニューラル機械翻訳です。 次の各単語を翻訳するには、入力文の特定の単語に焦点を当てる必要があります。順序は大きく異なる可能性があります。

L’accordsurelazoneéconomiqueeuropéeneaétésignéenaoût1992」という文を英語に翻訳する例を見てみましょう。

上記のマトリックスでは、「ゾーン」「エリア」に重点を置いており、「エコノミック」に重点を置いていることがわかります。 また、「européenne」「European」に強く焦点を合わせていることにも気付くでしょう。

ここでわかるのは、アテンションメカニズムにより、デコーダーが入力シーケンスの特定の部分に焦点を合わせて、次の出力を適切に生成できることです。

このメカニズムがすでに持っているアーキテクチャにどのように適合するかを示す下の図を参照してください。

7. 結論

この記事では、リカレントニューラルネットワークを使用したエンコーダーデコーダーモデルの構成要素と、それらの一般的なアーキテクチャとアプリケーションについて説明しました。

また、これらのモデルを使用するときに直面する最も頻繁な問題と、LSTMまたはGRUユニットを使用してそれらを修正する方法、および注意メカニズムについても説明しました。

提供されているヘルパーコードスニペットとともに、これらすべての新しい手法を学習したので、実際に独自のモデルを作成する準備が整いました。