Re Reference AI

アーキテクチャ

Self-Attentionとは

自己注意機構

同一の入力系列内で各要素同士の関連度を計算し、系列全体の文脈を考慮した表現を得るAttentionの一形態

Transformer深層学習

ひとことで言うと

文章の中の単語同士がお互いにどれだけ関係あるかを計算する仕組み。

概要

Self-Attention(自己注意機構)とは、Attentionのうち、Query・Key・Valueの全てを同一の入力系列から生成し、系列内の各要素が他の全ての要素とどれだけ関連するかを計算する仕組み。 通常のAttentionが入力系列と出力系列など異なる系列間の関連度を計算するのに対し、Self-Attentionは同じ系列内の要素同士の関連度を計算する点が特徴。 これにより、文中の離れた位置にある単語同士の関係も、系列長によらず直接計算でき、Transformerアーキテクチャの中核的な構成要素として採用されている。

背景

RNNでは、文中の離れた位置にある単語同士の関係を捉えるために、情報を逐次的に伝播させる必要があり、系列が長くなるほど関連は薄れやすいという課題があった。 Self-Attentionは、系列内の任意の2つの要素間の関連度を、位置の距離によらず直接計算する手法として導入された。

歴史

2017年: Vaswaniらが論文「Attention Is All You Need」において、再帰構造を用いずSelf-Attentionのみでモデルを構成するTransformerを提案し、Self-Attentionという用語と手法が広く普及した。

アーキテクチャ

入力系列の各要素の埋め込みベクトルに、学習可能な重み行列を掛けてQuery・Key・Valueの3種類のベクトルを生成する。 各要素のQueryと全要素のKeyの内積を取り、次元数の平方根で割ってスケーリングした後にソフトマックスを適用することで、他要素それぞれへの注意の重み(関連度)を求める。 この重みでValueを加重平均した結果が、その要素の新しい表現になる(Scaled Dot-Product Attention)。 Transformerでは、この計算を複数の異なる重み行列で並列に行うMulti-Head Attentionとして用いることで、多様な観点の関連性を同時に捉える。

ワークフロー

入力埋め込みからQuery・Key・Valueを線形変換で生成 → QueryとKeyの内積をスケーリングしソフトマックスで注意の重みを計算 → 重みでValueを加重平均し出力を得る → 複数ヘッド分の出力を連結し線形変換して最終出力とする。

コード例

PyTorchでScaled Dot-Product Attentionを計算する

import torch
import torch.nn.functional as F

# q, k, v: (バッチサイズ, 系列長, 次元数)
attn_output = F.scaled_dot_product_attention(q, k, v)

利点

  • 系列内の任意の位置関係にある要素同士の関連度を、距離によらず直接計算できる
  • 各要素の計算を並列に行えるため、RNNと比べて学習を高速化しやすい
  • 注意の重みを可視化することで、モデルがどの要素に着目したかをある程度解釈できる

欠点

  • 系列長の2乗に比例して計算量・メモリ使用量が増加する
  • 位置情報を明示的には持たないため、別途位置エンコーディングを加える必要がある
  • 非常に長い系列では計算コストが実用上の制約になり、Sliding Window AttentionやFlash Attention等の工夫が必要になる

比較

  • AttentionSelf-Attentionは、Query・Key・Valueを全て同一系列から生成する、Attentionの特殊な形態
  • TransformerTransformerはSelf-Attentionを中核の構成要素として採用したアーキテクチャ

関連用語

AttentionTransformerRoPEFlashAttentionGQAMQASliding Window Attention

よくある質問

Self-AttentionとAttentionの違いは?

通常のAttentionは異なる2つの系列間(例: Decoderの出力とEncoderの出力)の関連度を計算するのに対し、Self-Attentionは同一の系列内で要素同士の関連度を計算する。

Self-Attentionの計算量が2乗に比例するとはどういうこと?

系列内の全ての要素の組み合わせについて関連度を計算するため、系列長をNとすると計算量・メモリ使用量がおよそN²のオーダーで増加する。

参考文献

関連する年表

Transformerの歴史

自己注意機構(Self-Attention)のみで構成されるTransformerアーキテクチャが2017年に登場して以降、自然言語処理から画像・音声まで広がっていった変遷をたどる。

アーキテクチャ7件のイベント / 2017 - 2023

関連Zenn記事