PRINTEMPS LAB
依存ライブラリゼロの自前ニューラルネットワークが、ブラウザの中で2次元分類問題を学習していきます。 決定境界のヒートマップ、各ニューロンの活性化マップ、重みの太さと色がリアルタイムに変化する様子を観察してください。 データセット・隠れ層の構成・学習率などは自由に変更できます。
画面の中で動いているのは、全結合フィードフォワード型のニューラルネットワークです。 入力は2次元座標から作った特徴(x₁, x₂, x₁², x₂², x₁x₂, sin x₁, sin x₂)、 出力はクラスを表す1つの値(+1が青、-1がオレンジ)です。
順伝播では各層で z = W a + b, a = f(z) を計算します。学習はミニバッチSGDで、逆伝播により出力層の誤差 delta_L = (a_L - y) f'(z_L) を delta_l = W_{l+1}ᵀ delta_{l+1} ⊙ f'(z_l) と入力側へ伝え、勾配 dW = delta aᵀ / batch で重みを更新します。損失は平均二乗誤差(MSE/2)です。
決定境界ヒートマップは60x60のグリッド点をまとめて順伝播し、 その中間層の活性値をネットワーク図の各ノード内のミニマップにも再利用しています。 「層が深くなるほど単純な特徴が組み合わさって複雑な境界になる」流れを1画面で追えます。
行列演算(Float64Arrayベースの行列積・転置積)、順伝播、逆伝播、ミニバッチSGD、 Xavier/He初期化、seed付き乱数(mulberry32)、データセット生成、 ヒートマップ・損失曲線の描画まで、機械学習ライブラリもチャートライブラリも使わず TypeScriptで実装しています(runtime追加依存パッケージ0個)。 ソースコードを読めばニューラルネットの数式がそのまま追える構成です。 リポジトリ: git.printemps.tokyo/lab-neural