Attention Mechanism のバックアップの現在との差分(No.6)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
CENTER:|>|BGCOLOR(#ACFA58):CENTER:Attention Mechanism|
|BGCOLOR(#E0F2F7):CENTER:カテゴリ|[[Category/Info]]|
|BGCOLOR(#E0F2F7):CENTER:状態|''&color(Red){執筆中};''|

#CONTENTS

// ''[[概要>#Overview]]''
// **隣接地域 [#ContiguousRegion]
// ''[[安全情報>#SafetyInformation]]''
// ''[[行政区画>#AdministrativeDivision]]''
// ''[[地域名>#Regions]]''
// **ランドマーク・施設・集落・小地名等 [#Landmark]
// ''[[事項>#Events]]''
// **資料 [#Sources]
// ''[[リンク>#ExternalLink]]''
// ''[[その他>#Others]]''


**概要 [#Overview]
 Attention Mechanism (注意機構)は、データのどこに注目するかを利用したモデル。[[RNN>Recurrent Neural Network]]の離れた位置の情報が反映されにくいという弱点を解決するために、[[RNN>Recurrent Neural Network]]に付け加えられる形で登場した。~
 注意点を示すという性質から、自然言語処理だけでなく画像処理などにも使われる。また、Attention Mechanism を主とし([[RNN>Recurrent Neural Network]]をあまり利用しない)機械学習モデル (Transformer) が発明され、高性能な自然言語処理([[BEAT>Bidirectional Encoder Representations from Transformers]]等)の基礎となった。
 Attention Mechanism (注意機構)は、データのどこに注目するかを利用した機械学習のモデル。[[RNN>Recurrent Neural Network]]には、離れた位置の情報が反映されにくいという弱点があり、これを解決するために[[RNN>Recurrent Neural Network]]に付け加えられる形で登場した。~
 注意点を示すという性質から、自然言語処理だけでなく画像処理などにも使われる。また、[[RNN>Recurrent Neural Network]]を利用せず、Attention Mechanism を主とした機械学習モデル ([[Transformer]]) が発明され、高性能な自然言語処理([[BERT>Bidirectional Encoder Representations from Transformers]]等)の基礎となった。
**モデル(大まかな機構) [#bcc831c3]
 Attention Mechanism は(2020年現在)短期間で発達し、様々なモデルが提案されているが、ここでは幾つかのモデルに包括するquery, key, value構造について述べる。~
 Attention の目的は、特徴ベクトル群value:&mathjax{V};に対して、注目すべき度合いに応じて重み付けをすることである。
このとき、&mathjax{V};に関する情報はkey:&mathjax{K};として与えられる。&mathjax{V,K};は合わせてmemoryとも呼ばれ、同じであることが多いが、&mathjax{V,K};それぞれに違う加工を施した後に Attention に渡すモデルもある。
また、複数の状況や変化する状況に応じて重み付けを変えたい場合もある。このとき、複数の状況のベクトル&mathjax{Q};:queryを Attention に渡す。&mathjax{Q};がないモデルもあるが、翻訳のような刻々と状況が変化するようなモデルでは必須となる。~

#twitter_embed(1266290925682081792)
----
Attention Mechanism は以下の3式で構成されるモデルとなる。最終的な出力は&mathjax{\mathbf{c}_\tau};(あるいは&mathjax{C};)。

:文脈|&mathjax{\displaystyle \mathbf{c}_\tau= \sum_t a_{\tau t} \mathbf{v}_t}; 
:正規化|&mathjax{\displaystyle \mathbf{a}_\tau^\top = f_{norm}(\mathbf{s}_\tau^\top)};
すなわち &mathjax{\displaystyle A^\top = f_{norm}(S^\top)};

:類似度(あるいはスコア)|&mathjax{\displaystyle s_{\tau t}^\top = f_{sim}(\mathbf{q}_\tau,\mathbf{k}_t)};
つまり &mathjax{\displaystyle \mathbf{s}_\tau^\top = f_{sim}(\mathbf{q_\tau},K)};
すなわち &mathjax{\displaystyle S^\top = f_{sim}(Q,K)};
 ~
----
以上より、Attention のモデルは以下3つの観点から分類できる。~
-&mathjax{Q,V,K};などの分析対象・状態・関係
-正規化&mathjax{f_{norm}};の方法
-類似度&mathjax{f_{sim}};の方法
***context:C [#u2ed78c3]
&mathjax{C};
文脈ベクトル&mathjax{\mathbf{c}_\tau}; を並べたもの。
&mathjax{Q, V, K};に対する文脈。これが次のモジュールに渡される。
&mathjax{Q};が無い場合、&mathjax{C};を構成するベクトルは1本となる。

***value:V [#d5971589]
&mathjax{V};
縦ベクトル&mathjax{\mathbf{v}_t}; を並べたもの。
これに重み付き係数を掛けると取得すべき文脈&mathjax{ \mathbf{c}_\tau};となる。
自然言語処理においては、入力文の個々の単語(とRNN等)から作られた縦ベクトル&mathjax{\mathbf{v}_t};を並べたもの。
出力(output)と呼ばれることもあるが、これをそのまま出力するわけではない。

***key:K [#hf64b01b]
&mathjax{K};
縦ベクトル&mathjax{\mathbf{k}_t}; を並べたもの。
&mathjax{V};に関する情報を持ち、これを使って類似度を計算する。
&mathjax{K=V};であることも多いが、&mathjax{V,K};それぞれに違う変形が施されていることもある。~

また、&mathjax{Q};が存在するときは、&mathjax{Q};との関係を算出する。翻訳器ならば、&mathjax{K};が原文から作った縦ベクトルを並べたもの、&mathjax{Q};が今訳すべき部分の状態である。~

&mathjax{V=K=Q};の場合はSelf-Attentionと呼ばれる。~


***query:Q [#h4537274]
:&mathjax{Q};|分析の対象。縦ベクトル&mathjax{\mathbf{q}_\tau}; を並べたもの。翻訳では、訳出中の内部状態にあたる。また、入力・応答関連のシステムにおては、応答中の内部状態にあたる。



***重み:A [#mf047041]
&mathjax{A};
&mathjax{\mathbf{v}_t};に対する重みベクトル&mathjax{\mathbf{a}_\tau};を並べたもので、Attention Matrix と呼ばれる。
&mathjax{V};のどのベクトルが&mathjax{Q};のどのベクトルと関連しているかが格納されているため、これを解析することで、何が重視されたかがわかる。
**Q,V,Kなどの対象の状態・関係からの分類 [#kb9f5032]

※Multi-Head Attention はそのうち書きます。
***Source-Target Attention [#ab515ede]
&mathjax{Q \neq V \fallingdotseq K};の場合。
変化する(あるいは多様な)query:&mathjax{\mathbf{q_\tau}};に対して、value:&mathjax{V};との関連を求めたい場合。
翻訳器などのエンコーダー・デコーダーモデルによく使われる。
例えば、英語を日本語訳する場合、&mathjax{V};を英語原文から作ったベクトル、&mathjax{\mathbf{q_\tau}};を一単語前の日本語を訳出した内部状態にあたる。
***Self-Attention [#xf97068b]
&mathjax{Q \fallingdotseq V \fallingdotseq K};の場合。
自然言語処理ならば、入力された文章中の各単語間の関係の強さを取得したいときに使う。
[[Transformer]]で採用されている方式の一つ。
**正規化の方法の分類 [#lcf99c64]
&mathjax{\displaystyle a_{\tau t} = f_{norm}(s_{\tau t})};の具体的な方法によって分類できる。


***Soft Attention [#ydfc12d6]
softmax関数を使用。
&mathjax{\displaystyle a_{\tau t} = \frac{\exp(\displaystyle s_{\tau t})}{\displaystyle \sum_\tau \exp(s_{\tau t})}};

***Hard Attention [#a0606770]
argmax関数を使用。
すなわち、入力された&mathjax{\mathbf{v}_t};のうち、最も&mathjax{a_{\tau t}};の大きいものだけを出力する機構となる。
**類似度の方法の分類 [#rfcf1f23]
&mathjax{\displaystyle \mathbf{s}_\tau^\top = f_{sim}(\mathbf{q}_\tau,K)};あるいは&mathjax{\displaystyle S^\top = f_{sim}(Q,K)};にはいくつかの方式がある。

***Dot-Product Attention(内積注意) [#t1850acf]
&mathjax{\displaystyle s_{\tau t} = q_{\tau t} \mathbf{k}_t};
すなわち
&mathjax{\displaystyle \mathbf{s}_\tau^\top = \mathbf{q}_\tau^\top K};
すなわち
&mathjax{\displaystyle S^\top = Q^\top K};


***Scaled Dot-Product Attention(正規化内積注意) [#s7c94e3c]
&mathjax{\mathbf{k}_t};の次元を&mathjax{d_k};とするとき、
&mathjax{\displaystyle s_{\tau t} = \frac{q_{\tau t} \mathbf{k}_t}{\sqrt{d_k}}};
すなわち
&mathjax{\displaystyle \mathbf{s}_\tau^\top = \frac{ \mathbf{q}_\tau^\top K}{\sqrt{d_k}} };
すなわち
&mathjax{\displaystyle S^\top = \frac{Q^\top K}{\sqrt{d_k}} };

Dot-Product Attention と softmax 正規化を用いた場合、勾配が小さくなりすぎる問題を回避するため&mathjax{\sqrt{d_k}};で正規化している。
[[Transformer]]で採用されている方式。
(横ベクトル表記だと、若干数式に違いがあるので注意。)

***general [#yd6f9817]
&mathjax{s_{\tau t} = \mathbf{q}_\tau^\top W \mathbf{k}_t };
あるいは
&mathjax{\mathbf{s}_{\tau}^\top = \mathbf{q}_\tau^\top W K };
あるいは
&mathjax{S^\top = Q^\top W K };


***Additive Attention (加法注意) [#pa5e338b]
&mathjax{f_{a}()};を活性化関数としたとき、~

&mathjax{\displaystyle s_{\tau t} = \mathbf{w}^\top f_{a} ( W_1 \mathbf{q}_{\tau} +  W_2 \mathbf{k}_t + \mathbf{b} )};~
***concat [#e6cbd822]
&mathjax{f_{a}()};を活性化関数としたとき、~

&mathjax{\displaystyle s_{\tau t} = \mathbf{w}^\top f_{a} \left( W \left[ \begin{array}{c} \mathbf{q}_{\tau} \\  \mathbf{k}_t \end{array} \right] + \mathbf{b} \right) };~

----
&mathjax{\displaystyle \mathbf{w} = \left[ \begin{array}{c} \mathbf{w}_1 \\  \mathbf{w}_2 \end{array} \right] , W = \left[ \begin{array}{cc} W_A & W_B \\ W_C & W_D \end{array} \right],  \mathbf{b} = \left[ \begin{array}{c} \mathbf{b}_1 \\  \mathbf{b}_2 \end{array} \right]};とするとき、上式を変形すると、~

&mathjax{\displaystyle s_{\tau t} = \left[ \begin{array}{cc} \mathbf{w}_1^\top  & \mathbf{w}_2^\top \end{array} \right] f_{a} \left( \left[ \begin{array}{cc} W_A & W_B \\ W_C & W_D \end{array} \right]  \left[ \begin{array}{c} \mathbf{q}_{\tau} \\  \mathbf{k}_t \end{array} \right] + \left[ \begin{array}{c} \mathbf{b}_1 \\  \mathbf{b}_2 \end{array} \right] \right) };~

&mathjax{= \left[ \begin{array}{cc} \mathbf{w}_1^\top  & \mathbf{w}_2^\top \end{array} \right] f_{a} \left(  \left[ \begin{array}{c} W_A \mathbf{q}_{\tau}+W_B \mathbf{k}_t + \mathbf{b}_1  \\  W_C \mathbf{q}_{\tau}+W_D \mathbf{k}_t + \mathbf{b}_2 \end{array} \right]  \right) };~

&mathjax{= \left[ \begin{array}{cc} \mathbf{w}_1^\top  & \mathbf{w}_2^\top \end{array} \right]   \left[ \begin{array}{c}  f_a( W_A \mathbf{q}_{\tau}+W_B \mathbf{k}_t + \mathbf{b}_1  ) \\ f_a(  W_C \mathbf{q}_{\tau}+W_D \mathbf{k}_t + \mathbf{b}_2 ) \end{array} \right]   };~

&mathjax{= \mathbf{w}_1^\top f_a( W_A \mathbf{q}_{\tau}+W_B \mathbf{k}_t + \mathbf{b}_1  ) + \mathbf{w}_2^\top f_a(  W_C \mathbf{q}_{\tau}+W_D \mathbf{k}_t + \mathbf{b}_2 )  };~

となるため、加法注意(Additive)と似たような働きをすると考えられる。
**リンク [#ExternalLink]

-[[Neural Machine Translation by Jointly Learning to Align and Translate&BR;Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio&BR;Submitted on 1 Sep 2014 (v1), last revised 19 May 2016 (this version, v7):https://arxiv.org/abs/1409.0473]]
-[[Attention Is All You Need&BR; (Vaswani et al, 2017):https://arxiv.org/abs/1706.03762]]
-[[論文解説 Attention Is All You Need (Transformer)&BR;ディープラーニングブログ| 2017-12-21:http://deeplearning.hatenablog.com/entry/transformer]]
-[[自然言語処理における、Attentionの耐えられない短さ&BR;Qiita:https://qiita.com/icoxfog417/items/f170666d81f773e4b1a7]]
-[[深層学習界の大前提Transformerの論文解説!&BR;Qiita:https://qiita.com/omiita/items/07e69aef6c156d23c538]]
-[[ざっくり理解する分散表現, Attention, Self Attention, Transformer&BR;Qiita:https://qiita.com/norihitoishida/items/2fead107792b504eaccf]]
-[[作って理解する Transformer / Attention&BR;Qiita|@halhorn|2018年12月05日に更新:https://qiita.com/halhorn/items/c91497522be27bde17ce]]
-[[Attentionで拡張されたRecurrent Neural Networks&BR;DeepAge:https://deepage.net/deep_learning/2017/03/03/attention-augmented-recurrent-neural-networks.html]]
-[[自然言語処理の巨獣「Transformer」のSelf-Attention Layer紹介&BR;Neil Wu|Oct 7, 2019 · 10 min read:https://medium.com/lsc-psd/%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86%E3%81%AE%E5%B7%A8%E7%8D%A3-transformer-%E3%81%AEself-attention-layer%E7%B4%B9%E4%BB%8B-a04dc999efc5]]
-[[Effective Approaches to Attention-based Neural Machine Translation&BR;Submitted on 17 Aug 2015 (v1), last revised 20 Sep 2015 (this version, v5)&BR;Minh-Thang Luong, Hieu Pham, Christopher D. Manning:https://arxiv.org/abs/1508.04025]]
**巻末 [#k8686439]
***履歴 [#d6235c4c]
2020 5/25:半分くらい書いた
2020 5/28:大まかなモデルに関しては大体書いたと思う。
***コメント [#ga1736e6]
#pcomment