3.5 Transformerと注意機構
大事なところに注目する
この回で分かること
- 注意機構(アテンション)が「どこをどれだけ参考にするか」を重みで決めるしくみであることを説明できる
- クエリ・キー・バリューと、内積とソフトマックス関数による注意の重みを、小さな例で計算できる
- Transformer の特徴(離れたものどうしの関係を直接見る、計算量が大きい)と、自動運転での使われ方・注意点を説明できる
直感で理解する
交差点で右折しようとしている場面を考えます(日本のような左側通行の場合)。周りには、対向車、横断歩道を渡っている歩行者、路肩の駐車車両があります。人が運転するなら、「今、右折してよいか」を判断するために、関係の深いものほどよく見て、関係の薄いものはあまり気にしないでしょう。
注意機構 は、これと同じことを計算で行います。判断したい要素が、周りのすべての要素に「あなたは私の判断にどれだけ関係があるか」を問い合わせ、関係の深さに応じた重みを付けて情報を集めます。重みはデータから学ぶので、何に注目すべきかも学習で決まります。
3.3 の CNN は、小さなフィルタで近くの画素どうしの関係を積み上げていくので、画像の端と端のように離れたものの関係は、層をいくつも重ねてやっと見えてきます。注意機構なら、遠くの信号と停止線の手前の車のように 離れたものどうしの関係を1回で直接見られます。この注意機構を中心に組み立てたモデルが Transformer です。もともとは文章の翻訳のために作られましたが、今では画像・動画・センサのデータ、周りの車の動きの予測など、幅広く使われています。
数式で確かめる
① クエリ・キー・バリュー
注意機構では、入力を トークン(文章なら単語、画像なら小さな区画、場面なら1台1台の車や歩行者)に分け、それぞれから3種類のベクトルを作ります。
- クエリ q:何を探しているか(「右折の妨げになるものはどれか」)
- キー k:自分は何者か(「横断中の歩行者です」)
- バリュー v:実際に渡す中身(位置・速度などの情報)
これらは、トークンの特徴に学習した行列(3.1)を掛けて作ります。クエリとキーの向きがそろっているほど、内積(0.2)が大きくなり、「関係が深い」とみなされます。
② 注意の重みの計算
クエリと各キーの内積を \(\sqrt{d}\)(d はベクトルの長さ)で割り、ソフトマックス関数(2.4)で合計1の重みに直し、その重みでバリューを平均します。図の例を、2つの数からなるベクトル(d = 2)で計算してみます。自車のクエリを q = (1, 2)、キーを対向車 (2, 1)、歩行者 (1, 2)、駐車車両 (−1, 0) とします。
| 対向車 | 歩行者 | 駐車車両 | |
|---|---|---|---|
| 内積 q · k | 1×2 + 2×1 = 4 | 1×1 + 2×2 = 5 | 1×(−1) + 2×0 = −1 |
| ÷ √2 | 2.83 | 3.54 | −0.71 |
| ソフトマックス(重み) | 0.33 | 0.66 | 0.01 |
バリューを、ここでは「右折の妨げになる度合い」を表す1つの数(対向車 0.6、歩行者 0.9、駐車車両 0.1)とすると、出力は重み付きの平均で \(0.33 \times 0.6 + 0.66 \times 0.9 + 0.01 \times 0.1 \approx 0.79\) です。歩行者の情報を中心にまとめた「かなり妨げがある」という答えになります。
実際には、このような注意を何組も並べて(マルチヘッド)、距離・速度・種類など別々の関係を同時に見ます。注意機構は並び順を気にしないので、位置の情報をトークンに足しておきます。そのうえで「注意 → 全結合層」のまとまりを、残差接続(3.2)を使って何層も重ねたものが Transformer です。
③ 計算量:すべての組み合わせを見る
注意機構は、すべてのトークンの組を比べます。トークンが n 個なら、組は n² 個です。1920 × 1080 の画像を 16 × 16 画素の区画に分けると約8,160個のトークンになり、1つの層で約6,700万組を比べることになります。トークンが2倍になると、計算は4倍です。そのため、見る範囲を区切る、トークンをまとめて減らすなどの工夫が使われます。
自動運転との接点
- 使われている場所:カメラ画像の認識、複数のカメラの画像を上から見た地図(鳥瞰図)にまとめる処理、周りの車や歩行者どうしが影響し合う動きの予測、センサから操作までを1つのモデルで行う方式などで、Transformer が使われています。→ 4.6 モジュール型とEnd-to-End型、3.6 基盤モデルと生成AI
- 注意の重み ≠ 判断の理由:注意の重みは「ここを見た」ように見えるので、判断の説明として使いたくなります。しかし、重みが大きい所が本当に判断を決めたとは限らないことが研究で示されています。説明に使うときは慎重に扱います。→ 3.9 説明可能性(XAI)
- 「関係が薄い」と学んだものの危うさ:例では駐車車両の重みは 0.01 でしたが、駐車車両の陰から子どもが飛び出してくることもあります。学習データでめったに起きなかった関係は、重みが小さく学ばれがちです。一見関係の薄いものが重要になる場面を、試験で狙って確かめます。→ 5.6 シナリオベース検証
- 計算時間と大量のデータ:トークンの数の2乗で計算が増えるので、車の中の計算機で決められた時間内に終わるかの確認が要ります。また、Transformer は一般に大量の学習データを必要とします。
まとめ
- 注意機構は、クエリとキーの内積をソフトマックス関数で重みに直し、その重みでバリューを平均する。「どこをどれだけ参考にするか」を学習で決めるしくみ
- Transformer は注意機構を中心に層を重ねたモデルで、離れたものどうしの関係を直接見られる。文章・画像・場面の予測など幅広く使われる
- 計算量はトークン数の2乗で増える。注意の重みは判断の理由の説明とは限らず、「関係が薄い」と学んだものが重要になる場面にも注意する
確認クイズ
Q1. クエリ q = (1, 0)、キー k₁ = (2, 0)、k₂ = (0, 3) のとき、内積はそれぞれいくつ? √d で割るのを省いてソフトマックス関数に通すと、重みは?
内積は 2 と 0 です。重みは \(e^{2}/(e^{2} + e^{0}) \approx 0.88\) と約0.12。向きのそろった k₁ に注意が集まります。
Q2. 注意の重みが (0.7, 0.2, 0.1)、バリューが (10, 20, 30) のとき、出力は?
0.7 × 10 + 0.2 × 20 + 0.1 × 30 = 7 + 4 + 3 = 14 です。
Q3. トークンが1,000個のとき、注意機構が比べる組はいくつ? トークンが2,000個になると?
1,000 × 1,000 = 100万組、2,000個なら400万組で、4倍になります。
Q4. 例では駐車車両への注意の重みが 0.01 でした。駐車車両は右折の判断で無視してよい?
よいとは言えません。駐車車両の陰から歩行者が出てくることがあります。重みは学習データでよく見られた関係を反映したもので、めったに起きない危険な関係は小さく学ばれがちです。そうした場面を試験で確かめる必要があります。
もっと知りたい人へ
- 次の回:3.6 基盤モデルと生成AI
- 関連:0.2 数式の読み方(内積)、2.4 ロジスティック回帰(ソフトマックス関数)、3.3 CNNと画像認識
- 用語集:注意機構・クエリ・キー・バリュー、Transformer、トークン、ソフトマックス関数
- 解説動画:YouTube(約5分)(静止画のスライドと音声で要点を説明。英語版の記事には英語の動画があります)
- 参考文献
- A. Vaswani ほか, “Attention Is All You Need,” NeurIPS, 2017.
- A. Dosovitskiy ほか, “An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,” ICLR, 2021.
- S. Jain, B. C. Wallace, “Attention is not Explanation,” NAACL, 2019.