長期短期記憶(LSTM)リカレントニューラルネットワークの背後にある直感は何ですか?


11

Recurrent Neural Network(RNN)の背後にある考え方は私には明らかです。私はそれを次のように理解しています:
一連の観測()(つまり、多変量時系列)があります。各単一観測は次元の数値ベクトルです。RNNモデル内では、次の観測は以前の観測と以前の "非表示状態"であると。ここで、非表示状態も数値で表されますベクトル(観測状態と非表示状態の次元は異なる場合があります)。隠された状態自体も、以前の観測と隠された状態に依存すると想定されます。o1,o2,,onh ioiNoi+1oihi

oi,hi=F(oi1,hi1)

最後に、RNNモデルでは、関数はニューラルネットワークであると想定されます。利用可能なデータ(一連の観測)を使用して、ニューラルネットワークをトレーニング(適合)します。トレーニングの目標は、前の観測を使用して次の観測をできるだけ正確に予測できるようにすることです。F

現在、LSTMネットワークはRNNネットワークの修正版です。私が理解している限り、LSTMの背後にある動機は、RNNに固有の短いメモリの問題を解決することです(従来のRNNは、時間的に離れすぎている関連イベントに問題があります)。

LSTMネットワークの仕組みを理解しています。ここでLSTMの最良の説明、私が発見したことは。基本的な考え方は次のとおりです。

非表示状態ベクトルに加えて、非表示状態ベクトル()と同じサイズ(次元)を持つ、いわゆる「セル状態」ベクトルを導入します。「細胞状態」ベクトルは長期記憶をモデル化するために導入されたと思います。従来のRNNの場合と同様に、LSTMネットワークは入力として観測された隠された状態を取得します。この入力を使用して、次の方法で新しい「セル状態」を計算します。ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

ここで、、、およびの関数は、ニューラルネットワークによってモデル化されています。式を簡単にするために、引数を削除します。ω1ω2cint

ci+1=ω1ci+ω2cint

したがって、新しい「セル状態ベクトル」()は、古い状態ベクトル()と「中間」のセル状態ベクトル(加重和であることがわかります。)。ベクトル間の乗算はコンポーネント単位です(2つのN次元ベクトルを乗算し、結果として別のN次元ベクトルを取得します)。つまり、コンポーネント固有の重みを使用して、2つのセル状態ベクトル(古いものと中間のもの)を混合します。cici1cint

これは、説明されている操作間の直感です。セル状態ベクトルは、メモリベクトルとして解釈できます。2番目の重みベクトル(ニューラルネットワークによって計算されます)は、「保持」(または忘却)ゲートです。その値は、セル状態ベクトル(または長期記憶ベクトル)からの対応する値を保持するか、または忘れる(消去する)かを決定します。別のニューラルネットワークによって計算される最初の重みベクトル()は、「書き込み」または「記憶」ゲートと呼ばれます。新しいメモリ(「中間」のセル状態ベクトル)を保存する必要があるかどうか(より正確には、その特定のコンポーネントを保存/書き込む必要があるかどうか)を決定します。「中級」ω2ω1ω1ベクター)。実際には、2つの重みベクトル(および)を使用して、古いメモリと新しいメモリを「混合」すると言った方が正確です。ω1ω2

したがって、上記の混合(または忘却と記憶)の後、新しいセル状態ベクトルが得られます。次に、別のニューラルネットワークを使用して「中間」の隠された状態を計算します(以前と同様に、観測された状態と隠された状態を入力として使用します)。最後に、新しいセルの状態(メモリ)を「中間」の隠し状態()と組み合わせて、実際に出力する新しい(または「最終的な」)隠し状態を取得します。oihihint

hi+1=hintS(ci+1),

ここで、はセル状態ベクトルの各成分に適用されるシグモイド関数です。S

だから、私の質問です:このアーキテクチャはなぜ(または正確には)問題を解決するのですか?

特に、次のことは理解できません。

  1. ニューラルネットワークを使用して「中間」メモリ(セル状態ベクトル)を生成し、「古い」メモリ(またはセル状態)と混合して「新しい」メモリ(セル状態)を取得します。混合の重み係数もニューラルネットワークによって計算されます。しかし、なぜニューラルネットワークを1つだけ使用して「新しい」セル状態(またはメモリ)を計算できないのでしょうか。または、言い換えれば、観測された状態、隠された状態、および古いメモリを、「新しい」メモリを計算するニューラルネットワークへの入力として使用できないのはなぜですか。
  2. 最後に、観測状態と非表示状態を使用して新しい非表示状態を計算し、次に「新しい」セル状態(または(長期)メモリ)を使用して、新しく計算された非表示状態のコンポーネントを修正します。言い換えると、セル状態のコンポーネントは、計算された非表示状態の対応するコンポーネントを単に減らす重みとして使用されます。しかし、なぜセル状態ベクトルがこの特定の方法で使用されるのでしょうか。セル状態ベクトル(長期記憶)をニューラルネットワークの入力(観測状態と非表示状態も入力として取る)に入れて、新しい非表示状態を計算できないのはなぜですか?

追加:

これは、さまざまなゲート(「保持」、「書き込み」、「読み取り」)がどのように構成されているかを明確にするのに役立つビデオです


1
あなたは私よりもLSTMをよく理解しているようです。あなたが探しているものではないかもしれないので、実際の回答は投稿しません。必要に応じて。したがって、任意の大きさのnの場合、時刻tの情報は時刻t + nまで利用可能に保たれます。
rcpinto

@rcpinto、私はまた、提案された「アーキテクチャ」の背後にある主要なアイデアは、情報を長期間(多くのタイムステップ)保持できるようにすることだと思います。しかし、何がそれを可能にするのか正確にはわかりません。2つのゲートネットワーク( "keep"と "write")は、キープウェイトが大きく、書き込みウェイトが小さいことを学習する場合があります(その後、メモリを長期間保持します)。しかし、それは1つのネットワークだけで実現できないのでしょうか。ニューラルネットワーク(非表示の状態(メモリ)と観測可能な状態を入力として受け取る)は、非表示の状態を変更せずに保持する必要があることを学習できませんか?
ローマ

実際、反復重み行列をIDに設定するだけで、常に最後のアクティブ化維持されます。問題は常に問題です。つまり、新しい入力が蓄積され、ニューロンの活性化がすぐに飽和します。これも一種の忘却です。したがって、以前のメモリを消去したり、新しいメモリの形成をブロックしたりする機能は重要です。
rcpinto

@rcpinto、しかし、「以前のメモリを消去したり、新しいメモリの形成をブロックしたりする能力」は、単一のニューラルネットワーク内で実現できないのでしょうか。ニューラルネットワークは、メモリベクトル(または非表示の状態ベクトル)および観測された状態ベクトルを入力として取得します。そのようなネットワークは、観測された状態ベクトルのコンポーネントの値に基づいて、非表示状態(そのメモリ)の一部のコンポーネントを保持または置換することを「決定」できないのでしょうか。
ローマ

LSTMは、現在の入力と状態に応じてゲートが開閉するため、これを行うことができます。単純なRNNにはそのような概念はありません。この場合、状態自体は常に入力/状態に直接かつ即座に反応し、新しい情報を保存するかどうかを「選択」するのを防ぎます。また、保存されているメモリを消去するメカニズムはありません。ニューロンへの入力の重みに従って常に蓄積され、それらの重みはトレーニング後に変更できません。LSTMゲートは乗法的であるため、推論中の重みの変化をシミュレートし、現在の入力/状態に反応します。
rcpinto

回答:


1

私があなたの質問を理解しているように、あなたが描くものは基本的に、入力、以前の非表示状態、および以前のセル状態を連結し、それらを1つまたは複数の完全に接続されたレイヤーに渡して、出力の非表示状態とセル状態を計算するのではなく、「ゲート"セルの状態と算術的に相互作用する更新。これは基本的に、非表示状態の一部のみを出力する通常のRNNを作成します。

これを行わない主な理由は、LSTMのセル状態計算の構造により、長いシーケンスを通じてエラーのフローが一定になるためです。セルの状態を直接計算するために重みを使用した場合、各タイムステップでそれらを逆伝播する必要があります。このような操作を回避することで、RNNを悩ませる消失/爆発の勾配が大幅に解決されます。

さらに、より長い期間にわたって情報を簡単に保持できることは素晴らしいボーナスです。直感的には、ネットワークがゼロから学習して、より長い期間にわたってセルの状態を維持することははるかに困難になります。

LSTMの最も一般的な代替であるGRUは、非表示状態自体に直接作用する重みを学習することなく、同様に非表示状態の更新を計算することに注意してください。


0

私が正しく理解していれば、両方の質問がこれに要約されます。情報の処理にtanhとシグモイドの両方を使用している2つの場所。その代わりに、すべての情報を取り込む単一のニューラルネットワークを使用する必要があります。

1つのニューラルネットワークを使用することの欠点はわかりません。私の意見では、適切に使用されるベクトルを正しく学習するシグモイド非線形性を持つ単一のニューラルネットワークを使用できます(最初のケースではセル状態に追加され、2番目のケースでは非表示状態として渡されます)。

ただし、現在のやり方では、タスクを2つの部分に分けています。1つはシグモイド非線形性を使用して、保持するデータの量を学習しています。tanhを非線形性として使用するもう1つの部分は、重要な情報を学習するタスクを実行することです。

簡単に言うと、シグモイドはどれだけの量を保存するかを学習し、tanhは何を保存するかを学習し、2つの部分に分割することでトレーニングが容易になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.