このツールについて

2つの入力 x, y から1つの出力を返す「単層パーセプトロン」に、論理演算のORゲート((1,1)→1、(1,0)→1、(0,1)→1、(0,0)→0)を学習させるインタラクティブな教材です。 重み w1, w2 とバイアス b を勾配降下法で少しずつ更新しながら、入力空間の中に「0と1を分ける境界線」がどうやって作られていくかを確認できます。

ツールを開く →

使い方

  1. 訓練データを確認する:左側の表に4つの入力パターン (x, y) と目標値 t が並んでいます。表の数値を編集したり、グラフ上の点をドラッグしたり、t の欄の●/〇ボタンをクリックしたりして、自由にデータを変更できます(変更すると学習は最初からやり直しになります)。
  2. 初期値・学習率を設定する:初期 w1, w2, b と学習率 η を数値入力欄で指定できます。「初期値をランダム生成」で毎回違う出発点から学習を試すこともできます。
  3. 1ステップずつ確認する:「1ステップ実行」(または「5ステップ実行」)を押すたびに、誤差逆伝播法で計算した勾配にもとづいて w1, w2, b が更新されます。
  4. 自動で学習させる:「自動実行」を押すと、200回に達するまで自動的に更新が繰り返されます。
  5. 構造図でテストする:一番上の「単層パーセプトロンの構造」では、任意のテスト入力 x, y を入力すると、その場で z・出力 a の値が計算されて表示されます。
  6. 4つのグラフを見比べる:入力空間と決定境界(直線がデータをどう分けているか)、分類結果のグラフ(各データの目標値と実際の出力の近さ)、誤差2乗和の推移、重み・バイアスの推移をそれぞれ確認できます。

各コントロールの役割

初期 w1 / w2 / b「リセット」時に適用される重み・バイアスの出発値です。
初期値をランダム生成標準正規分布に従う乱数で w1, w2, b を再設定します。
学習率 η1回の更新でどれだけ大きく重みを動かすかを決めるパラメータです。
データ点 (x, y, t)訓練データそのものを編集できます。ドラッグ・数値入力・t の切り替えのいずれでも変更でき、変更すると学習は自動的にリセットされます。
1ステップ実行 / 5ステップ実行誤差逆伝播法による更新を1回(または5回連続で)適用します。
自動実行 / 停止200回に達するまで、または「停止」を押すまで更新を繰り返します。
リセットw1, w2, b を初期値に戻し、各グラフの履歴をクリアします。
テスト入力 (構造図)学習とは関係なく、現在の重みで任意の入力に対する出力を試すことができます。

学習できる内容

① パーセプトロンの仕組み

パーセプトロンは、複数の入力それぞれに重みを掛けて足し合わせ、さらにバイアスを加えた値(z)を、活性化関数に通して出力を作る、脳の神経細胞をごく単純化したモデルです。

z = w1・x + w2・y + b
a = σ(z) = 1 ÷ (1 + e−z) (シグモイド関数)

シグモイド関数は、どんな実数値の z を入れても、出力 a を必ず 0 〜 1 の範囲に収めてくれます。これにより出力を「0らしさ・1らしさ」の確率のように扱うことができ、かつ関数全体がなめらかに変化する(微分できる)ため、勾配降下法での学習が可能になります。

② 誤差逆伝播法による学習

誤差:C = Σ (1/2)(t − a)²
δ = (a − t)・a・(1 − a)
∂C/∂w1 = Σ δ・x  ∂C/∂w2 = Σ δ・y  ∂C/∂b = Σ δ
Δw = −η・∂C/∂w

δ は「出力の誤差」と「シグモイドの傾き」を掛け合わせたもので、この出力がどれだけ・どちらの方向に間違っているかを表します。δ に各入力を掛けたものが、それぞれの重みをどちらへ動かすべきかを示す勾配になります。 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本引いても● と 〇 を完全には分けられません。

OR ゲート:線形分離できる ✓

XOR ゲート:線形分離できない ✗

ここがポイント: このORゲートの例は単層(1層)のパーセプトロンで学習できますが、XORのように直線1本で分けられない問題は、単層パーセプトロンでは原理的に解けません。これを解決するには、隠れ層を追加した「2層パーセプトロン」が必要になります(2層パーセプトロン で扱っています)。

⑤ 学習率 η の影響

η を大きくしすぎると、1回の更新で重みが動きすぎて誤差がかえって増える(発散する)ことがあります。逆に η を小さくしすぎると、収束するまでに非常に多くのステップが必要になります。 η の値をいろいろ変えて「自動実行」を試し、収束の速さや安定性がどう変わるかを確認してみてください。

⑥ 重み・バイアスの収束の様子

「重みとバイアスの推移」グラフでは、w1・w2・b の3本の折れ線が、学習が進むにつれてある値に落ち着いていく様子が見られます。「誤差2乗和 C の推移」グラフと合わせて見ると、誤差が下がりきったタイミングで重みの変化もほぼ止まっていることが確認できます。