2-2-1ネットワークによるXOR学習

2-2-1ネットワークによるXOR学習についてClaude Opus 4.5に説明してもらいました。
自分は間違いを指摘したり、構成を整理しました。

2-2-1ネットワークによるXOR学習

2-2-1ネットワークによる完全なXOR関数の学習

重みの進化を詳しく見る前に、最小構成の2-2-1ネットワーク(2入力、2隠れニューロン、1出力)が、4つすべての入力組み合わせで完全なXOR関数を学習する様子を見てみましょう。

完全なXOR訓練セット

(0, 0) → 0
(0, 1) → 1
(1, 0) → 1
(1, 1) → 0

詳細な計算例(反復 0)

与えられた値: 入力 \([x_1, x_2] = [1, 1]\)、目標値 \(t = 0\)、学習率 \(\eta = 0.5\)

ネットワーク図(反復 0)

001

順伝播

入力層 → 隠れ層 → 出力層
\(x_1, x_2\) → \(h_1, h_2\) → \(y\)

ステップ1 : 隠れ層の活性化を計算

隠れニューロン \(h_1\) について:

$$u_1 = x_1 \cdot 0.36 + x_2 \cdot 0.42 + b$$
$$u_1 = 1 \cdot 0.36 + 1 \cdot 0.42 + (-0.15) = 0.63$$
$$h_1 = \frac{1}{1 + e^{-u_1}} = \frac{1}{1 + e^{-0.63}} = 0.652$$

隠れニューロン \(h_2\) について:

$$u_2 = x_1 \cdot 0.19 + x_2 \cdot 0.51 + b$$
$$u_2 = 1 \cdot 0.19 + 1 \cdot 0.51 + (-0.15) = 0.55$$
$$h_2 = \frac{1}{1 + e^{-u_2}} = \frac{1}{1 + e^{-0.55}} = 0.634$$

ステップ2 : 出力を計算

$$z = h_1 \cdot 0.68 + h_2 \cdot 0.73 + c$$
$$z = 0.652 \cdot 0.68 + 0.634 \cdot 0.73 + (-0.35) = 0.56$$
$$y = \frac{1}{1 + e^{-z}} = \frac{1}{1 + e^{-0.56}} = 0.636$$

ステップ3 : 二乗和誤差を計算

$$E = \frac{1}{2}(t – y)^2 = \frac{1}{2}(0 – 0.636)^2 = \frac{1}{2}(0.404) = 0.202$$

出力勾配の導出

ステップ1 : 誤差関数の微分

二乗和誤差:

$$E = \frac{1}{2}(t – y)^2$$

\(y\) について微分すると:

$$\frac{\partial E}{\partial y} = \frac{1}{2} \cdot 2(t – y) \cdot (-1) = -(t – y) = (y – t)$$

ステップ2 : シグモイド活性化関数の微分

出力はシグモイドを使用:

$$y = \sigma(z) = \frac{1}{1 + e^{-z}}$$

シグモイドの微分は:

$$\frac{\partial y}{\partial z} = y(1 – y)$$

ステップ3 : 連鎖律

連鎖律により、\(z\) に関する勾配は:

$$\delta_y = \frac{\partial E}{\partial z} = \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial z}$$
$$\delta_y = (y – t) \cdot y \cdot (1 – y)$$

これが逆伝播で使用する勾配です!

逆伝播

出力誤差 ← 隠れ層勾配 ← 重み更新
\(\delta_y\) ← \(\delta_{h1}, \delta_{h2}\) ← \(\Delta w\)

ステップ4 : 勾配の計算(逆方向パス)

出力層の勾配:

$$\delta_y = (y – t) \cdot y \cdot (1 – y)$$
$$\delta_y = (0.636 – 0) \cdot 0.636 \cdot (1 – 0.636)$$
$$\delta_y = 0.636 \cdot 0.636 \cdot 0.364 = 0.147$$

隠れ層の勾配:

\(h_1\) について:

$$\delta_{h_1} = \delta_y \cdot w_{41} \cdot h_1 \cdot (1 – h_1)$$
$$\delta_{h_1} = 0.147 \cdot 0.68 \cdot 0.652 \cdot 0.348$$
$$\delta_{h_1} = 0.023$$

\(h_2\) について:

$$\delta_{h_2} = \delta_y \cdot w_{42} \cdot h_2 \cdot (1 – h_2)$$
$$\delta_{h_2} = 0.147 \cdot 0.73 \cdot 0.634 \cdot 0.366$$
$$\delta_{h_2} = 0.025$$

ステップ5 : 重みの更新 (学習率 \(\eta = 0.5\))

出力層の重み:

$$w_{41}^{\text{new}} = 0.68 – 0.5 \cdot 0.147 \cdot 0.652 = 0.632$$
$$w_{42}^{\text{new}} = 0.73 – 0.5 \cdot 0.147 \cdot 0.634 = 0.683$$
$$w_{43}^{\text{new}} = -0.35 – 0.5 \cdot 0.147 = -0.424$$

隠れ層の重み:

$$w_{11}^{\text{new}} = 0.36 – 0.5 \cdot 0.023 \cdot 1 = 0.349$$
$$w_{21}^{\text{new}} = 0.42 – 0.5 \cdot 0.023 \cdot 1 = 0.409$$
$$w_{12}^{\text{new}} = 0.19 – 0.5 \cdot 0.025 \cdot 1 = 0.177$$
$$w_{22}^{\text{new}} = 0.51 – 0.5 \cdot 0.025 \cdot 1 = 0.497$$

入力バイアスの重み:

$$w_{31}^{\text{new}} = -0.15 – 0.5 \cdot 0.023 = -0.162$$
$$w_{32}^{\text{new}} = -0.15 – 0.5 \cdot 0.025 = -0.163$$

重要なポイント:

  • シグモイド関数 \(\sigma(x) = \dfrac{1}{1 + e^{-x}}\) は値を \((0, 1)\) の範囲に圧縮します
  • ランダムな初期重みは高い誤差(0.202)を生成します
  • 逆伝播は出力から隠れ層へ逆方向に勾配を計算します
  • 各重みの更新式:\(w^{\text{new}} = w^{\text{old}} – \eta \cdot \text{勾配}\)
  • これらの更新により反復1の重みになります




インタラクティブトレーニング可視化: 反復 0-10

「次のステップ」をクリックして、ネットワークが段階的に学習する様子を見てみましょう。各順伝播 + 逆伝播で重みが更新される様子を観察します。



反復 0 (初期ランダム重み)

反復
0

出力 (y)

誤差 (E)

目標値 (t)
0.000

XOR Training Visualization

このインタラクティブ図を表示するにはJavaScriptを有効にしてください。


反復 100

002

XOR学習における誤差と勾配の変化

XOR訓練例: \(x_1=1, x_2=1 \rightarrow t=0\)

この入力パターンでは、ネットワークは出力を0に近づけるように学習します。初期のランダムな重みでは \(y \approx 0.636\) ですが、訓練を通じて \(y \rightarrow 0\) に収束していきます。

XOR学習における誤差と勾配の変化(\(x_1=1, x_2=1, t=0\))

「次の反復」をクリックして、訓練反復ごとに出力 \(y\) が目標値0に近づく様子と、誤差・勾配の変化を観察します。



反復 0

反復
0

出力 (y)
0.636

誤差 (E)
0.202

勾配 (δy)
0.147

XOR Error Visualization

このインタラクティブ図を表示するにはJavaScriptを有効にしてください。


XOR学習の観察ポイント

  • 誤差関数 \(E\): 反復を重ねるごとに \(y\) が0に近づき、誤差が減少していきます
  • 勾配 \(\delta_y\): 初期は \(y \approx 0.636\) で勾配が大きく、\(y\) が0に近づくにつれて勾配も小さくなります
  • 学習軌跡(オレンジ破線): 訓練中の \(y\) の変化の履歴を示しています

広告

さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト
【FRONTIER】
AdGuard Ad Blocker
AdGuard VPN
AdGuard DNS




«       »
カテゴリーAI