web-dev-qa-db-ja.com

TensorFlow BasicLSTMCellのnum_unitsとは何ですか?

MNIST LSTMの例では、「隠しレイヤー」の意味がわかりません。時間をかけて展開されたRNNを表すときに形成される想像上の層ですか?

ほとんどの場合、num_units = 128はなぜですか?

これを理解するにはcolahのブログを詳細に読む必要があることは知っていますが、その前に、私が持っているサンプル時系列データで動作するコードを取得したいだけです。

44
Subrat

隠れユニットの数は、ニューラルネットワークの学習能力の直接的な表現です-これは、学習されたパラメーターの数を反映しています。値128は、任意または経験的に選択された可能性があります。その値を実験的に変更し、プログラムを再実行して、トレーニングの精度にどのように影響するかを確認できます(隠しユニットが少ない少ないことで、テストの精度が90%を超えることができます)。より多くのユニットを使用すると、トレーニングセット全体を完全に記憶する可能性が高くなります(ただし、時間がかかるため、過剰適合のリスクがあります)。

理解すべき重要なことは、有名な Colahのブログ投稿 (find "find(===)"各行にベクトル全体が含まれています ")では多少微妙ですが、それはXは、データのarrayです(最近では tensorと呼ばれます) )-scalar値であることを意図したものではありません。たとえば、tanh関数が表示されている場合、その関数が配列全体でbroadcastであることを暗黙に示しています(暗黙のforループ)- -タイムステップごとに1回だけ実行されるわけではありません。

そのため、hidden unitsはネットワーク内の有形のストレージを表します。これは主にweights配列のサイズに現れます。また、LSTMには実際に学習したモデルパラメーターとは別の内部ストレージが少しあるため、ユニットの数を知る必要があります。これは最終的にウェイトのサイズと一致する必要があります。最も単純なケースでは、RNNには内部ストレージがありません。そのため、RNNが適用されている「隠しユニット」の数を事前に知る必要さえありません。


  • 同様の質問への良い答え here
  • TensorFlowのBasicLSTMCellの ソース を見て、これがどのように使用されているかを正確に確認できます。

サイドノート: この表記法 は、統計や機械学習、および一般的な式で大量のデータを処理する他のフィールドで非常に一般的です(3Dグラフィックスは別の例です)。 forループが明示的に書き出されるのを期待する人には少し慣れる必要があります。

37
nobar

この素晴らしい記事 から

num_unitsは、フィードフォワードニューラルネットワークの隠れ層の類推として解釈できます。フィードフォワードニューラルネットワークの隠れ層のノードの数は、タイムステップごとのLSTMセルのnum_unitsのLSTMユニットの数に相当しますネットワークの。

image も参照してください!

enter image description here

31
Arraval

引数n_hidden of BasicLSTMCellは、LSTMの非表示ユニットの数です。

あなたが言ったように、LSTMを理解するにはColahの ブログ投稿 を実際に読んでください。


形状[T, 10]の入力xがある場合、LSTMにt=0からt=T-1までの値のシーケンスを、それぞれサイズ10で供給します。

各タイムステップで、入力に形状[10, n_hidden]の行列を乗算し、n_hiddenベクトルを取得します。

LSTMは各タイムステップで取得しますt

  • 前の非表示状態h_{t-1}、サイズn_hiddent=0で、前の状態は[0., 0., ...]
  • サイズn_hiddenに変換された入力
  • これらの入力をsumして、サイズh_tの次の非表示状態n_hiddenを生成します

Colahのブログ投稿から: LSTM


コードを機能させたいだけの場合は、n_hidden = 128をそのままにしておけば大丈夫です。

27

LSTMは、時間とともに伝播する2つの情報を保持します。

hidden状態;これは、LSTMが(forget, input, and output)ゲート​​を使用して時間とともに蓄積するメモリであり、以前のタイムステップ出力です。

Tensorflowのnum_unitsは、LSTMの非表示状態のサイズです(投影が使用されない場合の出力のサイズでもあります)。

名前num_unitsをより直感的にするには、LSTMセル内の非表示ユニットの数、またはセル内のメモリユニットの数と考えることができます。

this の投稿を見て、より明確に

7
4rshdeep

TFユーザーにとっては、「num_hidden」という用語で混乱を招くと思います。実際には、展開されたLSTMセルとは何の関係もありません。それはテンソルの次元であり、時間ステップ入力テンソルからLSTMセルに変換されて入力されます。

5
P. Li

さまざまなソースからの情報を組み合わせるのにいくつかの問題があったので、ブログ投稿( http://colah.github.io/posts/2015-08-Understanding-LSTMs / )and( https://jasdeep06.github.io/posts/Understanding-LSTM-in-Tensorflow-MNIST/ )ここで、グラフィックは非常に役立つが、説明に誤りがあると思うnumber_units。

複数のLSTMセルが1つのLSTM層を形成します。これを次の図に示します。ほとんどの場合、非常に広範囲のデータを扱うため、すべてを1つのモデルに組み込むことはできません。したがって、データはバッチとして小片に分割され、最後の部分を含むバッチが読み込まれるまで次々に処理されます。図の下の部分では、バッチが読み込まれる入力(暗い灰色)を確認できます。バッチ1からバッチbatch_sizeまで次々と。上記のセルLSTMセル1からLSTMセルtime_stepは、LSTMモデルの記述されたセルを表します( http://colah.github.io/posts/2015-08-Understanding-LSTMs/ )。セルの数は、固定タイムステップの数に等しくなります。たとえば、合計150文字のテキストシーケンスを取得する場合、それを3(batch_size)に分割し、バッチごとに長さ50のシーケンス(time_stepsの数、したがってLSTMセルの数)を持つことができます。その後、各文字をワンホットでエンコードすると、各要素(入力の濃い灰色のボックス)は、語彙の長さ(特徴の数)を持つベクトルを表します。これらのベクトルは、それぞれのセルのニューロンネットワーク(セル内の緑の要素)に流れ込み、その次元を隠れユニットの数の長さに変更します(number_units)。したがって、入力には次元(batch_size x time_step x features)があります。長時間メモリ(セル状態)と短時間メモリ(非表示状態)のディメンションは同じです(batch_size xnumber_units)。セルから生じる明るい灰色のブロックは、ニューラルネットワーク(緑の要素)の変換が非表示の単位(batch_size x time_step xnumber_units)。出力はどのセルからでも返すことができますが、前のタイムステップからのすべての情報が含まれているため、ほとんどの場合、最後のブロック(黒い境界線)からの情報のみが関連します(すべての問題ではありません)。

LSTM architecture_new

4

この用語num_unitsまたはnum_hidden_unitsは、実装で変数名nhidを使用して表記される場合があり、LSTMセルへの入力は次元nhid(またはバッチ実装では、形状のマトリックスbatch_size x nhid)になります。その結果、RNN/LSTM/GRUセルは入力ベクトルまたは行列の次元を変更しないため、(LSTMセルからの)出力も同じ次元になります。

先に指摘したように、この用語はフィードフォワードニューラルネットワーク(FFN)の文献から借用されており、RNNのコンテキストで使用すると混乱を引き起こしています。しかし、考え方は、RNNでさえ、各タイムステップでFFNとしてviewedできるです。このビューでは、この図に示されているように、非表示レイヤーには実際にnum_hiddenユニットが含まれます。

rnn-hidden-units

ソース: nderstanding LSTM


より具体的には、以下の例では、num_hidden_unitsまたはnhidはになります。これは非表示状態のサイズ(中間層)が- Dベクトル

enter image description here

3
kmario23

ほとんどのLSTM/RNNダイアグラムは、非表示のセルのみを表示しますが、それらのセルの単位は表示しません。したがって、混乱。各非表示レイヤーには、タイムステップの数と同じ数の非表示セルがあります。さらに、次の図のように、各非表示セルは複数の非表示ユニットで構成されています。したがって、RNNの隠れ層マトリックスの次元は(タイムステップの数、隠れユニットの数)です。

enter image description here

0
Garima Jain