2つの入力 x, y から1つの出力を返す「単層パーセプトロン」に、論理演算のORゲート((1,1)→1、(1,0)→1、(0,1)→1、(0,0)→0)を学習させるインタラクティブな教材です。 重み w1, w2 とバイアス b を勾配降下法で少しずつ更新しながら、入力空間の中に「0と1を分ける境界線」がどうやって作られていくかを確認できます。
ツールを開く →| 初期 w1 / w2 / b | 「リセット」時に適用される重み・バイアスの出発値です。 |
|---|---|
| 初期値をランダム生成 | 標準正規分布に従う乱数で w1, w2, b を再設定します。 |
| 学習率 η | 1回の更新でどれだけ大きく重みを動かすかを決めるパラメータです。 |
| データ点 (x, y, t) | 訓練データそのものを編集できます。ドラッグ・数値入力・t の切り替えのいずれでも変更でき、変更すると学習は自動的にリセットされます。 |
| 1ステップ実行 / 5ステップ実行 | 誤差逆伝播法による更新を1回(または5回連続で)適用します。 |
| 自動実行 / 停止 | 200回に達するまで、または「停止」を押すまで更新を繰り返します。 |
| リセット | w1, w2, b を初期値に戻し、各グラフの履歴をクリアします。 |
| テスト入力 (構造図) | 学習とは関係なく、現在の重みで任意の入力に対する出力を試すことができます。 |
パーセプトロンは、複数の入力それぞれに重みを掛けて足し合わせ、さらにバイアスを加えた値(z)を、活性化関数に通して出力を作る、脳の神経細胞をごく単純化したモデルです。
シグモイド関数は、どんな実数値の z を入れても、出力 a を必ず 0 〜 1 の範囲に収めてくれます。これにより出力を「0らしさ・1らしさ」の確率のように扱うことができ、かつ関数全体がなめらかに変化する(微分できる)ため、勾配降下法での学習が可能になります。
δ は「出力の誤差」と「シグモイドの傾き」を掛け合わせたもので、この出力がどれだけ・どちらの方向に間違っているかを表します。δ に各入力を掛けたものが、それぞれの重みをどちらへ動かすべきかを示す勾配になります。 4つのデータすべてについて勾配を計算して合計し、学習率 η をかけた分だけ重みを更新する——これが「1ステップ」の中身です。
z = w1・x + w2・y + b = 0 を満たす点の集まりは、入力空間の中で1本の直線になります。この直線を境目にして、片側では z>0(出力が1に近づく)、反対側では z<0(出力が0に近づく)となります。 「入力空間と決定境界」のグラフに表示されている直線がまさにこれで、学習が進むにつれて、● (目標値1)と 〇(目標値0)をきれいに分ける位置まで直線が動いていく様子が見られます。
単層パーセプトロンが作れる境界線は「直線1本」だけです。そのため、1本の直線でうまく分けられるデータ(線形分離可能)にしか対応できません。 ORゲートは下の左図のように直線1本で分けられますが、XORゲート((0,0)→0, (1,1)→0, それ以外→1)は右図のように、どんなに直線を1本引いても● と 〇 を完全には分けられません。
η を大きくしすぎると、1回の更新で重みが動きすぎて誤差がかえって増える(発散する)ことがあります。逆に η を小さくしすぎると、収束するまでに非常に多くのステップが必要になります。 η の値をいろいろ変えて「自動実行」を試し、収束の速さや安定性がどう変わるかを確認してみてください。
「重みとバイアスの推移」グラフでは、w1・w2・b の3本の折れ線が、学習が進むにつれてある値に落ち着いていく様子が見られます。「誤差2乗和 C の推移」グラフと合わせて見ると、誤差が下がりきったタイミングで重みの変化もほぼ止まっていることが確認できます。