入力 x, y → 隠れ層(h1, h2)→ 出力層という2層構造のニューラルネットワークに、ANDゲート((1,1)→1、それ以外→0)を誤差逆伝播法で学習させるインタラクティブな教材です。 単層パーセプトロンでは直線1本しか作れませんでしたが、隠れ層を1つ挟むことで、曲がった決定境界を作れるようになる様子を確認できます。
ツールを開く →| 初期値 (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に近づきます。 |
入力 x, y はまず隠れ層の2つのユニット(h1, h2)にそれぞれ独立に入り、シグモイド関数を通った出力 a21, a22 が得られます。 出力層は、その a21, a22 を新たな入力として受け取り、さらにもう一度重み付き和とシグモイド関数を適用して最終出力 a31 を作ります。 隠れ層がひとつ挟まることで、入力を一度変換してから判定するという、単層パーセプトロンにはできない処理が可能になります。
まず出力層の誤差 δ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」と判定するイメージです。
単層パーセプトロンでは3個だったパラメータが、2層になると9個に増えます。パラメータが増えるほど、初期値の選び方によって学習の進みやすさが変わりやすくなります。「初期値をランダム生成」を何度か試し、「重みとバイアスの推移」グラフの9本の線の動き方や、収束までのステップ数がそのたびに変わることを観察してみてください。
自動実行は、誤差2乗和 C が0.001を下回るか200回に達すると自動的に停止します。「最大 |Δparam|」(9個のパラメータの更新量のうち最大のもの)を合わせて見ると、誤差が下がりきるにつれてパラメータの動きもどんどん小さくなっていく様子が確認できます。