ニューラルネットワーク - 脳を模倣した学習機械
線形モデルでは解けないXOR問題から始まり、隠れ層・シグモイド関数・バックプロパゲーション・ 重み減衰・畳み込みネットワーク・ベイズアプローチまで、ニューラルネットワークの全体像を一気に解き明かします。
線形モデルの限界 - XORが解けない
これまで学んできた回帰、判別分析、ロジスティック回帰はすべて「線形」モデルだ。 入力の重み付き和で予測を作る。
しかし、実世界のデータが線形な境界で綺麗に分けられるとは限らない。 次のパターンを直線1本で分離できるだろうか?
- クラスA: 点 (0,0) と (1,1)
- クラスB: 点 (0,1) と (1,0)

これがXORパターンだ。どんな直線を引いても、必ず誤分類が生じてしまう。 では、どうすれば良いか?
答えは「入力の線形結合から非線形な特徴を作り出し、その特徴を使って予測する」という発想だ。 例えば、$X_1 + X_2$という特徴を作ると、クラスAは合計が偶数(0か2)、クラスBは合計が奇数(1)になる。 非線形な変換を挟めば、線形分離が可能になる。
これがニューラルネットワークの核心にある考え方だ。 以降のセクションで、この「非線形特徴の作り方」と「学習の仕方」を段階的に見ていく。
参考(PPR): 統計学では同様の発想として「投影追跡回帰(PPR)」が先に開発された:
各 $g_m$ は「入力を方向$\omega_m$ に射影した値だけに依存する関数」で、$M$ を大きくすれば任意の関数を近似できる。 ニューラルネットワークは、この $g_m$ をよりシンプルな形に特化させたものだ。
ニューラルネットワークのアーキテクチャ
ニューラルネットワークはXOR問題をどう解決するか? 答えは「中間層(隠れ層)に非線形変換を行うユニットを置く」ことだ。

ネットワークは3つの層で構成される:
1. 入力層(Input Layer)
特徴量 $X = (X_1, X_2, \ldots, X_p)$ をそのまま受け取る。$p$ 個のユニット。
2. 隠れ層(Hidden Layer)
$M$ 個のユニットが、入力の線形結合を「シグモイド関数」で変換する:
- $\alpha_{0m}$: バイアス(切片)
- $\alpha_m$: 重みベクトル($p$ 次元)
- $\sigma(v) = \frac{1}{1+e^{-v}}$: シグモイド関数(詳細は次のセクション)
「隠れ」と呼ばれる理由は、これらのユニットの値がデータに直接観測されないから。 入力データからも出力データからも見えない「内部表現」だ。
3. 出力層(Output Layer)
隠れ層の出力をさらに線形結合する:
- 回帰の場合: $g_k(T) = T_k$(そのまま出力)
- 分類の場合: ソフトマックス関数で確率に変換
ソフトマックス(多クラス分類用):全クラスの確率の和が1になるよう正規化する。
シグモイド関数 - 非線形性の源
ニューラルネットワークの非線形性はシグモイド関数から生まれる。 シグモイドは「0から1へと滑らかに変化するS字曲線」だ:

- 入力が大きく正 → 出力が1に近づく(「発火する」)
- 入力が大きく負 → 出力が0に近づく(「発火しない」)
- 入力が0付近 → 連続的に変化する
なぜシグモイドが必要か?もし活性化関数に恒等関数($\sigma(v) = v$)を使ったら何が起きるか? 隠れ層がいくつあっても、全体は線形変換の合成で線形に崩壊してしまう:
シグモイドがあって初めて、「表現できる関数のクラス」が劇的に広がる。
スケールによる形状変化:
- $s$ が小さい → $\sigma(sv)$ はほぼ線形
- $s$ が大きい → $\sigma(sv)$ はほぼステップ関数
- 重みを小さくすると線形モデルに近い。重みが大きくなると非線形な境界が生まれる。
バックプロパゲーションを可能にする微分の美しい性質:
シグモイドの微分は「シグモイド自体の関数」で書ける! これはフォワードパスで計算した $\sigma(v)$ の値を再利用できることを意味し、 バックプロパゲーション(次のセクション)の効率的な計算を可能にする鍵となる。
バックプロパゲーション - 誤差を逆向きに伝える
ニューラルネットワークの「学習」とは、全パラメータ$\theta = \{\alpha_{0m}, \alpha_m, \beta_{0k}, \beta_k\}$を調整して誤差を最小化することだ。
損失関数(最小化したい目標):
- 回帰: $R(\theta) = \sum_{i=1}^N (y_i - f(x_i))^2$(二乗誤差)
- 分類: $R(\theta) = -\sum_{i=1}^N \sum_k y_{ik} \log f_k(x_i)$(交差エントロピー)
勾配降下法で更新する:

問題は、ネットワークが「合成関数の合成」であるため、微分計算が複雑に見えることだ。バックプロパゲーションの核心は「連鎖律(chain rule)を賢く使う」こと:
出力層の残差(誤差)を $\delta_{ki}$ と定義する (単純な例:$\delta_{ki} = -2(y_{ik} - f_k(x_i))$)
出力層パラメータの勾配: 「出力層の残差 × 隠れ層の出力値」という自然な形になる。
隠れ層パラメータの勾配:
$s_{mi}$ は何か? 出力層の残差 $\delta_{ki}$ を重み$\beta_{km}$ で「逆向きに」集めたもの、 つまり「隠れ層への逆伝播された残差」だ。 これが「バック(逆)プロパゲーション(伝播)」の名前の由来。
2パスのアルゴリズム:
- 前向きパス(Forward Pass): 入力 $x$ から順番に計算 → 予測値 $f_k(x_i)$
- 後ろ向きパス(Backward Pass): 出力から逆順に残差を計算 → $\delta_{ki}$ → $s_{mi}$ → 勾配
重要なポイントは、後ろ向きパスが前向きパスで計算した値(特に$z_{mi}$ と $\sigma(v)$)を再利用できること。 これが計算効率の秘密だ。
過学習との戦い - 重み減衰と訓練の実践
ニューラルネットワークには「過学習」という根深い問題がある。 隠れユニット数が多いほど表現力は高いが、訓練データに過度に適合してしまう。

3つの対策
① 早期停止(Early Stopping)
訓練中、バリデーション誤差が増加し始めたら学習を止める。 訓練誤差はまだ下がっているのに止める、という逆説的な方法だが、 過学習前のモデルが汎化性能が高い。
② 重み減衰(Weight Decay)
損失関数に正則化項を追加する(Ridge回帰と同じ発想!):
$\lambda$ を大きくすると重みが0に引き寄せられ、シンプルなモデルになる。 実装は簡単で、勾配更新時に $2\beta_{km}$ と$2\alpha_{mf}$ を加えるだけだ。
③ 重み消去(Weight Elimination)
より積極的な正則化で、小さい重みをとくに強く0に引き戻す:
訓練の実践的なコツ
| コツ | 理由 |
|---|---|
| 重みをランダムな小さな値で初期化 | ゼロだと対称性が壊れず学習が進まない |
| 入力を平均0・標準偏差1に標準化 | スケールの違いが最終結果に大きく影響する |
| 隠れユニットは多めに設定 | 少なすぎると表現力不足。正則化で制御する |
| 複数の初期値で試す | R(θ) は非凸で局所最小解が多い |
多重最小解の問題: 誤差関数 $R(\theta)$ は非凸(山が複数ある地形)だ。 最終解が初期値に依存する。対策として、異なる初期値から複数のネットワークを訓練し、予測を平均する(バギング)ことが有効だ。 重みを平均するのではなく予測を平均する点が重要(非線形モデルなので重みの平均は意味が違う)。
構造を設計する - 畳み込みネットワークへ
ニューラルネットワークの威力を実感できる代表例が「手書き数字認識」だ。 16×16ピクセルのグレースケール画像(256次元の入力)から0〜9の数字を分類する。
単純なフルコネクト(全結合)ネットワークから始めて、ドメイン知識を構造に組み込むことで劇的に精度が改善する様子を見よう。
5種類のネットワーク比較
| ネットワーク | 構造 | 重み数 | テスト正解率 |
|---|---|---|---|
| Net-1 | 隠れ層なし(線形) | 2,570 | 80.0% |
| Net-2 | 1層全結合 | 3,214 | 87.0% |
| Net-3 | 2層・局所結合のみ | 1,226 | 88.5% |
| Net-4 | 2層・局所結合+重み共有 | 1,132 | 94.0% |
| Net-5 | 2層・2段階の重み共有 | 1,060 | 98.4% |

鍵は「重み共有(Weight Sharing)」: Net-4とNet-5が採用する重み共有こそが劇的な改善の源だ。
手書き文字の縦線・横線・曲線などの特徴は、画像のどこにあっても同じ形をしている。 ならば、同じ特徴を検出する重みを画像の全位置で共有すれば良い!
これが畳み込みニューラルネットワーク(CNN)の核心だ。 3×3の「フィルタ」が画像を左上から右下へとスライドしながら、同じ重みで各位置の特徴を検出する。 結果として、重み数はNet-2より少ない(1,060 vs 3,214)にもかかわらず精度が大幅に向上している。
これは「帰納バイアス(inductive bias)」の効果だ。 「画像の特徴は位置不変だ」という事前知識をネットワーク構造に組み込むことで、 学習効率が格段に上がる。
不確実性を扱う - ベイズアプローチ
構造設計でネットワークを賢くしたが、もう一つの問題が残っている。 「最も良い単一のパラメータ」を探すのではなく、「不確実性ごと扱う」という発想に転換できないか?
これがベイズニューラルネットワークの考え方だ。
従来のアプローチ(最尤推定): 「最も良いパラメータ $\theta^*$」を一つ選び、そのモデルだけで予測する。
ベイズアプローチ: パラメータ $\theta$ に「事前分布$\Pr(\theta)$」を設定し、データを見た後の「事後分布」を使って予測する:
予測は「全てのパラメータについての期待値」:
「単一の最適解」ではなく「良い解の集合の平均」をとる。局所最小解の問題を自然に緩和できる。

実装(MCMC): 積分は解析的に計算できないため、マルコフ連鎖モンテカルロ(MCMC)でパラメータをサンプリングし、 数百個のモデルの予測を平均する。
NIPS 2003チャレンジでの実証
| 手法 | 平均ランク | 計算時間 |
|---|---|---|
| ベイズニューラルネット | 1.5 | 384分 |
| ランダムフォレスト | 2.7 | 1.9分 |
| ブースティング木 | 3.4 | 3.0分 |
| バギングニューラルネット | 3.6 | 3.5分 |
精度は最高だが計算コストが圧倒的に高い(200倍以上)。 実用上はランダムフォレストやブースティングで十分なことも多い。
本質的な理由: ベイズ法が有効なのは「正式な確率的推論」としてではなく、 「確率の高いモデル空間を効率的にサンプリングし、良いモデルの集合の予測を平均する」 という点にある。