3-7の系列モデルは、それまでのすべてを1つの隠れ状態に詰め込み、1マスずつ進んだ。アテンションは発想を変える。必要になるたびに前のすべての位置をもう一度見直し、関係のある位置により多くの注意を向ける。クエリ(Q)・キー(K)・バリュー(V)の数字を手で追い、この部品を積み重ねたトランスフォーマーが今日の言語モデルの骨格になった理由と、そのコストまでを見る。
エンコーダ–デコーダRNNは文全体を固定長のベクトル1つに詰め込み、位置を1つずつ順番に処理する。文が長くなると、2つのことが問題になる。
韓国語の「초파리가 사과를 먹었다」(ハエがリンゴを食べた)を「The fly ate the apple」に訳す。英語の単語を1つ作るたびに、韓国語の単語に注意を振り分ける。線が太いほど注意が大きい。
韓国語は「초파리가(ハエが)· 사과를(リンゴを)· 먹었다(食べた)」、英語は「The fly · ate · the apple」の順である。動詞の位置が違う。そのため「ate」を作るときは、末尾の「먹었다」を大きく見る必要がある。この図の注意の値は説明のために決めた数字である。実際の翻訳モデルはこうした対応を学習によって自ら見つけ、Bahdanauらは学習された注意が人間の直感とよく合うと報告した [R1]。注意はすべて0〜1で、合計は1である(ソフトマックス)。
アテンション(Q, K, V) = softmax(Q·Kᵀ / √dk) · VVaswaniら, 2017
| 記号 | 図書館では | ニューラルネットワークでは |
|---|---|---|
| Q クエリ | 探しているものを書いたメモ | 今の位置が「何を必要としているか」を表すベクトル。入力 × WQ |
| K キー | 本ごとに付いた索引カード | 各位置が「自分はこういう情報だ」を表すベクトル。入力 × WK |
| V バリュー | 本の実際の内容 | 各位置が実際に渡す情報。入力 × WV |
| Q·K | メモとカードがどれだけ合うか | 2つのベクトルの内積。向きが似ているほど大きい |
| ÷ √dk | — | ベクトルが長くなるほど内積が大きくなり、ソフトマックスが1つの位置だけに偏るのを防ぐ [R2] |
| softmax | 読む時間を本ごとに配分する | スコアを合計1の注意に変える |
| × V | 読んだ時間に応じて内容を混ぜてまとめる | 注意を重みとしてバリューを足し合わせる。これが出力である |
セクション3では質問と本が別々だった。セルフアテンションでは、文のすべての単語がクエリであり、キーであり、バリューでもある。単語ごとに、他のすべての単語へ注意を振り分ける。
単語ベクトルは[動物, 食べ物, 動作, 指示語]の4マスで手で決めた。クエリ変換WQは「指示語は食べ物を探し、動作は動物を探す」となるように決めた。キー・バリューの変換はそのままにしておく。実際のトランスフォーマーは単語ベクトルもWQ·WK·WVもすべて学習で決め、幅も数百マスある。計算式はこの例とまったく同じである。コード1が同じ数字を出す。
1つの文には関係が何重にもある。「誰が食べたか」と「何を食べたか」は別の質問である。ヘッドごとに異なるWQ·WK·WVを使って別の関係を見て、結果をつなぎ合わせる。
アテンションはすべての位置を一度に比較する。そのため単語の順序を入れ替えても、各単語の結果はまったく同じになる。順序を伝えるには、位置ごとに異なる「位置エンコーディング」を単語ベクトルに足す。
原論文は位置posの偶数番目のマスにsin(pos / 100002i/d)、奇数番目のマスにcos(…)を入れた [R2]。前のほうのマスは速く、後ろのほうのマスはゆっくり波打つので、位置ごとに異なる模様ができる。時計の秒針・分針・時針を合わせて見ると時刻が1つに決まるのと同じである。位置エンコーディングを学習で決める方法も広く使われている。コード2の小さなトランスフォーマーは、学習する位置埋め込みを使った。
トランスフォーマーのブロック1つは、マルチヘッドアテンションとフィードフォワードネットワーク(3-2のMLP)でできている。それぞれに入力をそのまま足す近道(残差接続)と正規化を付け、このブロックを何層も積み重ねる。
同じブロックでも「どの位置がどの位置を見られるか」(マスク)を変えると、用途が変わる。
トランスフォーマーが広く使われるようになった理由は3つにまとめられる。それに見合うコストもある。最大のコストは、長さの2乗で増える注意の計算である。
3-7のコード2と同じ課題(すべての位置が±1、正解は最初の位置)と同じ学習設定(Adam 0.005、30エポック、学習2,000個・テスト1,000個、シード2個)。トランスフォーマーはセルフアテンションブロック1つ(幅16、ヘッド2個)と、学習する位置埋め込みを使った。「最初の位置への注意」は、すべての位置が最初の位置に向けた注意の平均である。
この回はトランスフォーマーの構造までを扱う。その構造で文章や画像を生み出す生成モデル(大規模言語モデルの事前学習、指示追従学習、拡散モデルなど)は、このシリーズの範囲外である。次の回(3-4 音声、3-6 時系列・株価、3-5 テキスト)は、データを数字に変える過程に集中する。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
図書館の例、5単語のセルフアテンション、2つのヘッド、順序の入れ替えと位置エンコーディングを同じ数字で計算する。自分のデータに置き換えるには、BOOK_K·BOOK_V·QUERIESまたは単語ベクトルXを変える。
3-7でLSTMが長い系列で失敗した課題を、セルフアテンションブロック1つだけのトランスフォーマーで解き直す。学習したトランスフォーマーが、正解のある最初の位置にどれだけ注意を向けるかも測る。セクション9の下の表は、この出力からそのまま作られる。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトのあとに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明らかにする。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。ショウジョウバエ・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | ショウジョウバエ・脳のたとえ | たとえが外れるところ |
|---|---|---|---|
| アテンション | 試験勉強のとき、重要なところに蛍光ペンを引く | 部分的 人間の選択的注意(騒がしい場所で1つの声に集中する) | 脳の注意は感覚・意図・疲労などが絡み合った現象である。モデルのアテンションは、内積とソフトマックスで決めた加重平均にすぎない |
| Q·K·V | 図書館の質問メモ・索引カード・本の内容 | なし | 図書館では本を1冊選んでくるが、アテンションはすべての本を割合に応じて混ぜる |
| ソフトマックス注意 | 読む時間を本ごとに配分する | なし | 時間はどう分けても使い切るが、注意0.01の位置も計算は漏れなく行う(だからn²かかる) |
| マルチヘッド | 同じ文書を複数の編集者が別の観点で読む | なし | ヘッドの「観点」は人が決めるものではない。学習後に解釈してみると、はっきりした役割が見えないヘッドも多い |
| 位置エンコーディング | 時計の秒針・分針・時針を合わせて見ると時刻が決まる | なし | 時計は1日たてば元に戻るが、位置エンコーディングは学習した長さの範囲内でしか慣れていない |
| 残差接続 | 直した原稿の横に、元の原稿をいつも一緒に貼っておく | なし | 元の原稿を「そのまま足す」点が核心である。直した量が小さければ、元の原稿がほぼそのまま次の層へ行く |
| マスク(GPT型) | 解答用紙を隠し、前の問題だけを見て次の問題を解く | なし | 学習時はすべての位置を一度に計算する。隠すのは「見られる範囲」だけである |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図の参考資料
講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 3-7を終えた大学生・社会人。言語モデルが「どんな部品でできているか」を知りたい実務者 |
|---|---|
| 前提知識 | ベクトルの内積(同じ位置どうしを掛けて足す)、3-2のソフトマックスとMLP、3-7のエンコーダ–デコーダ |
| 学習目標 | ① アテンションの式softmax(QKᵀ/√d_k)Vを数字で計算する ② セルフアテンション・マルチヘッド・位置エンコーディングがそれぞれなぜ必要かを説明する ③ トランスフォーマーが基盤になった理由とn²のコストをあわせて説明する |
| 所要時間の目安 | 読む45〜55分 · アニメーション実演25分 · Colab実習30分(コード1 10分、コード2 実行8分 + 解釈12分) |
導入5分(セクション1 ボトルネック)→ セクション2・3 図書館15分 → セクション4・5 10分 → セクション6 順序の入れ替え10分 → セクション9 n²とコード2の結果5分 → 確認問題5分。
セクション1・3 15分 → セクション8 3つの構造を業務事例(分類・要約・翻訳)に結びつける20分 → セクション9 コスト計算(自社の文書の長さで)15分 → コード2の実行・解釈25分 → プロンプトカード15分。
入門者はセクション1・2・3・9のみ。中級者にはセクション3の結果ベクトルを手で計算させてからコード1と照合させ、セクション7の4d² + 4dを自分で導出させる。
| セクション | 立ち止まって投げかける質問 | 操作のコツ |
|---|---|---|
| 1 残った問題 | 「40単語の文を8マスのベクトルに詰めると、1単語あたり何マスになるか?」 | 5 → 40単語に変えて数字の変化を見る |
| 2 アテンション | 「ateを作るとき、なぜ末尾の単語を見るのか?」 | 「ate」ボタンで止める |
| 3 Q·K·V | 「注意が一番大きい本だけを持ってくればよいのでは?」 | 「両方知りたい」で結果が[5.5, 5.5]に混ざるのを見る |
| 4 セルフアテンション | 「『それは』は何を指すのか? モデルはどうやってわかったのか?」 | それは → 甘かった の順に押して、手で決めた規則の限界も見る |
| 5 マルチヘッド | 「ヘッドを8個に増やすと、パラメータは8倍になるか?」 | モデル幅512でパラメータの数を確認する |
| 6 位置情報 | 「順序を入れ替えても結果が同じなら、何が問題か?」 | 位置エンコーディングなし → 入れ替えた順序 → 足す の順に押す |
| 7 ブロック | 「ブロックのパラメータの大半はアテンションか、フィードフォワードか?」 | 基本形で「フィードフォワードの割合」を読む |
| 8 エンコーダ・デコーダ | 「GPT型はなぜ未来の位置を隠さなければならないのか?」 | デコーダのみを押して、マスクの×のマスを指し示す |
| 9 基盤と限界 | 「文書の長さが2倍になると、注意の計算は何倍になるか?」 | 4,096 → 32,768に変えてメモリを比較し、下の実験表へ進む |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| アテンションは最も重要な単語を1つ選ぶ | すべての単語を割合に応じて混ぜる。注意が小さい単語も結果に入る | セクション3「両方知りたい」 |
| トランスフォーマーは順序をひとりでに知っている | 位置エンコーディングがなければ、順序を入れ替えても結果は同じである | セクション6 |
| ヘッドごとに人が役割を決めてやる | 役割は学習によって生まれる。このページの2つのヘッドは説明のために手で決めた | セクション5とその下の説明 |
| トランスフォーマーはRNNよりあらゆる面で優れている | 遠い位置のつながりと並列計算に強いが、長さの2乗のコストがかかり、小さなデータでは不利なことがある | セクション9 |
| 注意の図はモデルが判断した理由である | どこを見て計算したかにすぎず、判断が正しい理由を保証しない | セクション4の「甘かった」 |
q·k = 2×2 + 0.4×0 = 4。4 / √2 ≈ 2.828。セクション3の本Aのスコアと同じである。
注意 ≈ [0.238, 0.238, 0.525]。結果 = 0.238×[10,0] + 0.238×[0,10] + 0.525×[6,6] ≈ [5.53, 5.53]。コード1の出力は[5.525, 5.525]である。
まったく同じになる。各単語の出力は「他のすべての単語との比較」だけで決まり、比較対象の集合は順序に関係なく同じだからである。コード1では差は1e-16(計算誤差のレベル)だった。
W_Q·W_K·W_V·W_Oの4つがそれぞれ512 × 512、バイアスが512個ずつ:4 × 262,144 + 4 × 512 = 1,050,624個。ヘッド数を変えてもヘッド幅が小さくなるだけで、行列の大きさは同じなので変わらない。
4倍。(2n)² = 4n²。4,096² = 16,777,216個から8,192² = 67,108,864個になる。
コード1で√d_kで割らないと、図書館の例の注意がどう変わるかを計算する。ベクトルを10倍に大きくしたとき、割り算の効果がどう大きくなるかを2文で説明する。
コード2でトランスフォーマーの位置埋め込み(AddPosition)を外して学習し直す。結果と「最初の位置への注意」がどう変わるかをシード3個以上で報告し、セクション6と結びつけて理由を書く。
| 入門者 | セクション5・7は飛ばしても流れは途切れない。セクション3の図書館の例1つだけを確実に手で計算してみる |
|---|---|
| 発展 | セクション9のn²のコストを減らす方法(区間に分けて見る、低次元近似など)を調べて発表させる。調べた論文は原文で確認する |
| さらに学ぶ | Sangsun Ahn『ビジネスのためのデータサイエンス』講義案(データサイエンス全般) · STEP [K-デジタル] 人工知能 自然言語処理(3-5・3-8と連動) · STEP [K-デジタル] フィンテックデータ分析の基礎(3-6と連動) |
| 講師用資料 | 確認問題の採点基準と課題の解答例は教育者用解答ページ(3-8)で見られる |
「3-8 アテンションとトランスフォーマー」の回を最後まで読みました。研究室のメンバーがひとことずつまとめます。