アテンション (機械学習)

人工ニューラルネットワークにおけるアテンション（）は、認知的な注意を模倣するように設計された手法である。注意機構（）とも呼ばれる。

アテンションは入力データのある部分を強化し他の部分を弱化する効果をもつ。その動機は、ネットワークが、データの小さくても重要な部分にもっと注意を払うべきということである。 データのどの部分が他の部分よりも重要であるかを文脈に依存できる柔軟性をもつ。これは実行時に固定されているべき標準的な重みとは対照的であり、実行時に変更可能な「ソフトウェイト」としての役割に由来する。

アテンションと類似する機構は、1990年代に以下の名前で提唱されている：

 乗算モジュール（）
 シグマ・パイ・ユニット（）
 ハイパーネットワーク

アテンションの応用先として以下が挙げられる：

 の記憶
 の推論タスク
 トランスフォーマー（Transformer）や長短期記憶（LSTM）での言語処理
 パーシーバー（）での多重モーダルデータ処理（音、画像、ビデオ、テキスト）

 背景 
アテンションは次の役割を果たすモジュールとして設計されている：

 seq2seq: 入力ベクトル列を出力ベクトル列へ変換する
 長距離依存の考慮: インデックス が離れた入出力を結びつける
 任意長ベクトル列の変換: 推論ごとに異なる長さの入力列を処理する
 高い並列処理能力: 学習・推論の高速化

例えば機械翻訳を考える。機械翻訳タスクでは単語の単純置換（日→英）では目的を達成できない。なぜなら日英で語順が異なるからである。すなわち入力単語ベクトル列を出力単語ベクトル列に変換する際、列を列へ変換する必要がある（seq2seq）。また列内の近い部分のみの参照では不十分なケースがある。例えば疑問文の日英翻訳において、文頭の "Do" () を生成するには日本語原文の文末「か？」() を参照する必要がある。すなわち長距離依存性を考慮できる必要がある。また文章長は一定でないため、任意長の入力を扱える必要がある。そして長いベクトル列を巨大なモデルで実務的に学習するには高い並列処理能力が求められる。

例えばフィードフォワードモジュールは時間方向の重みによってseq2seqに利用できるが、重みが一定数であるため任意長ベクトル列を扱うことができない。畳み込みモジュールは任意長のseq2seqに利用できるが、長距離依存性を扱うには巨大なカーネルか多くの層を必要とする。回帰モジュールは3つの要件を理論上は満たせるが、ステップごとの回帰の中で長期依存情報が失われることが実務的に知られている（参考: RNN#Copyingタスク）。

この要件は機械翻訳を含む自然言語処理に限らず、画像内の離れた位置にある対象を参照したい画像認識や、音高の時間的な変動を捉えたい音声合成など、幅広いタスクで求められていた。このような背景から「任意長の列を列に変換する際、各位置の入力を直接取り込むモジュール」として提唱・活用されているのがアテンション機構である。

 概念 
アテンションは「入力ベクトル列のクエリ依存動的重みづけ和」に相当する演算である。

アテンションでは各入力ベクトル の重みづけ和を 番目の出力ベクトル とする。このとき、重みは単なる固定値ではなく動的に計算される（ソフトウェイト）。動的な計算は、 番目の出力に紐づく情報を表現した関連ベクトル と取り込まれる入力ベクトル自身に基づく。情報の流れを表現する概念式としては以下に相当する：

 

この式が表すように、アテンションでは各出力に対して関連ベクトルと入力ベクトルから重みを求め、その重みに基づいて全入力を取り込む。これにより入力列全体を各出力ベクトルへ直接取り込みつつ、重みの動的計算によって任意長のベクトル列を扱える。すなわち「任意長の列を列に変換する際、各位置の入力を直接取り込むモジュール」として機能している。

このアテンションは別の観点から捉え直すことができる。アテンションでは入力 をベースとして、足される値 （バリュー）とそれを要約した識別子 （キー）を用意している。さらに各出力に紐づいた関連情報をベースとして照会ベクトル （クエリ）を用意し、クエリとキーの一致度に基づいてバリューの重み=取り込む量を決定していると捉えられる。すなわち次の概念式に相当する：

 

最初の概念式とほぼ同様の形である一方、入力をバリューへ変換したうえで和を取れる柔軟性が追加されている。

この概念を実際に機能する演算とするうえで、以下の具体化をおこなう。まず、 の大きさに制約がないと無限長の入力列に対し出力ベクトルが発散してしまうため、ソフトウェイトは非負かつ出力ベクトルごとに総和1（）の制約が課される。この制約内でクエリとキーの一致度を測る関数（クエリ・キー機構、）を具体的に定義するが、これには様々なバリエーションが存在する。ドット積 にソフトマックス関数を適用した形が代表例である。

 言語翻訳の事例 
英語からフランス語に翻訳する機械を構築するには、基本的なエンコーダ・デコーダに、アテンション単位（attention unit）を合体する（下図）。最も単純な例では、アテンション単位は回帰エンコーダの状態のドット積からなり、訓練の必要はない。実際には、アテンション単位は、クエリ・キー・バリュー（query-key-value）と呼ばれる3層の全結合型ニューラルネットワーク層で構成され、訓練が必要である。後述の「別形」の項を参照。

+説明文ラベル説明100最大文長300埋め込みサイズ（単語次元）500隠れベクトルの長さ9k, 10k入力言語、出力言語のそれぞれの辞書サイズ。x, Yそれぞれ長さが9kと10kの 1-hot 辞書ベクトル。x → x はベクトル乗算ではなく、ルックアップテーブルとして実装される。Y は線形デコーダー層 D の1-hotマキシマイザ、つまり D の線形層出力の argmax を取る。x長さ300の単語埋め込みベクトル。このベクトルは通常、やWord2Vecなど他のプロジェクトで事前計算される。h長さ500のエンコーダ隠れベクトル。各時点で、このベクトルはその前のすべての単語を要約する。最後の h は「文ベクトル」、あるいはヒントンが（thought vector）と呼ぶものと見なすことができる。s長さ500のデコーダ隠れ状態ベクトル。E500ニューロンのRNNエンコーダ。出力数は500。入力数は、ソース埋め込みから800-300＋回帰接続から500。エンコーダがデコーダに直接入力するのは初期化のみで、それ以降はしないため、直接接続の線は淡い色で表示している。D2層デコーダ。回帰層は500ニューロン、全結合型の線形層は10kニューロン（ターゲット語彙の大きさ）である。線形層だけでも500万個（500×10k）のウェイトがあり、回帰層の10倍以上のウェイトがある。score長さ100のアライメントスコアw長さ100のベクトルのアテンションウェイト。これらは、訓練段階で変化する「ハード」なニューロンのウェイトとは対照的に、前方パス中に変化する「ソフト」なウェイトである。Aアテンションモジュール。これは回帰状態のドット積、またはクエリ・キー・バリューの全結合層にすることができる。出力は長さ100のベクトル w である。H500×100。長さ100の隠れベクトル h が行列に連結されたものc長さ500のコンテキストベクトル。c は h 個のベクトルを w で重み付けした線形結合である。c = H * w。

行列として見ると、アテンション・ウェイトは、ネットワークが文脈に応じてどのようにアテンションを調整するのかを示している。
Iloveyouje0.940.020.04t'0.110.010.88aime0.030.950.02

このようなアテンションウェイトの考え方は、ニューラルネットワークが批判される「説明可能性」の問題を解決するものである。単語の順序に関係なく逐語訳（verbatim translation、逐次的な翻訳のこと）を行うネットワークは、このような観点で分析可能であれば、対角優位行列を持つことになる。一方、非対角優位であれば、アテンション機構がより微妙であることを示している。デコーダーを最初に通過したとき、94%のアテンションウェイトが最初の英単語 "I" にかかっているので、ネットワークは "je" という単語を提示する。デコーダの2回目の通過では、3番目の英単語 "you" に88%のアテンションウェイトがかかるので "t'" を提示する。最後の通過では、2番目の英単語 "love" に95%のアテンションウェイトがかかるので、"aime" を提示する。

 別形 
ソフトウェイトを実装したアテンションには様々な変種が存在する。一例として以下が挙げられる：

 加法アテンション（）: 別名Bahdanau Attention
 乗法的アテンション（）: 別名Luong Attention
 自己アテンション（）

畳み込みニューラルネットワークの場合、アテンション機構は、それが作用する次元、すなわち空間アテンション、チャネルアテンション、またはその両方の組み合わせによって区別することもできる。

これらの別形は、エンコーダ側の入力を組み替えて、その効果を各ターゲット出力に再分配するものである。多くの場合、ドット積の相関風の行列が再重み付け係数を提供する（凡例を参照）。
1. エンコーダ・デコーダのドット積2. エンコーダ・デコーダQKV3. エンコーダのみのドット積4. エンコーダのみのQKV5. Pytorchのチュートリアル

+説明文ラベル説明変数 X, H, S, T大文字の変数は、現在の単語だけでなく、文全体を表す。たとえば、H はエンコーダの隠れ状態を表す行列で、1列ごとに1単語である。S, TS はデコーダの隠れ状態、T はターゲット語の埋め込み。Pytorchチュートリアル別形の訓練フェーズでは、T は使用するのレベルに応じて2つの情報源を交互に使用する。T は、ネットワークの出力単語の埋め込み、つまり embedding(argmax(FC出力)) とすることができる。あるいは教師強制の場合、T は一定の強制確率（たとえば1/2）で発生する既知の正しい単語の埋め込みとすることができるX, HH エンコーダの隠れ状態、X 入力単語の埋め込み。Wアテンション係数Qw, Kw, Vw, FCクエリ、キー、ベクトルに対する重み行列。FC は全結合重み行列。⊕, ⊗⊕ ベクトル連結、⊗ 行列の乗算。corr列単位のソフトマックス（ドット積の全組み合わせの行列）。ドット積は、別形3では xi* xj、別形1では hi* sj、別形2では columni ( Kw* H )* column j ( Qw* S )、別形4では column i (Kw* X)* column j (Qw* X) である。別形5は全結合層を使って係数を決定する。別形が QKV の場合、ドット積は sqrt(d) で正規化される。ここで d は QKV 行列の高さである。

 利用 
アテンションを中心としたモデルとして Transformer が存在する。Transformerは同一層内に複数の独立した重み行列を持つ（Transformer#マルチヘッドアテンション）。

 参照項目 

 Transformerのスケール化内積アテンション
 - クエリ・キー・バリュー（QKV）のためのアテンション
 Attention Is All You Need - アテンションに基づく、トランスフォーマーとして知られる新しいディープラーニングアーキテクチャを発表した論文