Attention on Attention for Image Captioning
- Lun Huang, Wenmin Wang, Jie Chen, Xiao-Yong Wei
- ICCV 2019 (Oral)
- https://arxiv.org/abs/1908.06954v2
- コード
ひとことまとめ
-
どんなもの?
- クエリに関連ないattention結果を返してしまうのを防ぐため,クエリと結果との関連度合いを測るattentionを追加して拡張したAttention on Attention(AoA)を提案
- イメージキャプショニング用に,AoAを適用したencoder-decoderモデル(AoA Net)を提案
-
先行研究と比べてどこがすごい?
- AoAはタスクを問わず一般のattentionに適用可能
- AoANetがMS COCOのイメージキャプショニングタスクでsota
-
技術や手法のキモはどこ?
- 通常のattention結果およびコンテキスト(クエリ)を使い,information vectorとattention gateを作る.それぞれ別々の線形変換を通している
- この2つに要素ごとの積を適用してattended informationを得る.これがクエリとattention結果との関連性の情報を考慮した結果になる
- 通常のattention結果およびコンテキスト(クエリ)を使い,information vectorとattention gateを作る.それぞれ別々の線形変換を通している
-
どうやって有効だと検証した?
- 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
- [35] Vaswani et al. 2017
abst
- attention機構はイメージキャプショニングのencoder-decoderフレームワークで広く使われている
- キャプションdecoding をガイドするために,各時刻でencoded vectorへの重みつき平均を生成する
- しかしdecoderはattended vectorと与えられたattention queryがどれほど関連しているのかがわからず,誤った結果を出すことがある
- キャプションdecoding をガイドするために,各時刻でencoded vectorへの重みつき平均を生成する
- Attention on Attention(AoA)モジュールを提案する
- 既存のattentionを,attention結果とクエリの関係を決定するように拡張した
- AoAはattention結果と現在のコンテキストを使ってinformation vectorとattention gateを生成する
- それらに対して,要素ごとの積で別のattentionを加え,最後にattended informationを得る.これが期待される有用な情報である
- AoAはattention結果と現在のコンテキストを使ってinformation vectorとattention gateを生成する
- 既存のattentionを,attention結果とクエリの関係を決定するように拡張した
- イメージキャプショニングモデルの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)
- 実験で,既存のすべての手法を上回る結果を示しsotaとなった
5. 結論
- MS COCOでの実験でAoAモジュールとAoANetが一般的に適用できることが示された
1. イントロ
- イメージキャプショニングでencoder-decoder + attentionが広く使われている
- 画像がCNNで特徴ベクトルにエンコードされ,それがRNNによって単語にデコードされる
- attentionは各時刻で抽出されたベクトルに対して重みつき平均を生成することでデコードをガイドする
- 画像がCNNで特徴ベクトルにエンコードされ,それがRNNによって単語にデコードされる
- デコーダはクエリとattention結果がどれくらい関係があるのかわからない
- attention結果がデコーダが期待するものとは異なり,誤った結果を出す場合がありうる
- attentionモジュール自体が部分としてうまく動作しない場合
- 候補ベクトル(入力のencodeベクトルだと思う)から有用な情報が全く得られない場合
- 特定クエリの要求に合致するものがなにもないが,それでもattentionモジュールは候補ベクトルへの重み付き平均ベクトルを返してしまうので,クエリと関係ない結果になる
- (クエリとは前時刻で生成された単語のこと?)
- 特定クエリの要求に合致するものがなにもないが,それでもattentionモジュールは候補ベクトルへの重み付き平均ベクトルを返してしまうので,クエリと関係ない結果になる
- attention結果がデコーダが期待するものとは異なり,誤った結果を出す場合がありうる
- Attention on Attention(AoA)はこれを解決する
- information vectorと2つの線形変換を伴うattention gateを生成する.GLU[10]に似ている
- information vetor
- 現在のコンテキスト(クエリ)と,attention結果から,線形変換を経て派生する
- 新しくattention結果から得られた情報と現在のコンテキストから得られた情報を保存している
- 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結果をフィルタして,有用な1個だけを保存する
- イメージキャプショニングモデルAoANetについては,AoAを画像encoderとキャプションdecoder両方に適用する
- encoderでは,画像中の物体の特徴ベクトルを抽出し,物体間の関係をモデリングするためにベクトルに対してself-attention[35]を適用し,それらがどのように関連するか決定するためにAoAを適用する
- decoderでは,関係ないattention結果をフィルタして有用な1個だけを残すために適用する
2. 関連研究
2.1. イメージキャプショニング
- [6]: 空間的かつchannel-wise attentionモデルを提案
- [27]: いつvisual attentionをactivateするか決めるために適応的attention機構提案
2.2. attention 機構
- attentionは,
- まず各候補ベクトルについて重要性スコアを算出
- softmax関数でスコアを正規化して重みにする
- 重みを候補へ適用して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が使っている技術は次のものと似ている
- GLU[10]
- RNNとCNNを置き換え,言語モデルで長期の依存性を捉えられるようにした
- multi-modal fusion[43, 14, 22, 4, 17]
- 異なるモダリティ間の相互作用をモデリング(テキストと画像など)し,それらの情報を結合
- LSTM/GRU
- 入力に対してシーケンシャルにゲートとメモリを使用
- GLU[10]
2.4 他の研究との違い
- AoAはattentionの一般化であり,何にでも適用できる
- AoAはattention結果とクエリとの関連性を決定する
- multi-modal fusionは異なるモダリティからの情報を結合する
- AoAは1個のattention gate だけ必要とし,隠れ状態はない
- LSTM/GRUは隠れ状態と,1個以上のgateを使用.sequence modelingにしか使用できない
- AoAはattention結果とクエリとの関連性を決定する
3. 提案手法
3.1. Attention on Attention
- 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が関連していようとも各クエリに対して重み付き平均を出力する
- 関連するベクトルがない場合でも生成するので,ミスリードにつながる
- 最初に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結果と現在のコンテキスト(クエリ)qに条件付けられている
- 次に,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}$
- AoAは別々の線形変換を通してinformation vector iとattention gate gを生成する
3.2. AoANet for Image Captioning
- イメージキャプショニングのために,encoder,decoder両方にAoAモジュールを組み込んだencoder-decoderモデルを構築する
3.2.1 Encoder with AoA
- 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の3つの個別の線形写像
- 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}$
- マルチヘッドattentionはscaled dot-product attention $f_{dot-att}$を各スライス$Q_i, K_i, V_i$に採用しており,各スライスの結果を結合して最終的なattended vectorとする
- $A' = LayerNorm(A + AoA^E( f_{mh-att}, W^{Q_e}A, W^{K_e}A, W^{V_e}A)) \tag{7}$
- このrefining moduleでは,self-attentive multi-head attention モジュールが画像中の物体間の相互作用を追いかけ,AoAはそれらがどれくらい関連しているかを測定する
- refineが終わった後,特徴ベクトルを更新する.$A \leftarrow A'$
- refining moduleはAの次元数を変えないので,N回スタックすることができる(N=6を使用した)
- refineが終わった後,特徴ベクトルを更新する.$A \leftarrow A'$
- refining moduleは元の[35]のtransformer encoderとは異なる構造を使っている
- encoder内のAoAモジュールは$AoA^E$と呼び,マルチヘッドattention[35]を採用した
3.2.2 Decoder with AoA
- 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であり,シングルヘッドでもマルチヘッドでもよい
- この情報はattended feature vector $\hat{a_t}$とLSTM出力$h_t$で生成される
- $p(y_t | y_{1:t-1}, I) = softmax(W_p c_t) \tag{11}$
- デコーダ内のLSTMはキャプションデコーディング処理をモデリングする
- 入力は次の3つからなる
- 現在のタイムステップでの入力単語の埋め込み
- visual vector($\bar{a} + c_{t-1}$)ただし$\bar{a} = \frac{1}{k}\sum_i a_i$でAのmean poolingを表す
- 前の時刻でのコンテキストベクトルを表す$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$のワンホットエンコーディング
- 入力は次の3つからなる
- 図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となる
- $c_t = AoA^{D}(f_{mh-att}, W^{Q_d}\left[ h_t\right], W^{K_d}A, W^{V_d}A) \tag{14}$
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}^* $は正解文章を意味する
- $L_{XE}(\theta) = - \sum_{t=1}^T log((p_{\theta}(y_t^* | y_{1:t-1}^* ))) \tag{15}$
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}$はグリーディーデコーディングの結果を示す
- $\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}$
- $L_{RL}(\theta) = - E_{y_{1:T~ p_{\theta}}}\left[ r(y_{1:T})\right] \tag{16}$
3.4. 実装の詳細
- ImageNet[11]とVisual Genome[24]で訓練した訓練済みFaster-RCNN[30]を使用して画像のbottom-up feature vector[2]を抽出
- 元のベクトルは2048次元で,次元数D=1024の新しい空間に射影する
- このサイズはデコーダのLSTMも同じ
- 元のベクトルは2048次元で,次元数D=1024の新しい空間に射影する
- AoANet
- 誤差:XE
- エポック:30
- batch size:10
- optimizer: ADAM
- 初期学習率:2e-4
- 3エポックごとに0.8でアニール
- 初期学習率:2e-4
- 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
- 表1
- GCN-LSTM [49]: 画像中のすべての2つのエンティティの間の関係を予測し,関係情報を特徴ベクトルにエンコードする
- SGAE [44]: シーングラフをオートエンコードする
- 全てのモデルはXE誤差で最適化し,その後CIDEr-Dで最適化する
- どちらのステージでも,AoANetは全てのモデルを上回っている
Online Evaluation
- 表2
- ほとんどすべての指標で高いスコアを記録
4.3. 質的解析
- 表3
- ベースラインとしてUp-Down[2]を再実装した
- べースラインは自然言語の文法は正しいが画像の内容に対して不正確な場合があった
- AoANetは正確なキャプションを生成し,次の2つの側面で優れている
- 同じ種類の物体をより正確にカウントできる
- 画像中の物体同士の相互作用を発見できる
- ベースラインとしてUp-Down[2]を再実装した
4.4. アブレーション解析
- ベースモデル:encoderにrefining moduleがなく,図7aのbaseデコーダを採用
encoderにおけるAoAの効果
- AoAなしのrefining moduleを加えるとCIDEr-Dが3上がった
- refining moduleにAoAを適用するとCIDEr-Dがさらに2上がった
decoderにおけるAoAの効果
- コンテキストベクトル$c_t$をモデリングする異なるスキームを比較
- シングルattentionをmulti-head attentionにするとわずかに性能が上がる
- LSTMを使うとベースモデルより性能があがり,AoAはLSTMより更に良い
- AoAは2つの線形変換だけなのでLSTMより計算量が少ない
- 図8にキャプション生成プロセスを示した
- 各デコーディングタイムステップでのattendされた画像領域が示されている
- attentionモジュールが常に信頼できるわけではない事がわかる
- ベースモデルは"A teddy bear sitting on a ..."でbookがattendされているので,単語「book」を生成すると,画像の示すものとは食い違う
- attentionモジュールが常に信頼できるわけではない事がわかる
- 各デコーディングタイムステップでのattendされた画像領域が示されている
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に向上した
- それらのvectorをbi-LSTMに入力し,baseまたはdecoder with AoAのdecoderに入力