mits58のメモ

メモ 参考にしないでください

Attention in Deep Learning

を読んだ(ICML2019のTutorial)

スライド: http://alex.smola.org/talks/ICML19-attention.pdf

 

1.Watson Nadaraya Estimator

  • Alex Smolaのスライド、好きです
  • まず最初Watson Nadaraya Estimatorってのを導入してた
  • Key Query ValueっていうAttentionの基本的な仕組みを導入するためかな

2. Pooling

  • まずDeep Setsを導入(SmolaもAuthorやんけ!)
  • Deep Setsは集合に対するニューラルネットワーク
  • 集合上の任意の関数は、各要素にφを適用したものの総和を取って、何らかの関数に突っ込んだもので表現できる
  • んで、Multiple Instance Problemっていう問題について考えてみる
  • これは、ある望ましい性質を持つ(薬理効果みたいな)要素を持つ集合を同定してほしいって問題
  • んで、さっきのφの部分の関数の値に、Attentionを導入して要素に重み付けを行って上記の問題へアプローチしてる
  • 次はBag of WordsとWord2vec
  • こいつも、文章(集合)中の各単語(要素)に対する関数みたいなものを求めたいって気持ち
  • WordレベルのAttentionとかSentenceレベルのAttentionがあったりする
  • あとはILSVRC 2017でトップだった(たしか)Squeeze Excitation Networksとか、GAT(Graph Attention Networks)とかもAttentionだよなぁっていう
  • Squeeze Excitation Networksはよくわかってないのでちょっと解説記事を読む

まとめると、集合に対し

  • Pooling   f(X) = \rho \left( \sum_{x \in X} \phi (x)  \right)
  • Attention付きPooling    f(X) = \rho  \left( \sum_{x \in X} \alpha (x, w) \phi (x) \right)
  • Attention関数(単位重みに正規化)    \alpha(x, X) \propto \exp (w^T \tanh Ux)

って感じ、Attentionの重みってのはクエリwがどれくらいコンテクストに依存するかって感じ

この辺はよくある話かなぁといったところ

 

3. Iterative Attention

  • Question Answeringを考える。○○はどこにある?っていう時に、単純なAttentionだと、○○って入ってる部分しか考慮できない
  • なのでIterative Attentionを導入 その名の通りAttention部分を複数個用意してる
  • さっきみたく書くと    q_{t+1} = \rho  \left( \sum_{x \in X} \alpha (x, q_t) \phi (x) \right)
  • 繰り返しAttentionやってるのは初めて聞いた(無知無知のムチ)

4. Iterative Output

  • Seq2Seqとかwith AttentionとかPointer Networkの話(この辺は軽く調べた)
  • Improvementとして、Transformerを使ったりとか、Graph Neural Networksによる局所的交互情報の導入とか
  • Neural Turing Machineとか(これは内部にメモリを持っていて、Attentionの重みを使ってそのメモリを読み書きするっていうやつ)

5. Multiple Heads

  • まあ出てきましたTransformer
  • self-attentionは、QueryとKeyとValueが一致する時
  • でもなんでSelf-Attentionがいいんだろ……(よくわかっていない)
  • まあ、よしなにQueryやKey、Valueに変換する操作が入ってるからまあ……わかるかも……?
  • まあ出てきましたBERT
  • word2vecは系列情報を完全に無視してしまう

6. Sparse Structured Lightweight

  • 疎なAttentionとかもあるっぽい(計算量大きくなるからね)

 

雑感

  • なんとなくAttentionがわかった(気になった)
  • Pointer Networkに対してのTransformerは筋が悪いわけではなかったんだ(とICLR2019のAttention, Learn to〜を読んで思いました)
  • GATも実装しようかなぁ