ブラウザで開くだけで動く、Transformer の forward 動作を 1 セルずつ追える教材シミュレータ。日本語の短い例文を入力に、Token Embedding → Multi-Head Attention → 残差接続 → LayerNorm → FFN → block 出力までの すべての中間行列 を行列ヒートマップで観察できる。各セルをクリックすると [段1] 一般形 → [段2] 当てはめ → [段3] 数値 の 3 段板書でその数値が「どう作られたか」をその場で展開する。
姉妹プロジェクト nn-anatomy (MLP 版) の哲学を Transformer に拡張したもので、大学情報系学部の 3〜4 年次以上 (深層学習・NLP の応用科目) の教材を想定している。
セットアップ不要。build/nn_sim_transformer.html をブラウザで開くだけ。
# リポジトリをクローンしたら、
open build/nn_sim_transformer.html # macOS
xdg-open build/nn_sim_transformer.html # Linux
start build\nn_sim_transformer.html # Windows
CDN や外部依存は無い (単一 HTML、~180 KB)。file:// 経由でもオフラインで全機能が動く。
1 ブロック分の Transformer forward 全工程 が観察可能。本シミュレータの規模は次のとおり:
d_ff = 32: FFN 中間層のニューロン数
Q[T2 美しい, h0.d0] = 0.977 × +3.91 + … = +3.83)| Lesson | テーマ | 観察対象タブ |
|---|---|---|
| 1 | Token Embedding を見る (W_E[tokens] が主役) | Embed |
| 2 | 位置エンコーディング (W_P) を見る | Embed |
| 3 | Q (Query) projection を見る | Q/K/V |
| 4 | K (Key) projection を見る | Q/K/V |
| 5 | V (Value) projection を見る (identity の意義) | Q/K/V |
| 6 | Attention Score (Q·K^T / √d_k) | Attn |
| 7 | softmax と attention map | Attn |
| 8 | Multi-Head — 役割分担と同時並行 | Attn |
| 9 | 残差接続 + LayerNorm | Out |
| 10 | FFN (検出器ニューロン) と 1 ブロック完成 | FFN |
各 Lesson は 目的説明 (hint) と 3 つの観察タスク (checks) で構成。Lesson カードで「何を見るか / 何が見えるはずか / どう解釈するか」が文章で示され、ユーザーは中央タブで実際の値を確認しながら読み進められる。
| ID | 単語 | 種別 |
|---|---|---|
| 0-2 | これ / それ / 私 | 指示詞・代名詞 |
| 3-6 | 猫 / 花 / 本 / 小説 | 名詞 |
| 7-9 | 大きい / 美しい / 人気 | 形容詞 |
| 10-11 | 読む / 好き | 述語 |
| 12-14 | は / が / を | 助詞 |
| 15 | です | コピュラ |
収録例文 (各文ちょうど 5 トークン): 「これ は 美しい 花 です」「私 は 猫 が 好き」「私 は 本 を 読む」など 8 文。Lesson 内では「形容詞 → 名詞」「指示詞 → 名詞」「述語 → 名詞」のような bond パターンが attention で立つ様子を実際の数値で観察する。
tests/py/test_lesson_values.py) で自動検証される| ファイル | 内容 |
|---|---|
docs/design.md |
全機能仕様 (v0.4)、数式、preset 構築指針、多ブロック化の検討案 |
docs/math-notes-transformer.md |
数式リファレンス (LayerNorm / GELU / Scaled Dot-Product Attention / FFN 検出器設計、block 全体の流れ、参考文献) |
docs/lesson-plans-transformer.md |
教員向け指導案 (授業設計 3 パターン、各 Lesson の学習目標 / つまずき / 補足質問、演習問題例) |
docs/implementation-notes.md |
実装ログ (フェーズごとの完了内容と決定事項) |
docs/initial-readme.md |
プロジェクト初期 (P0 設計フェーズ) の README をアーカイブ |
# Python (numpy + pytest) と Node 20+ を準備
uv sync
node --version
# テスト一式 (JS 50 + Python 62 件、~1 秒)
make test
# numpy 参照との fixture を再生成
make fixtures
# preset を再構築 (hand-crafted) → presets/japanese-mini-v1.json
make build-preset
# 単一 HTML を再ビルド → build/nn_sim_transformer.html
make inline-preset
make bundle
make help # 利用可能なタスク一覧
詳細・実装方針は docs/design.md を参照。