3

LSTMの注意メカニズムは、エンコーダの各タイムステップの隠れ状態とデコーダの現在の状態を取り入れるストレートsoftmaxフィードフォワードネットワークです。依存( は、1)フィードフォワードネットワークへの入力の数は、エンコーダの隠された状態の数が可変である) 2を事前に定義する必要があります LSTMの注意が可変長入力を持つ方法

これらの2つのステップ

は矛盾するように思えるし、周り私の頭をラップすることはできませんエンコード中のタイムステップ数)。

私は何かを誤解していますか?また、通常のエンコーダ/デコーダネットワークを訓練する場合と同じように訓練を行うか、注意メカニズムを個別に訓練する必要がありますか?アドバンス

答えて

6

おかげで今日は自分自身に同じことを求め、この質問を見つけました。私は自分自身で注意の仕組みを実装したことはありませんが、this paperからはまっすぐなsoftmax以上のものです。各出力y iについてデコーダネットワークの、コンテキストベクトルC Iが...、H T、エンコーダ隠れ状態の加重和H として計算されます。

C I I1H + ... +α イットH T

係数が IJα固定サイズのベクトルではないので、時間の数Tは、各試料ごとに異なることができるステップ。実際に、それらは、 IJ各E 入力H Jエンコーダ隠れた状態であるニューラルネットワークの出力であるソフトマックス(E I1、...、E イット)によって計算されますそしてデコーダ隠れ状態S I-1

E IJ = F(S I-1H J)Y は、Iが計算される前に

したがって、このニューラルネットワークは、...、T重みα I1の製造、T時間を評価し、αされなければならないそれが。また、this tensorflow impementationが便利かもしれません。

+2

最初の回答にお祝いを申し上げます。これは調査を示しており、非常に整形済みです! – trincot

+0

クールな答え、コードリソースを指摘してくれてありがとう。 –

+1

Tが入力の数が可変であることを考えると、私はまだ少し混乱しています。あなたが提供したペーパーと実装を見てから(そのおかげですばらしい答え!)、解決策は単純に時間ステップTの数の上限を固定するように思えます。アルファを計算するには標準的なニューラルネットワーク層変換を必要とする値は、その変換から出力する固定数のアルファ値を決定する必要があります。私はこの点について確かな確信を得るのが大好きです。この論文などから推論することは本当に困難でした。 –

1
def attention(inputs, size, scope): 
    with tf.variable_scope(scope or 'attention') as scope: 
     attention_context_vector = tf.get_variable(name='attention_context_vector', 
              shape=[size], 
              regularizer=layers.l2_regularizer(scale=L2_REG), 
              dtype=tf.float32) 
     input_projection = layers.fully_connected(inputs, size, 
              activation_fn=tf.tanh, 
              weights_regularizer=layers.l2_regularizer(scale=L2_REG)) 
     vector_attn = tf.reduce_sum(tf.multiply(input_projection, attention_context_vector), axis=2, keep_dims=True) 
     attention_weights = tf.nn.softmax(vector_attn, dim=1) 
     weighted_projection = tf.multiply(inputs, attention_weights) 
     outputs = tf.reduce_sum(weighted_projection, axis=1) 

return outputs 

は、コードのこの作品は、あなたが注意がどのように動作するかを理解するのに役立つことを願って。 私はあなたのエンコーダ・デコーダモデルと異なるLSTM-注意モデルであり、私のドキュメント分類の仕事でこの関数を使用します。

関連する問題