nn-anatomy-transformer

レッスン指導案 — Transformer 版

教員・TA・自学者向けの授業設計ガイド。Lesson 1〜10 を どう組み合わせて何時間でどう運用するか の参考指針と、各 Lesson の 学習目標 / よくあるつまずき / 補足質問 をまとめる。

関連: design.md §9 (カリキュラム概要)、math-notes-transformer.md (数式リファレンス)、シミュレータ本体 (build/nn_sim_transformer.html)。


0. 教材としての位置づけ


1. 想定する授業設計

1.1 ミニマム構成 (90 分 1 コマ × 1 回)

「Transformer の forward を 1 周だけ通す」のがゴール。

時間 内容 使う Lesson
0:00〜0:15 イントロ + 座学: Self-Attention の概念、Q/K/V の役割 (口頭説明)
0:15〜0:30 シミュレータ起動、Embed タブで Lesson 1, 2 を流し見 Lesson 1, 2
0:30〜0:55 Q/K/V 観察 (Lesson 3, 4, 5)。bond の概念を導入 Lesson 3, 4, 5
0:55〜1:15 Attention Score → softmax → attention map (Lesson 6, 7) Lesson 6, 7
1:15〜1:30 Multi-Head の役割分担 (Lesson 8) Lesson 8

残差・LN・FFN (Lesson 9, 10) は宿題として個別観察を課す形になる。

1.2 標準構成 (90 分 × 3 回 = 270 分)

各回で 3〜4 Lesson を扱う。

テーマ 扱う Lesson 演習
1 入力表現と Q/K/V Lesson 1〜5 preset の dim 設計表を渡して、ある token の X 値を手で計算させる
2 Attention の計算 Lesson 6, 7, 8 Sample 切替で異なる文の attention map を比較、bond の立ち方を観察
3 残差・LN・FFN Lesson 9, 10 LayerNorm 前後の行の mean/std を手計算で求めさせ、シミュレータと突き合わせる

1.3 集中構成 (1 日ワークショップ、6〜7 時間)

各 Lesson に 30〜45 分かけて十分に観察・議論する。最後に「自分が hand-crafted の preset を変えたら attention/FFN がどう変わるか」のミニ課題で締める (preset 改変 → make build-preset && make inline-preset && make bundle で再ビルド)。


2. 各 Lesson の指導案

Lesson 1. Token Embedding を見る

Lesson 2. 位置エンコーディング (W_P) を見る

Lesson 3. Q (Query) projection を見る

Lesson 4. K (Key) projection を見る

Lesson 5. V (Value) projection を見る (identity の意義)

Lesson 6. Attention Score (Q · Kᵀ / √d_k)

Lesson 7. softmax と attention map

Lesson 8. Multi-Head — 役割分担と同時並行

Lesson 9. 残差接続 + LayerNorm

Lesson 10. FFN (検出器ニューロン) と 1 ブロック完成


3. 演習問題例

3.1 観察課題 (各 Lesson の中で 5 分程度)

3.2 計算課題 (持ち帰り 30〜60 分)

3.3 設計課題 (発展)


4. つまずきの種類別対処

症状 原因の典型 対処
「数値が一致しない」 端末の Forward 後にサンプル切替したが Lesson の sampleIdx と違う Lesson セレクタを再選択する。Sample を変えても Lesson 文脈は保たれるが、Lesson 文中の数値は preset で固定の sample に対するもの
「同じ Lesson でも数値が違って見える」 表示桁の問題。+0.020+0.019 のような微妙な差異は丸め Lesson 文では 3 桁丸めで書いている。シミュレータは toFixed(3) で表示するので一致する
「PE の cos(2/100^(1/8)) が思った値と違う」 dim 番号の偶奇取り違え。i = d/2 の整数除算 math-notes-transformer.md §1.2 を参照、d=2 (偶数) は sin、d=3 (奇数) は cos
「attention が確率なのに行の合計が 1 にならない」 違う head の同じ行を見ている。head 別に softmax 「[head 0]」「[head 1]」の表記を必ず確認
「FFN h13 が発火する条件がよく分からない」 入力の各 dim を見るだけでは判断できない、AND 検出器の閾値を理解する必要 b1 = -0.5 と W1 の +0.6 ずつから、両方の入力 dim が約 +0.83 以上のときに発火と計算で示す

5. 関連するドキュメントへのリンク