2017-06-21 4 views

答えて

1

Neural Machine Translation by Jointly Learning to Align and Translateには、(Bahdanau)アテンションメカニズムの説明があります。基本的には、コード化された入力シーケンスの各要素が特定の瞬間にどれほど重要であるかを示すスカラの「整列スコア」a_1, a_2, ..., a_nを計算することです(つまり、入力文のどの部分を現在のタイムステップ)。

"注意を払う"/"参加する"入力シーケンスがe_1, e_2, ..., e_nと表示されたベクトルシーケンスであると仮定すると、所定のタイムステップでのコンテキストベクトルは、あなたのアライメントスコアで:

context = c := (a_1*e_1) + (a_2*e_2) + ... + (a_n*e_n)

a_k年代がスカラーであることを忘れないでください。あなたのモデルならば、あなたはとても理想的な---あなたの文章中の 『平均化』の文字/単語と考えることができます文脈はよく練習されていますが、文脈は最もよく耳を傾けたいと思うe_iに最も似ていますが、少し似ています直感的に、attention_layer_sizeはないNoneであれば、

とにかく)...それはどんな意味がある場合は、「不鮮明アウト」input要素を考え、それが中に隠れユニットの数を指定するなどe_{i-1}e_{i+1}、このコンテキストベクトルをデコーダの内部RNNセルの出力と混合して注意値を得るために使用される、デコーダ内のフィードフォワード層。 attention_layer_size == Noneの場合は、上のコンテキストベクトルを注意値として使用するだけで、内部RNNセルの出力はミックスされません。 (私が「混合」と言うときは、コンテキストベクトルとRNNセルの出力が連結され、次にattention_layer_sizeを設定することで指定した次元に投影されます)。

実装の関連部分はthis lineです。計算方法についての説明。

希望に役立ちます!

+0

これは非常に役に立ちました!私が2つのフォローアップの質問をすることができれば、(1)推奨されるattention_layer_sizeはありますか? (2)連結と射影をいつ使用するのか、コンテキストベクトルだけを使用するのか、いくつかの直感を提供できますか? –

+0

私は 'attention_layer_size'を数百の隠れユニットの順番で良い結果を出す前に設定しましたが、それは手近な作業に依存しています(私は一般的に、隠れユニットが多数ある場合に最初にオーバーフィットし、検証セットのパフォーマンスを良好に保ちながら取得できるレベルにまで低下します)。 FWIW、ニューラル・マシンの翻訳紙には、何百というものがあります(実際には、混合はフィードフォワードNNよりもマトリックス投影法のほうが、活性化されていないので、上記のやや間違っています)。 私は一般にコンテキストとRNNの両方の出力を使用します。 – ptsw

+0

申し訳ありません、ありがとうございます!私は私のシーケンスをシーケンスモデルにデバッグするのに苦労しています。あなたはこの分野での経験があるように聞こえるので、私はあなたに電子メールを送れますか? –