今回は最近の深層学習(Deep Learning)分野で、超重要概念であるAttention機構について解説したいと思います。
この記事では、Attentionの数学的な深い部分ではなく、その概念を理解することを目的としています。

※ この記事は、深層学習に関して自分でモデルを組めるくらいの知識がある人を対象に書いています。難しく感じた方は、以下の記事でお勧めしている書籍を読んでみてください。
お品書き
Attention(注意)とは?
Attention機構は、機械学習、特に深層学習モデルで近年頻繁に使われるテクニックです。
日本語では「注意」と訳されますが、響きがとてもダサいので本記事では「Attention」と呼びます。
その名が示す通りAttentionは、入力データのどの部分に注意を向けるのかを指示します。
このAttentionを使用することで、あらゆるタスクで従来の性能を上回ることができます。
そのためAttentionは、最新のモデルには必ずと言っていいほど使われており、深層学習分野ではスタンダードになりつつあります。
最初は自然言語処理分野で登場し、現在は画像処理分野や動画処理のタスクでも利用されています。
画像キャプションにおけるAttention
まず、Attentionの概念を理解しやすい問題として、画像キャプションを考えましょう。
以下のように、画像キャプションタスクでは、画像入力に対して、それに対応する説明文(キャプション)を生成します。

さて、このタスクを行うための機械学習モデルを素直に考えると、以下のようなモデルが考えられます。
画像入力を畳み込みニューラルネットワーク(CNN)を用いて、特徴量を取り出し、その特徴量を元にLSTMで文章を生成しています。

このモデルが直感と反する部分として、キャプションの次の単語を生成するときに画像全体の特徴を使っている部分です。例えば、「bird」という単語を生成する際は、画像の背景ではなく中心に映った鳥に注目します。
つまり、キャプションの各単語は、画像の一部分のみを表現しています。「bird」という単語を生成する際に、背景の海までもを考慮するのは効率的ではありません。
このような場合に、Attention機構が役立ちます。
Attentionを利用することで、以下のように、各単語を生成するときに画像の一部分のみを集中的に処理することができます。

Attentionの内部構造
ではAttentionは具体的にどのような構造になっているでしょうか?
Attentionモジュールは、入力データ\(y_i\)の他にコンテクスト\(c\)と呼ばれる情報を受け取ります。
前述した通り、Attentionはデータのどこに注目するかを推論します。
そのため分析対象となる入力データと、どこに注目するかを判断するための情報である「コンテクスト」が必要です。

画像キャプションの例で言うと、入力データとしては、CNNが出力した画像全体を表現する特徴量\(y_i\)で、コンテクストは、一つ前に生成した単語の特徴量\(h_i\)です。
実際の内部構造は以下のようになっています。

パッと見た感じは難しそうですが、やっていることは簡単です。
ここからは主に一番左にある列で流れを説明します。
まず、前述の通り\(y_1\)と\(c\)が入力として入っています。
この2つがまず非線形関数\(f\)で処理され、\(m_1\)が出力されます。この関数は何でもよくて、重要なことはこの関数を通ることで\(y_1\)と\(c\)がミックスされることです。この際に、\(y_1\)と\(c\)は重み付けされて、この重みにより\(y_1\)の\(c\)に対する重要性が決まります。数式で表すと以下のようになります。
\)
次に来るのが、softmax関数です。
ご存知のようにsoftmax関数は、入力ベクトルの最大値を最も大きくした、合計1のベクトルを返します。
これにより、\(m_1\)が全体でどれだけの大きさか(他の\(y_i\)と比較した時の\(y_1\)の\(c\)に対する重要性)がわかります。
あとはこの重要性を各入力データ\(y_i\)に掛け合わせれば、
コンテクスト\(c\)に対する入力データ\(y_i\)の重要性を考慮したベクトル\(z\)を得ることができます。
ここで言う各データの重要性は、言い換えれば「データのどの要素に注目(attention)すべきか」となり、Attentionの意味するところがわかるかと思います。
※この構造はあくまでAttention機構の一例であり、他にも色々な方式があります。
画像処理におけるAttention
Attentionは、画像処理にも利用されます。
画像処理における最も簡単なAttentionの応用は、「Vision Transformer (ViT)」です。
発想は非常にシンプルで、以下の画像のように入力画像をバラバラにし、一列に並べた状態で文章と同様の形で入力します。

ViTはかなり有名な手法なので、簡単に利用することができます。
以下の記事では、学習済みモデルを利用して画像分類問題を行う方法について解説しています。

画像キャプションネットワークにおけるAttention
では、画像処理と自然言語処理を組み合わせてみましょう。
その一例として、画像が入力された時に、その画像の説明(キャプション)を出力する問題を考えます。
結果としては以下のようなネットワーク構造になります。

CNNか抽出された特徴量は、画像全体の情報を含んでいるため、Attentionにとっては注視する部分を探す検索候補です。
コンテクストとしては、LSTMの隠れ層の出力を使います。これにはそれまで生成した文字列の情報が含まれているからです。
結果としては、各Attentionでは、それまで生成した文字列から画像のどの部分に注目すべきかを推論します。
表形式データに対するAttention
Excelで扱うような表形式のデータにも「Attention」と呼ばれるもの概念があります。
当然、Attention機構を組み込んだことで大きく精度が向上しています。
表形式のデータは、特徴量ベクトルの集合で表されますので、表データのAttentionはどの特徴量を重点的に処理するかを判断します。
このAttention機構が利用されている「TabNet」は、以下の記事で解説しております。

さらに学びたい方へ
Attention機構の画像処理への応用は、まだ登場したてなので、自然言語処理関連の資料が多いです。
以下の書籍はわかりやすくて、数式まで含めた深い理解ができます。
機械学習やデータサイエンスを体系的に学ぶことで、新しい技術もすぐに理解することができるようになります。
下手に独学するよりも、プログラミングスクールなどで学んだ方が手っ取り早いのです。
以下の記事でおすすめのスクールを紹介しておりますので、合わせてお読みください。

まとめ
いかがでしたでしょうか?
Attention機構は数式としては、非常に単純なのですが、そのコンセプトを直感的に理解することが難しく、私自身も理解までに時間を要しました。
Attentionを理解することは、現代の機械学習において非常に重要になってきます。
本記事や紹介した書籍を通して、必ず身につけましょう。
わかりにくい部分やミスを見つけたら、お気軽にコメントでお知らせください。