アテンション (機械学習)
人工ニューラルネットワークにおけるアテンション(attention)は認知的な注意を模倣するように設計された手法である。注意機構(attention mechanism)とも呼ばれる。
アテンションは入力データのある部分を強化し他の部分を弱化する効果をもつ。その動機は、ネットワークが、データの小さくても重要な部分にもっと注意を払うべきということである。 データのどの部分が他の部分よりも重要であるかを文脈に依存できる柔軟性をもつ。これは実行時に固定されているべき標準的な重みとは対照的であり、実行時に変更可能な「ソフトウェイト」としての役割に由来する。
アテンションと類似する機構は、1990年代に以下の名前で提唱されている:
乗算モジュール(multiplicative modules)
シグマ・パイ・ユニット(sigma pi units)
アテンションの応用先として以下が挙げられる:
トランスフォーマー(Transformer)や長短期記憶(LSTM)での言語処理
パーシーバー(Perceiver)での多重モーダルデータ処理(音、画像、ビデオ、テキスト)
アテンションは次の役割を果たすモジュールとして設計されている:
seq2seq: 入力ベクトル列を出力ベクトル列へ変換する
長距離依存の考慮: インデックス i が離れた入出力を結びつける
任意長ベクトル列の変換: 推論ごとに異なる長さの入力列を処理する
高い並列処理能力: 学習・推論の高速化
例えば機械翻訳を考える。機械翻訳タスクでは単語の単純置換(日→英)では目的を達成できない。なぜなら日英で語順が異なるからである。すなわち入力単語ベクトル列を出力単語ベクトル列に変換する際、列を列へ変換する必要がある(seq2seq)。また列内の近い部分のみの参照では不十分なケースがある。例えば疑問文の日英翻訳において、文頭の "Do" (i=0) を生成するには日本語原文の文末「か?」(i=L) を参照する必要がある。すなわち長距離依存性を考慮できる必要がある。また文章長は一定でないため、任意長の入力を扱える必要がある。そして長いベクトル列を巨大なモデルで実務的に学習するには高い並列処理能力が求められる。
例えばフィードフォワードモジュールは時間方向の重みによってseq2seqに利用できるが、重みが一定数であるため任意長ベクトル列を扱うことができない。畳み込みモジュールは任意長のseq2seqに利用できるが、長距離依存性を扱うには巨大なカーネルか多くの層を必要とする。回帰モジュールは3つの要件を理論上は満たせるが、ステップごとの回帰の中で長期依存情報が失われることが実務的に知られている(参考: RNN#Copyingタスク)。
この要件は機械翻訳を含む自然言語処理に限らず、画像内の離れた位置にある対象を参照したいや、音高の時間的な変動を捉えたい音声合成など、幅広いタスクで求められていた。このような背景から「任意長の列を列に変換する際、各位置の入力を直接取り込むモジュール」として提唱・活用されているのがアテンション機構である。
アテンションは「入力ベクトル列のクエリ依存動的重みづけ和」に相当する演算である。
アテンションでは各入力ベクトル \boldsymbol{x}_k の重みづけ和を i 番目の出力ベクトル \boldsymbol{y}_i とする。このとき、重みは単なる固定値ではなく動的に計算される(ソフトウェイト)。動的な計算は、 i 番目の出力に紐づく情報を表現した関連ベクトル \boldsymbol{c}_i と取り込まれる入力ベクトル自身に基づく。情報の流れを表現する概念式としては以下に相当する:
\boldsymbol{y_i}
= \sum_k w_{ik} \boldsymbol{x}_k
= \sum_k f(\boldsymbol{c}_i, \boldsymbol{x}_k) \boldsymbol{x}_k
この式が表すように、アテンションでは各出力に対して関連ベクトルと入力ベクトルから重みを求め、その重みに基づいて全入力を取り込む。これにより入力列全体を各出力ベクトルへ直接取り込みつつ、重みの動的計算によって任意長のベクトル列を扱える。すなわち「任意長の列を列に変換する際、各位置の入力を直接取り込むモジュール」として機能している。
このアテンションは別の観点から捉え直すことができる。アテンションでは入力 \boldsymbol{x}_k をベースとして、足される値 \boldsymbol{v}_k(バリュー)とそれを要約した識別子 \boldsymbol{k}_k(キー)を用意している。さらに各出力に紐づいた関連情報をベースとして照会ベクトル \boldsymbol{q}_k(クエリ)を用意し、クエリとキーの一致度に基づいてバリューの重み=取り込む量を決定していると捉えられる。すなわち次の概念式に相当する:
\boldsymbol{y_i}
= Attention(\boldsymbol{q}_i, K, V)
= \sum_k g(\boldsymbol{q}_i, \boldsymbol{k}_k) \boldsymbol{v}_k
= \sum_k f(\boldsymbol{c}_i, \boldsymbol{x}_k) h(\boldsymbol{x}_k)
最初の概念式とほぼ同様の形である一方、入力をバリューへ変換したうえで和を取れる柔軟性が追加されている。
この概念を実際に機能する演算とするうえで、以下の具体化をおこなう。まず、w_{ik} の大きさに制約がないと無限長の入力列に対し出力ベクトルが発散してしまうため、ソフトウェイトは非負かつ出力ベクトルごとに総和1(\sum_k w_{ik} = 1)の制約が課される。この制約内でクエリとキーの一致度を測る関数(クエリ・キー機構、query-key mechanism)を具体的に定義するが、これには様々なバリエーションが存在する。ドット積 \boldsymbol{q}_i \cdot \boldsymbol{k}_k にソフトマックス関数を適用した形が代表例である。
英語からフランス語に翻訳する機械を構築するには、基本的なエンコーダ・デコーダに、アテンション単位(attention unit)を合体する(下図)。最も単純な例では、アテンション単位は回帰エンコーダの状態のドット積からなり、訓練の必要はない。実際には、アテンション単位は、クエリ・キー・バリュー(query-key-value)と呼ばれる3層の全結合型ニューラルネットワーク層で構成され、訓練が必要である。後述の「別形」の項を参照。
行列として見ると、アテンション・ウェイトは、ネットワークが文脈に応じてどのようにアテンションを調整するのかを示している。
このようなアテンションウェイトの考え方は、ニューラルネットワークが批判される「説明可能性」の問題を解決するものである。単語の順序に関係なく逐語訳(verbatim translation、逐次的な翻訳のこと)を行うネットワークは、このような観点で分析可能であれば、対角優位行列を持つことになる。一方、非対角優位であれば、アテンション機構がより微妙であることを示している。デコーダーを最初に通過したとき、94%のアテンションウェイトが最初の英単語 "I" にかかっているので、ネットワークは "je" という単語を提示する。デコーダの2回目の通過では、3番目の英単語 "you" に88%のアテンションウェイトがかかるので "t'" を提示する。最後の通過では、2番目の英単語 "love" に95%のアテンションウェイトがかかるので、"aime" を提示する。
ソフトウェイトを実装したアテンションには様々な変種が存在する。一例として以下が挙げられる:
加法アテンション(additive attention): 別名Bahdanau Attention
乗法的アテンション(multiplicative attention): 別名Luong Attention
自己アテンション(self-attention)
畳み込みニューラルネットワークの場合、アテンション機構は、それが作用する次元、すなわち空間アテンション、チャネルアテンション、またはその両方の組み合わせによって区別することもできる。
これらの別形は、エンコーダ側の入力を組み替えて、その効果を各ターゲット出力に再分配するものである。多くの場合、ドット積の相関風の行列が再重み付け係数を提供する(凡例を参照)。
アテンションを中心としたモデルとして Transformer が存在する。Transformerは同一層内に複数の独立した重み行列を持つ(Transformer#マルチヘッドアテンション)。
Perceiver - クエリ・キー・バリュー(QKV)のためのアテンション