Transformer アテンション基礎シミュレーター 戻る
機械学習

Transformer アテンション基礎シミュレーター

Transformer の心臓部であるスケール付きドット積アテンションを、3 つのトークンで体感するツールです。各トークンの方向ベクトルとクエリ、温度(スケール)を変えると、ドット積スコア・softmax の注目重み・出力ベクトル・注意エントロピーがリアルタイムで変化し、「注意がどう決まるか」を直感的に理解できます。

パラメータ設定
トークン1の方向 θ₁
°
key₁=value₁ の向き(2次元の単位ベクトル)
トークン2の方向 θ₂
°
key₂=value₂ の向き(2次元の単位ベクトル)
トークン3の方向 θ₃
°
key₃=value₃ の向き(2次元の単位ベクトル)
クエリ(注意を発する側)
選んだトークンの埋め込みをクエリ Q に使う
温度(スケール)τ
√d_k スケーリング相当。小さいほど注意が鋭い
計算結果
注目重み w₁
注目重み w₂
注目重み w₃
出力ベクトル角度 (°)
最大注目トークン
注目エントロピー
アテンション可視化 — クエリと3トークン

単位円上の矢印が3トークンのキー方向。クエリトークンは強調表示され、クエリから各トークンへの線の太さ・濃さが注目重み w_i を表します。橙色の矢印が value の加重和(出力ベクトル)です。

注目重みの分布
注目重み vs 温度 τ
理論・主要公式

$$\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V$$

スケール付きドット積アテンション。クエリ Q と各キー K のドット積でスコアを作り、√d_k で割って softmax で重みに正規化し、その重みで value V を加重平均する。

$$w_i=\frac{\exp(s_i/\tau)}{\sum_j \exp(s_j/\tau)},\quad s_i=Q\cdot K_i$$

注目重み w_i と生スコア s_i。τ は温度(スケール)。単位ベクトルなら s_i=cos(θ_query−θ_i) となり、向きが近いトークンほど高スコア。

$$H=-\sum_i w_i\ln w_i,\qquad \mathbf{o}=\sum_i w_i\,\mathbf{v}_i$$

注意エントロピー H(0=完全集中、ln3≈1.099=均一)と出力ベクトル o。√d_k スケーリングは softmax を感度の高い範囲に保ち、勾配消失を防ぐ。

アテンション機構とは

🙋
最近よく聞く「Transformer」の「アテンション(注意機構)」って、結局なにをやっているんですか?言葉だけだとイメージが湧かなくて…。
🎓
ざっくり言うと「文の中で、いまの単語がどの単語に注目すべきかを重み付けで決める仕組み」だね。例えば「彼はリンゴを食べた、それは赤かった」という文で「それ」を処理するとき、「リンゴ」に強く注目できれば意味がつながる。アテンションは、この「どこをどれだけ見るか」を数値(注目重み)で計算するんだ。左のツールでは、トークンを3つの矢印にして、その重みがどう決まるかを見られるようにしてある。
🙋
なるほど。でも「重み」ってどうやって決まるんですか?コンピュータが勝手に「ここが大事」と分かるわけじゃないですよね。
🎓
いい質問だ。鍵は「クエリ」と「キー」のドット積(内積)だよ。各トークンは方向を持つベクトルで表される。注意を発する側のクエリと、各トークンのキーの内積を取ると、向きが近いほど大きい値が出る。これが「生のスコア」。ツールで全トークンを同じ向きに揃えると、スコアが全部 1 になって重みが均等になるのが分かるはずだ。逆にクエリと正反対のトークンはスコアがマイナスになって、ほとんど無視される。
🙋
スコアが出たあとはどうするんですか?そのまま使うわけじゃなさそうですね。
🎓
そう、スコアはまだ「重み」じゃない。softmax という関数に通して、全部足すと 1 になる確率のような値に変換する。これが注目重み w だ。さらにその前に「温度 τ」で割る。τ を小さくするとスコアの差が強調されて、一番似ているトークン1つにほぼ全部の重みが集まる「鋭い注意」になる。τ を大きくすると差がならされて、3トークンに均等に近づく「ぼやけた注意」になる。ツールの温度スライダーを動かして、棒グラフの形が変わるのを見てみて。
🙋
温度のスライダーの説明に「√d_k 相当」と書いてありました。あの平方根は何のためにあるんですか?
🎓
実務で超重要なポイントだ。本物の Transformer では、ベクトルの次元 d_k が 64 とか 128 と大きい。次元が大きいとドット積の値もどんどん大きくなって、softmax に入れると 0 か 1 にべったり張り付いてしまう。そうなると勾配がほぼゼロになって学習が止まるんだ。だからドット積を √d_k で割って、スコアの大きさを手頃な範囲に戻している。このツールの「温度」は、まさにその割り算の係数を手で動かしているのと同じだよ。
🙋
最後に出てくる「出力ベクトル」と「注意エントロピー」は何を意味しているんですか?
🎓
出力ベクトルは「注目重みで value を混ぜた結果」だ。重みが大きいトークンの方向に引っ張られた、加重平均のベクトルになる。注意エントロピーは重みの散らばり具合の指標で、1トークンに集中していると 0、3トークンに均等だと最大の ln3≈1.10。実際の Transformer 解析でも、ヘッドごとにエントロピーを測って「狭く見るヘッド」「広く平均するヘッド」を分類したりする。ツールで温度を上げ下げすると、エントロピーと出力の方向が連動して動くのが分かるよ。

よくある質問

スケール付きドット積アテンションは Transformer の中心となる演算で、Attention(Q,K,V)=softmax(QKᵀ/√d_k)·V で表されます。クエリ Q と各キー K のドット積で「どのトークンにどれだけ注目するか」のスコアを作り、√d_k で割ってから softmax で 0〜1 の重みに正規化し、その重みで value V を加重平均します。本ツールは 2 次元の単位ベクトルを 3 つ使い、この一連の流れを目で追えるようにしたものです。
次元 d_k が大きいと、クエリとキーのドット積は分散が d_k に比例して大きくなり、softmax に入る値が極端に大きく/小さくなります。すると softmax がほぼ 0 か 1 の飽和領域に入り、勾配が消失して学習が進みません。ドット積を √d_k で割るとスコアの分散がほぼ 1 に保たれ、softmax が感度の高い範囲で働くため、勾配消失を防げます。本ツールの「温度」スライダーはこのスケーリング係数の役割を担い、小さいほど注意が鋭く、大きいほど均一になります。
注意エントロピーは注目重みの分布 w の散らばり具合を表す指標で、H = -Σ w_i·ln(w_i) で計算します。1 つのトークンに重みが集中していると H は 0 に近づき(鋭い注意)、3 トークンに均等(各 1/3)に分かれると H は ln(3)≈1.0986 で最大になります(ぼやけた注意)。温度を下げると H は小さく、上げると大きくなります。実際の Transformer 解析でも、ヘッドごとのエントロピーを見て「局所的に見るヘッド」「広く平均するヘッド」を分類することがあります。
クエリ Q は「いま何を探しているか」を表すベクトル、キー K は「各トークンが何を提供できるか」を表す見出し、バリュー V は実際に取り出される中身です。Q と K のドット積で関連度(注目スコア)を測り、その重みで V を混ぜて出力を作ります。図書館に例えると、Q は検索キーワード、K は本の背表紙のラベル、V は本の中身です。本ツールでは簡単のため key と value を同じ単位ベクトルにしていますが、実際の Transformer では Q・K・V はそれぞれ別の重み行列で埋め込みから線形変換されます。

実世界での応用

大規模言語モデル(LLM):GPT や Claude のような対話 AI は、何層もの Transformer ブロックを積み重ねて作られています。各層の自己注意(self-attention)が「文中のどの単語どうしを結びつけるか」を学習し、代名詞の指す先や、離れた語の係り受けを捉えます。本ツールの「クエリが最も向きの近いトークンに注目する」という挙動は、巨大なモデルでも本質的に同じです。

機械翻訳と要約:アテンションはもともと、ニューラル機械翻訳で「訳出中の単語が原文のどこに対応するか」を揃えるために生まれました。翻訳のアテンション重みを可視化すると、原文と訳文の単語がほぼ対角線上に並ぶ「アライメント」が見えます。要約モデルでも、出力文が入力のどの部分を根拠にしているかをアテンションでたどれます。

画像認識(Vision Transformer):画像をパッチに分割してトークンとして扱う Vision Transformer では、アテンションが「画像のどの領域どうしが関連するか」を学習します。注目重みのヒートマップを見ると、物体の輪郭や意味的にまとまった領域が浮かび上がり、CNN とは異なる広域の文脈統合ができていることが分かります。

モデル解釈と可視化ツール:研究や実務では BertViz のようなツールでアテンション重みを可視化し、モデルが何を根拠に予測しているかを調べます。本シミュレーターはその最小単位 ―― 1 つのクエリと数個のキーの間でスコアと softmax がどう動くか ―― を切り出したもので、可視化結果を読み解く前段の直感を養うのに役立ちます。

よくある誤解と注意点

まず大きな誤解が、「アテンション重みは、モデルの判断根拠そのものを示している」という思い込みです。注目重みが高いトークンは確かに出力へ影響しやすいですが、重み付けされる value の中身や、後続層での非線形変換まで含めて最終出力が決まります。「重みが高い=そこが理由」と短絡すると説明を誤ります。アテンションは解釈の手がかりではあっても、因果的な説明とイコールではありません。可視化はあくまで仮説生成のツールとして扱ってください。

次に、「温度(スケール)は小さいほど良い」という誤解です。温度を下げると注意は鋭くなり、最も関連するトークン1つに重みが集中します。一見望ましく見えますが、鋭すぎる注意は softmax が飽和して勾配が消え、学習が進まなくなります。また 1 トークンしか見ないと、複数の手がかりを統合する能力が失われます。本物の Transformer が √d_k という「ほどほどのスケール」を使うのは、鋭さと滑らかさのバランスを取るためです。本ツールでも温度を極端に小さく・大きくして、両極端の弊害を確かめてみてください。

最後に、「このツールの 2 次元・3 トークンが本物の Transformer と同じ」だと思わないことです。実際のモデルでは埋め込み次元は数百、トークン数は数千、さらに複数のアテンションヘッドが並列に走り、Q・K・V は別々の学習済み重み行列で作られます。本ツールは key=value を同じ単位ベクトルに固定した最小モデルで、あくまで「ドット積→スケール→softmax→加重和」という骨格を体感するためのものです。骨格を掴んだら、多次元・多ヘッド・位置符号化といった実モデルの要素へ進んでください。

使い方ガイド

  1. 3つのトークン(Token1~Token3)の方向ベクトル角度を0~360°の範囲で設定します。スライダーth1Num、th2Num、th3Numを調整してください
  2. 温度パラメータtempNumを0.1~2.0の範囲で変更し、softmax分布の集中度を制御します。温度が低いほど最大値へ集中、高いほど均等分布に近づきます
  3. シミュレータが自動計算する注目重み(w₁、w₂、w₃)、出力ベクトル角度、注目エントロピーをリアルタイムで観測して、アテンション機構の動作を理解します

具体的な計算例

Token1=0°、Token2=45°、Token3=90°、温度T=1.0で実行した場合:スケール付きドット積により3トークン間の類似度(cosine値)が計算され、softmax関数で正規化されます。例えば類似度が[0.8, 0.5, 0.3]の場合、exp(score/T)=[2.23, 1.65, 1.35]となり、正規化後の注目重み≈[0.45, 0.33, 0.22]を得ます。この重みで各トークン表現を加重平均すると、出力ベクトル角度は約38°になります。温度をT=0.3に下げると重み分布が[0.68, 0.24, 0.08]へ集中し、最大注目トークンがToken1へ強く偏ります。注目エントロピーも2.97 bitsから1.45 bitsへ低下し、選択性が強化されます

実務での注意点

  1. トークン角度が接近する場合(例:Token1=30°、Token2=35°)、ドット積の値が高くなり、温度の影響が顕著になります。低温ではToken1に98%以上の重みが集中し、情報喪失リスクが生じます
  2. 温度T=0.1(超低温)では数値的不安定性が発生する可能性があるため、実装時はT≥0.2推奨です
  3. 多層化Transformer(BERT、GPT系モデル)では各層でこの計算が繰り返されるため、温度設定はモデル全体の多様性制御に影響します。推論時はT=0.5~1.5、創作生成ではT=0.7~1.2が業界標準です
  4. 注目エントロピーが3.0 bits以上の場合、複数トークンへの注意が分散し、特定パターン認識に不利です。機械翻訳タスクではエントロピー1.5~2.5が最適領域です