このツールについて

入力 x, y → 隠れ層(h1, h2)→ 出力層という2層構造のニューラルネットワークに、ANDゲート((1,1)→1、それ以外→0)を誤差逆伝播法で学習させるインタラクティブな教材です。 単層パーセプトロンでは直線1本しか作れませんでしたが、隠れ層を1つ挟むことで、曲がった決定境界を作れるようになる様子を確認できます。

ツールを開く →

使い方

  1. 初期値を設定する:隠れ層h1・h2・出力層それぞれの重みとバイアス(合計9個)を数値入力欄で指定できます。「初期値をランダム生成」でランダムな出発点から学習を試すこともできます。
  2. 訓練データを確認・編集する:4つの入力パターンをグラフのドラッグや表の数値入力、t の●/〇ボタンで自由に変更できます。「データを初期値に戻す(AND)」でいつでも元に戻せます。
  3. 1ステップずつ確認する:「1ステップ実行」(または「5ステップ実行」)を押すと、誤差逆伝播法で計算した9個の勾配にもとづいて全パラメータが同時に更新されます。
  4. 自動で学習させる:「自動実行」を押すと、誤差2乗和が0.001未満になるか200回に達するまで自動的に更新が続きます。
  5. 構造図でテストする:一番上の構造図で任意のテスト入力 x, y を試すと、隠れ層 h1・h2・出力層それぞれの z と a の値がその場で計算されて表示されます。
  6. 5つのグラフを見比べる:入力空間と決定境界(曲線がどう変化するか)、分類結果のグラフ、誤差2乗和の推移、9個の重み・バイアスの推移をそれぞれ確認できます。

各コントロールの役割

初期値 (9個)隠れ層h1(w211, w212, b21)、隠れ層h2(w221, w222, b22)、出力層(w311, w312, b31)の出発値です。
初期値をランダム生成標準正規分布に従う乱数で9個のパラメータをすべて再設定します。
学習率 η1回の更新でどれだけ大きくパラメータを動かすかを決めます(既定値5)。
データ点 (x, y, t)訓練データを編集できます。変更すると学習は自動的にリセットされます。
1ステップ実行 / 5ステップ実行誤差逆伝播法による更新を1回(または5回連続で)適用します。
自動実行 / 停止誤差が十分小さくなるか200回に達するまで更新を繰り返します。
テスト入力 (構造図)学習とは関係なく、現在のパラメータで任意の入力に対する各層の出力を試せます。
最大 |Δparam|9個のパラメータの更新量のうち、最も大きいものの絶対値です。学習が収束するとこの値も0に近づきます。

学習できる内容

① 2層ネットワークの構造と順伝播

隠れ層 z21 = w211・x + w212・y + b21, a21 = σ(z21)
    z22 = w221・x + w222・y + b22, a22 = σ(z22)
出力層 z31 = w311・a21 + w312・a22 + b31, a31 = σ(z31)

入力 x, y はまず隠れ層の2つのユニット(h1, h2)にそれぞれ独立に入り、シグモイド関数を通った出力 a21, a22 が得られます。 出力層は、その a21, a22 を新たな入力として受け取り、さらにもう一度重み付き和とシグモイド関数を適用して最終出力 a31 を作ります。 隠れ層がひとつ挟まることで、入力を一度変換してから判定するという、単層パーセプトロンにはできない処理が可能になります。

② 誤差逆伝播法(バックプロパゲーション)

δ31 = (a31 − t)・a31・(1 − a31)  (出力層の誤差)
δ21 = δ31・w311・a21・(1 − a21)  (h1に伝わってきた誤差)
δ22 = δ31・w312・a22・(1 − a22)  (h2に伝わってきた誤差)

まず出力層の誤差 δ31 を計算し、それを出力層の重み(w311, w312)を使って隠れ層側に逆向きに伝えることで δ21, δ22 を求めます。 「誤差逆伝播法」という名前は、このように出力側から入力側に向かって誤差の情報を順々に伝えていく計算の流れに由来しています。 それぞれの δ に入力値を掛けたものが、各パラメータをどちら向きにどれだけ動かすべきかを示す勾配(∂C/∂w211 など)になります。

③ なぜ決定境界が曲がるのか

単層パーセプトロンの決定境界は w1・x + w2・y + b = 0 という直線でした。2層パーセプトロンでは、隠れ層の2本の直線的な境界(h1, h2 それぞれが作る境界)を出力層がさらに組み合わせるため、最終的な決定境界(a31 = 0.5 の等高線)は曲線や、複数の領域に分かれた形になります。 このツールの「入力空間と決定境界」グラフでは、直線ではなく曲線が描かれていることに注目してください。

たとえば、単層パーセプトロンでは分けられなかった XOR ゲート((0,0)→0, (1,1)→0, それ以外→1)も、隠れ層の2本の直線を使って帯状の領域を作ることで分離できます。下の概念図は、2本の直線(h1, h2 が作る境界)で挟まれた帯の内側だけを「1」と判定するイメージです。

試してみよう: 2層パーセプトロン のデータ点をXORのパターン((1,1)と(0,0)をt=0、(1,0)と(0,1)をt=1)に編集してから「自動実行」すると、単層パーセプトロンでは不可能だった分類を、この2層ネットワークが実際に学習できることを確認できます。

④ 9個のパラメータを同時に更新する難しさ

単層パーセプトロンでは3個だったパラメータが、2層になると9個に増えます。パラメータが増えるほど、初期値の選び方によって学習の進みやすさが変わりやすくなります。「初期値をランダム生成」を何度か試し、「重みとバイアスの推移」グラフの9本の線の動き方や、収束までのステップ数がそのたびに変わることを観察してみてください。

⑤ 誤差2乗和グラフと「最大 |Δparam|」の関係

自動実行は、誤差2乗和 C が0.001を下回るか200回に達すると自動的に停止します。「最大 |Δparam|」(9個のパラメータの更新量のうち最大のもの)を合わせて見ると、誤差が下がりきるにつれてパラメータの動きもどんどん小さくなっていく様子が確認できます。