本シミュレータに同梱している Lesson1 〜 Lesson8 を、教室での進行に 沿って詳しく展開したノート。各レッスンは以下の形で書く:
すべて「同じ seed + 同じ操作」で再現可能になるように設計してある
(設計書 §8 / §9)。板書用の数式は math-notes.md を
参照。
Lesson セレクタから Lesson を選ぶと、sizes / activation / loss / lr / dataset / seed / initScheme が 全部一度に上書き され、Reset が走る。学生が触った LR を元に戻したいときは Reset to Lesson ボタンで一発復帰できる。seed の右に「seed: 123」というバッジがある。教室で投影したときに 全員が同じ絵を見る根拠 はこの seed が同じだから、という点を最初に 1 回伝える。x=0.0 を選んで Forward。$z=0+b=b$、$a=z$ (linear) の 2 行の展開を右パネルで読む。x=1.0 に切り替えて Forward。$z = w \cdot 1 + b$ になっているのが [段3] の数値で分かる。Backward を押し、出力ノードをクリック。$\delta = \partial L/\partial a \cdot \varphi’(z) = (\hat{y} - y) \cdot 1$ の板書が出る。Forward を x=-2.0, -1.0, 0.0, 1.0, 2.0 と順に押す。$z$ と $a$ の表が右の 式の展開 で読める。x=2.0 と x=-2.0 でそれぞれ Backward してノードを選ぶ。$\varphi’(z) = a(1-a)$ の [段3] 数値が、$a$ が 0 か 1 に近いほど小さいことを見せる。w をダブルクリックして 5 に書き換える → 学生に「このあと Backward するとどうなる?」を予想させる。$z$ が $\pm 10$ オーダになり、$\varphi’(z)$ がほぼ 0 になる。x=(1,1) (AND データの最後の行) を Sample セレクタで選んで Forward。L1N0 → L1N1 → 出力 L2N0 の順にクリックして [段3] を読む。$\Sigma$ の中身が $w[x_1 \to L1N0] \cdot x_1 + w[x_2 \to L1N0] \cdot x_2$ と展開されている。x=(0,0) も見る。中間ノードの $a$ がおよそ $\sigma(b)$ の値に近いことを確認。a(h1) * w1 + a(h2) * w2 + b の sigmoid になっている。Forward → Backward。Forward → Backward。粒が右から左に流れるアニメが出るのでスピードを 1.0× で見せる。2 回目以降は 0× (アニメなし) で構わない。L1N0 をクリック。[段3] に $(w[L1N0 \to L2N0] \cdot \delta(L2N0)) \cdot \varphi’(z)$ の数値が並ぶ。2-2-2 に変えて再 Forward すると項が 2 つになる。Forward → Backward。エッジを 1 本クリックして $\partial L/\partial w$ (赤) の値を覚える。Update。青で $\Delta w$ が追記され、w : old → new の old→new が [段3] に出る。LR を 0.1 にして Reset → 同じ流れ。$\Delta w$ の絶対値が 1/5 になっているはず。w: old → new が損失を下げる方向に動いている。Run (既定で 2000 epoch)。約数秒で完走するはず。アニメを見たければ Speed を 1.0× にして Run 200 くらいから始める。Loss タブで曲線を見る。横軸は累積ステップ数。最初の数百エポックは loss ≈ 0.125 で平坦、その後 崖のように 落ちる。決定境界 タブで、x1×x2 平面のヒートマップを見る。学習前は直線 (bias 由来)、学習後は曲線的な境界になっている。Run を途中で止めたあとにもう一度回したくなったら Run を押せば続きから学習する (Reset は押さない)。完全にやり直したいときだけ Reset to Lesson。Run 500。ReLU は seed 次第で dying ノードが出ることがある。中間層ノードを 1 つずつクリックして $a$ と $\delta$ を確認。$a = 0$ のノードは勾配が 0。sigmoid に変えて Reset。同じ seed でも Init が he のままだと分散が大きすぎるので、Init を xavier に変えて Reset → Run 500。飽和で動きが遅いはず。tanh + xavier でやり直す。勾配が残っているので ReLU ほど止まらない。Export JSON (B7) で配布した JSON を、次回の授業冒頭に学生が
Import JSON すると、seed・W・b までそのまま復元される。
Lesson7 の収束後を配ると「触ってみろ、誤分類するサンプルはあるか?」
型の課題にできる。