LoginSignup
16
18

More than 3 years have passed since last update.

画像認識屋さんのための「初めてのAttention」 

Last updated at Posted at 2020-09-24

概要

この頃、流行っているAttention構造ってなんだろう? ということで、調べてみたら、解説が自然言語知ってて当然だよねってのばっかりで、画像認識しか知らない自分には、とっても大変だったので、画像認識の人向けに最低限必要な内容はこのぐらい、ってのをまとめてみた。

自然言語もGANもお友達じゃないので、間違っていたら、指摘していただけると、大変助かります。

おススメ解説はこれ!
https://www.youtube.com/watch?v=yGTUuEx3GkA

まず、自然言語の用語説明

単語がいっぱい並んで文を作っているので、単語をTokenという単位でわける。このTokenの特徴量をベクトルで持つ。画像で言うところの、ピクセルにおいて、チャンネル方向に特徴量のベクトルが入るような感じ。
上のYoutubeにある解説の例を取ると

最初のBankは銀行という意味ではなく、土手という意味だが、それは、$v_4$のriverによって決定される。
単語そのものだけでは、意味は決定できなく、意味は周りの単語に依存する。そのため、ベクトル同士の関係性を見る必要がある。

普通にtime series dataであれば、あるデータは周りのデータとの関係性が深いため、ガウシアンフィルタなんかをかけて、周りのデータからエラーを吸収することができる。

この考え方を拡張すると、上の特徴ベクトル$v_1$、$v_2$、$v_3$、$v_4$の$v_3$は、あるWeight $[w_1 、w_2 、w_3]$を使って、以下のように変換して、出力$y_3$を作ることができる。
$$y_3= w_1 v_2+w_2 v_3+w_3 v_4$$
自然言語の場合、time series dataとは違い、近くにあるから関係性が深いとは限らないが、関係性が深いかどうかWeightを用いて表すと、同じことができる。

ここで、self-attentionという考え方を導入。

特徴ベクトルの関係性を相関で見ると考え、$v_3$とその他を内積する($v_3^T v_i$)。これで、比較するベクトルの数だけ関係性が出てくることになる。これをWeightとしてしまうと、スケールがベクトルのスケールによって変わるので、Weightのスケールを揃えるために、Normalize(良く使うのはSoftMax)する。これで、Weightができたので、さっきと同じ方法で、出力を計算。全体の流れは、以下。

このWeightに学習は入っていない。
なんで、Self-Attentionって言うかっていうと、自然言語の人は、メモリっていう辞書みたいなモノを使っていたかららしい。画像で最初の方のエッジ検出にガボールフィルターを決め打ちで使うようなイメージ? まあ、これは入力が自分自身だけなので、Self-Attention。

ここから、じゃあ、学習も含めようってことで、入力に学習で作るLinear変換を入れる。

この時、他のベクトルと関係性を確認している$v_3$は、辞書と比較しているように見えるので、データベースの用語を引っ張ってきて、以下のようにLinear変換後の値を名付ける。

最終的に、全てのデータを集めるところは、Aggregationと呼ばれる。
ここで、学習されるLinear変換が一つであるということは、Weightも1種類しかできないということになるが、関係性というのは一つに絞れる訳でもないので、Linear変換をいくつか作った方が良い。これをMulti head attentionと呼ぶ。出てきた結果は全てConcatenateしてDimensionはDense Layerで調整する。

全ての特徴ベクトルにこのOperationをするのがAttention Layerということなる。

まとめ

自然言語の方の用語を一度忘れて図を見てみると、画像のある点においてチャンネル方向に特徴ベクトル$v_i$があるのと変わらない。画像で、Convolutionをする場合、Weightは、Forward中、変わることはないが、Attention構造では、入力に合わせて毎回作られることになる。

TransformerモデルとかのAttentionでは、さらにPosition Encodingと言って、Tokenがどこにあるかという情報も入れることで、単語の並びにより意味が変わる文にも対応する。画像でも同じように、位置情報は重要になるので、この考え方も継承されている。

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18