Attentionの注目対象が適切かチェックするAttention on Attentionの論文要約

# Attention on Attention for Image Captioning

* Lun Huang, Wenmin Wang, Jie Chen, Xiao-Yong Wei
* ICCV 2019 (Oral)
* https://arxiv.org/abs/1908.06954v2
* コード
    * https://github.com/husthuaan/AoANet


![スクリーンショット 2020-04-29 22.37.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/7b8708e2-df61-4f84-5b45-8f8d329dc4cd.png)



## ひとことまとめ


* **どんなもの？** 
    * クエリに関連ないattention結果を返してしまうのを防ぐため，クエリと結果との関連度合いを測るattentionを追加して拡張したAttention on Attention(AoA)を提案
    * イメージキャプショニング用に，AoAを適用したencoder-decoderモデル(AoA Net)を提案
* **先行研究と比べてどこがすごい？**
    * AoAはタスクを問わず一般のattentionに適用可能
    * AoANetがMS COCOのイメージキャプショニングタスクでsota
* **技術や手法のキモはどこ？**
    * 通常のattention結果およびコンテキスト(クエリ)を使い，information vectorとattention gateを作る．それぞれ別々の線形変換を通している
        * この２つに要素ごとの積を適用してattended informationを得る．これがクエリとattention結果との関連性の情報を考慮した結果になる
* **どうやって有効だと検証した？**
    * COCOでBLEU, METEOR, ROUGE-L, CIDEr-D, SPICE で評価
    * 人間の評価者による生成文章の評価
    * アブレーションスタディ
* **議論はある？**
    * なし
* **次に読むべき論文は？**
    * [35] Vaswani et al. 2017
        * multi-head attention, self attention
    * [31] Rennie et al. 2017
        * Self-Critical Sequence Training
    * [2] Anderson et al. 2018
        * Up-Down
    * [49] Yao et al. 2018
        * GCN-LSTM 

## abst

* attention機構はイメージキャプショニングのencoder-decoderフレームワークで広く使われている
    * キャプションdecoding をガイドするために，各時刻でencoded vectorへの重みつき平均を生成する
        * しかしdecoderはattended vectorと与えられたattention queryがどれほど関連しているのかがわからず，誤った結果を出すことがある
* Attention on Attention(AoA)モジュールを提案する
    * 既存のattentionを，attention結果とクエリの関係を決定するように拡張した
        * AoAはattention結果と現在のコンテキストを使って**information vector**と**attention gate**を生成する
            * それらに対して，要素ごとの積で別のattentionを加え，最後に**attended information**を得る．これが期待される有用な情報である
* イメージキャプショニングモデルのencoderおよびdecoder両方にAoAを適用し，AoA Network(AoANet)とする
    * 実験で，既存のすべての手法を上回る結果を示しsotaとなった
        * MS COCO Karpathy offline test split: 129.8 CIDEr-D 
        * official online testing server: 129.6 CIDEr-D (C40)


## 5. 結論

* MS COCOでの実験でAoAモジュールとAoANetが一般的に適用できることが示された


## 1. イントロ

* イメージキャプショニングでencoder-decoder + attentionが広く使われている
    * 画像がCNNで特徴ベクトルにエンコードされ，それがRNNによって単語にデコードされる
        * attentionは各時刻で抽出されたベクトルに対して重みつき平均を生成することでデコードをガイドする
* デコーダはクエリとattention結果がどれくらい関係があるのかわからない
    * attention結果がデコーダが期待するものとは異なり，誤った結果を出す場合がありうる
        1. attentionモジュール自体が部分としてうまく動作しない場合
        2. 候補ベクトル(入力のencodeベクトルだと思う)から有用な情報が全く得られない場合
            * 特定クエリの要求に合致するものがなにもないが，それでもattentionモジュールは候補ベクトルへの重み付き平均ベクトルを返してしまうので，クエリと関係ない結果になる
                * (クエリとは前時刻で生成された単語のこと？)
* Attention on Attention(AoA)はこれを解決する
    * **information vector**と2つの線形変換を伴う**attention gate**を生成する．GLU[10]に似ている
    1. information vetor
        * 現在のコンテキスト(クエリ)と，attention結果から，線形変換を経て派生する
        * 新しくattention結果から得られた情報と現在のコンテキストから得られた情報を保存している
    2. attention gate
        * 1と別の線形変換とsigmoidを経由したクエリと，information vectorの各チャネルに対応する情報の重要性を示す各チャネルインデックスの値から派生する
* AoAは要素ごとの積を使ってattention gateをinformation vectorに適用することで別のattentionを付加しており，最終的に有用な情報である**attended information**を得る
* AoAは色々なattention機構に適用できる
    * 伝統的なsingle-head attentionでは，attention結果とクエリの関係を決定するのを助ける
    * multi-head attention[35]では，異なるattention heads間の関係を構築するのを助け，attention結果をフィルタして，有用な１個だけを保存する
* イメージキャプショニングモデルAoANetについては，AoAを画像encoderとキャプションdecoder両方に適用する
    * encoderでは，画像中の物体の特徴ベクトルを抽出し，物体間の関係をモデリングするためにベクトルに対してself-attention[35]を適用し，それらがどのように関連するか決定するためにAoAを適用する
    * decoderでは，関係ないattention結果をフィルタして有用な１個だけを残すために適用する


## 2. 関連研究

### 2.1. イメージキャプショニング

* [42]: 視覚コンテキストを組み込むため，CNN特徴マップ上での空間的attention機構
* [6]: 空間的かつchannel-wise attentionモデルを提案
* [27]: いつvisual attentionをactivateするか決めるために適応的attention機構提案
* [50, 2, 49, 44]: 物体，属性，関係を取り込む

### 2.2. attention 機構

* attentionは，
    1. まず各候補ベクトルについて重要性スコアを算出
    2. softmax関数でスコアを正規化して重みにする
    3. 重みを候補へ適用してattention結果を生成．これは重みつき平均ベクトルとなる[42]
* 他にも種類がある
    * spatial and channel-wise attention[6]
    * adaptive attention[27]
    * stacked attention[46]
    * multi-level attention[51]
    * multi-head attention[35]
    * self-attention[35]
        * 機械翻訳でsota

### 2.3 他の研究

* AoAが使っている技術は次のものと似ている
    1. GLU[10]
        * RNNとCNNを置き換え，言語モデルで長期の依存性を捉えられるようにした
    2. multi-modal fusion[43, 14, 22, 4, 17]
        * 異なるモダリティ間の相互作用をモデリング(テキストと画像など)し，それらの情報を結合
    3. LSTM/GRU
        * 入力に対してシーケンシャルにゲートとメモリを使用

### 2.4 他の研究との違い

* AoAはattentionの一般化であり，何にでも適用できる
    * AoAはattention結果とクエリとの関連性を決定する
        * multi-modal fusionは異なるモダリティからの情報を結合する
    * AoAは1個のattention gate だけ必要とし，隠れ状態はない
        * LSTM/GRUは隠れ状態と，１個以上のgateを使用．sequence modelingにしか使用できない

## 3. 提案手法

### 3.1. Attention on Attention

![スクリーンショット 2020-04-30 19.25.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/cb6e327e-a937-8870-e6e8-73c38472aed6.png)


* attention モジュール$f_{att}(Q, K, V)$はクエリQ，キーK，バリューVを操作して重み付き平均ベクトル$\hat{V}$を生成する
    * 最初にQとKの類似度を計算し，Vに対する重み付き平均ベクトルの計算に使う．次式．
        * $a_{i,j} = f_{sim}(q_i, k_j), \alpha_{i, j} = \frac{e^{a_{i,j}}}{\sum_j e^{a_{i,j}}} \tag{1}$
        * $\hat{v_i} = \sum_j \alpha_{i, j} v_j \tag{2}$
            * $q_i \in Q$はi番目のクエリ，$k_j \in K$と$v_j \in V$はj番目のkeyとvalueのペア
            * $f_{sim}$は各$k_j$と$q_i$の類似度スコアを計算する関数
            * $\hat{v_i}$は$q_i$に対するattended vector
    * attention モジュールはどれだけQとK/Vが関連していようとも各クエリに対して重み付き平均を出力する
        * 関連するベクトルがない場合でも生成するので，ミスリードにつながる
* attention 結果とクエリとの関連性を測るためにAoAモジュールを提案する
    * AoAは別々の線形変換を通してinformation vector **i**とattention gate **g**を生成する
        * どちらもattention結果と現在のコンテキスト(クエリ)qに条件付けられている
            * $i = W_q^i q + W_v^i \hat{v} + b^i \tag{3}$
            * $g = \sigma(W_q^g q + W_v^g \hat{v} + b^g) \tag{4}$
                * $W_q^i, W_v^i, W_q^g, W_v^g \in \mathbb{R}^{D \times D}$
                * $b^i, b^g \in \mathbb{R}^{D}$
                * Dはqとvの次元数
                * $\hat{v} = f_{att}(Q, K, V)$はqのatetntion結果
                * $f_{att}$はattentionモジュール
                * $\sigma$はシグモイド
    * 次に，attention gateを要素ごとの積でinformation vectorに適用することで，別のattentionを加え，attended information $\hat{i}$を得る
        * $\hat{i} = g \odot i \tag{5}$
    * $\odot$は要素ごとの積．AoAの全体は次式
        * $AoA(f_{att}, Q, K, V) = \sigma(W_q^g Q + W_v^g f_{att}(Q, K, V) + b^g) \odot (W_q^i Q + W_v^i f_{att}(Q, K, V) + b^i) \tag{6}$

### 3.2. AoANet for Image Captioning

* イメージキャプショニングのために，encoder，decoder両方にAoAモジュールを組み込んだencoder-decoderモデルを構築する

#### 3.2.1 Encoder with AoA

![スクリーンショット 2020-04-30 19.48.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/e14f8103-ef6e-fe9a-45e2-f2c5425eec3f.png)
![スクリーンショット 2020-04-30 19.50.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/f531f065-4d7a-5f0f-27e0-e490500b2ce8.png)


* CNNまたはR-CNNベースのネットワークで，画像から特徴ベクトルのセット$A=\{a_1, a_2, ..., a_k\}$を抽出する
    * $a_i \in \mathbb{R}^D$．kはA内のベクトルの数，Dは各ベクトルの次元数
* 抽出したベクトルをデコーダに直接入力せず，ベクトルの表現を修正するためにAoAモジュールを含むrefining networkを構築する
    * encoder内のAoAモジュールは$AoA^E$と呼び，マルチヘッドattention[35]を採用した
        * Q, K, Vはそれぞれ特徴ベクトル集合Aの３つの個別の線形写像
        * AoAモジュールの後にresidual connection[18]とlayer normalizaiton[3]が続く
            * $A' = LayerNorm(A + AoA^E( f_{mh-att}, W^{Q_e}A, W^{K_e}A, W^{V_e}A)) \tag{7}$
                * $W^{Q_e}, W^{K_e}, W^{V_e} \in \mathbb{R}^{D \times D}$は線形変換行列
                * $f_{mh-att}$はマルチヘッドattentionで，Q, K, Vをchannel 次元でH=8のスライスに分割する
                    * マルチヘッドattentionはscaled dot-product attention $f_{dot-att}$を各スライス$Q_i, K_i, V_i$に採用しており，各スライスの結果を結合して最終的なattended vectorとする
                        * $f_{mh-att}(Q, K, V) = Concat(head_1, ..., head_H) \tag{8}$
                        * $head_i = f_{dot-att}(Q_i, K_i, V_i) \tag{9}$
                        * $f_{dot-att}(Q_i, K_i, V_i) = softmax(\frac{Q_i K_i^T}{\sqrt{d}})V_i \tag{10}$
    * このrefining moduleでは，self-attentive multi-head attention モジュールが画像中の物体間の相互作用を追いかけ，AoAはそれらがどれくらい関連しているかを測定する
        * refineが終わった後，特徴ベクトルを更新する．$A \leftarrow A'$
            * refining moduleはAの次元数を変えないので，N回スタックすることができる(N=6を使用した)
    * refining moduleは元の[35]のtransformer encoderとは異なる構造を使っている


#### 3.2.2 Decoder with AoA


![スクリーンショット 2020-04-30 19.51.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/ceb7f20b-6330-43b3-fb24-f639522cf955.png)


* decoderはrefineされた特徴ベクトルAを使ってキャプションyのシーケンスを生成する
* 語彙についての条件付き確率を計算するためにコンテキストベクトル$c_t$をモデリングする
    * $p(y_t | y_{1:t-1}, I) = softmax(W_p c_t) \tag{11}$
        * $W_p \in \mathbb{R}^{D \times |\Sigma|}$は学習される重みパラメタ，$\Sigma$は語彙数
    * コンテキストベクトル$c_t$はdecoding状態と新たに獲得された情報を保存する
        * この情報はattended feature vector $\hat{a_t}$とLSTM出力$h_t$で生成される
            * $\hat{a_t}$はattentionモジュールからのattended resultであり，シングルヘッドでもマルチヘッドでもよい
* デコーダ内のLSTMはキャプションデコーディング処理をモデリングする
    * 入力は次の３つからなる
        1. 現在のタイムステップでの入力単語の埋め込み
        2. visual vector($\bar{a} + c_{t-1}$)ただし$\bar{a} = \frac{1}{k}\sum_i a_i$でAのmean poolingを表す
        3. 前の時刻でのコンテキストベクトルを表す$c_{t-1}$．ただし$c_{-1}$はゼロで初期化される
            * $x_t = \left[ W_e \Pi_t, \bar{a} + c_{t-1} \right] \tag{12}$
            * $h_t, m_t = LSTM(x_t, h_{t-1}, m_{t-1}) \tag{13}$
                * $W_e \in \mathbb{R}^{E \times |\Sigma|}$は語彙$\Sigma$の単語埋め込み行列
                * $\Pi_t$は時刻tの入力単語$w_t$のワンホットエンコーディング
* 図5のように，AoAデコーダにとって$c_t$はAoAモジュールから得られる．AoAモジュールを$AoA^D$と書く
    * $c_t = AoA^{D}(f_{mh-att}, W^{Q_d}\left[ h_t\right], W^{K_d}A, W^{V_d}A) \tag{14}$
        * ここで$W^{Q_d}, W^{K_d}, W^{V_d} \in \mathbb{R}^{D \times D}$
        * $h_t, m_t \in \mathbb{R}^D$
        * LSTMの隠れ状態と$h_t$はattention queryとなる


### 3.3. 訓練と目的関数

#### Cross Entropy Lossでの訓練

* 最初にcross entropy(XE) で訓練する
    * $L_{XE}(\theta) = - \sum_{t=1}^T log((p_{\theta}(y_t^* | y_{1:t-1}^* ))) \tag{15}$
        * $y_{1:T}^* $は正解文章を意味する

#### CIDEr-D スコア最適化

* 微分できない評価指標をSelf-Critical SequenceTraining[31]，(SCST)で最適化する
    * $L_{RL}(\theta) = - E_{y_{1:T~ p_{\theta}}}\left[ r(y_{1:T})\right] \tag{16}$
        * 報酬$r(\cdot)$はなにかメトリックのスコア
    * 勾配は次で近似できる
        * $\nabla_{\theta} L_{RL}(\theta) \approx -(r(y_{1:T}^s) - r(\hat{y_{1:T}})) \nabla_{\theta} log p_{\theta}(y_{1:T}^s) \tag{17}$
            * $y^s$は確率分布からのサンプル，$\hat{y}$はグリーディーデコーディングの結果を示す


### 3.4. 実装の詳細

* ImageNet[11]とVisual Genome[24]で訓練した訓練済みFaster-RCNN[30]を使用して画像のbottom-up feature vector[2]を抽出
    * 元のベクトルは2048次元で，次元数D=1024の新しい空間に射影する
        * このサイズはデコーダのLSTMも同じ
* AoANet
    * 誤差：XE
    * エポック：30
    * batch size：10
    * optimizer: ADAM
        * 初期学習率：2e-4
            * 3エポックごとに0.8でアニール
    * scheduled sampling probabilityを5エポックにつき0.05増加[5]
* CIDEr-DスコアをSCSTで最適化
    * エポック：15
    * 初期学習率: 2e-5
    * validation score が数ステップ間で変化なくなったとき0.5アニール

## 4. 実験

### 4.1. データセット

* MSCOCOのoffline Karpathy data split[21]を使用
    * validation 5000枚
    * test 5000枚
    * 文章はすべて小文字
    * 5回未満しか出現しない単語は除外して，語彙は10369単語になった
* 評価指標はBLEU [29], METEOR [33], ROUGE-L [13], CIDEr-D [36] and SPICE [1]



### 4.2. 量的解析

#### Offline Evaluation

![スクリーンショット 2020-04-30 20.59.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/e116eab1-ea54-0a7f-3e12-ab3dd07d0554.png)


* 表１
    * GCN-LSTM [49]: 画像中のすべての２つのエンティティの間の関係を予測し，関係情報を特徴ベクトルにエンコードする
    *  SGAE [44]: シーングラフをオートエンコードする
    * 全てのモデルはXE誤差で最適化し，その後CIDEr-Dで最適化する
        * どちらのステージでも，AoANetは全てのモデルを上回っている

#### Online Evaluation



* 表２
    * ほとんどすべての指標で高いスコアを記録


### 4.3. 質的解析

![スクリーンショット 2020-05-01 22.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/6e6b7a86-f741-0131-186f-e8741d619efe.png)

* 表3
    * ベースラインとしてUp-Down[2]を再実装した
        * べースラインは自然言語の文法は正しいが画像の内容に対して不正確な場合があった
    * AoANetは正確なキャプションを生成し，次の２つの側面で優れている
        1. 同じ種類の物体をより正確にカウントできる
        2. 画像中の物体同士の相互作用を発見できる

### 4.4. アブレーション解析

![スクリーンショット 2020-04-30 22.59.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/034a4c46-caac-6746-d10d-5f5786732154.png)

![スクリーンショット 2020-04-30 23.00.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/64989258-fedf-83c4-821d-0b56bdffe325.png)

* ベースモデル：encoderにrefining moduleがなく，図7aのbaseデコーダを採用

#### encoderにおけるAoAの効果

* AoAなしのrefining moduleを加えるとCIDEr-Dが3上がった
* refining moduleにAoAを適用するとCIDEr-Dがさらに2上がった

#### decoderにおけるAoAの効果

![スクリーンショット 2020-04-30 23.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/be34cd01-d3df-ff8b-b537-4381672ef8c2.png)


* コンテキストベクトル$c_t$をモデリングする異なるスキームを比較
* シングルattentionをmulti-head attentionにするとわずかに性能が上がる
* LSTMを使うとベースモデルより性能があがり，AoAはLSTMより更に良い
    * AoAは2つの線形変換だけなのでLSTMより計算量が少ない
* 図８にキャプション生成プロセスを示した
    * 各デコーディングタイムステップでのattendされた画像領域が示されている
        * attentionモジュールが常に信頼できるわけではない事がわかる
            * ベースモデルは"A teddy bear sitting on a ..."でbookがattendされているので，単語「book」を生成すると，画像の示すものとは食い違う

### 4.5. 人間による評価

* [44]に従い，30人の評価者に100枚のランダムに選んだ画像を評価してもらう
    * decoder with AoAとベースモデルがそれぞれ生成した2つのキャプションを見せる
    * decoder with AoA, base, 同じくらい，がそれぞれ49.15, 21.2, 29.65%だったので，AoAが有効だということが示された

### 4.6. 汎化

* video captioning dataset MSR-VTT[41]で実験を行った
* 各ビデオのサンプルされた20フレームに対してfeature vectorの抽出するのに，ResNet-101を使用
    * それらのvectorをbi-LSTMに入力し，baseまたはdecoder with AoAのdecoderに入力
        * BLEU-4: 33.53,CIDEr-D: 38.83, ROUGE-L 56.90 だったのが37.22, 42.44, 58.32に向上した