ニューラルネットワークの構造とバックプロパゲーション

直線では解けない問題がある——XORはその典型だ。 ニューラルネットワークは「特徴変換の自動化」によってこの壁を超える。 なぜ層が必要か、なぜ非線形が必要か、どうやって学習するか—— 視覚から積み上げて理解しよう。

線形モデルの限界と「隠れ層」のアイデア

線形回帰や線形分類器を使えば、データに直線や平面を当てはめることができます。 しかし世界の多くの問題は、直線では解けない——そこに気づくことが、ニューラルネットワークを理解する出発点です。

たとえば、XOR問題を考えてみましょう。入力が(0,0)か(1,1)なら赤、(0,1)か(1,0)なら青に分類したい。 2次元空間にこの4点をプロットすると、どこに直線を引いても正しく分類できないことがわかります。

XOR問題の直線分離不可能性と特徴変換による解決
直線が何度回転しても4点を正しく分けられない(左)。適切な特徴変換後の空間では直線分離が可能になる(右)。

では、どうすれば解けるのでしょうか?答えは「座標を変換する」ことです。 元の空間での直線分離が不可能でも、適切な特徴変換を施した新しい空間では直線分離が可能になる—— ニューラルネットワークの「隠れ層」は、まさにこの「特徴変換を自動的に学習する」仕組みです。

ニューラルネットワークは、入力の線形結合に非線形変換(シグモイド関数)を適用した特徴をM個並列で生成し、 その変換済み特徴量を組み合わせて最終予測を出します。「脳の模倣」という名称とは裏腹に、 その本質は非線形統計モデルです。

$$f(X) = g\left(\beta_0 + \sum_{m=1}^{M} \beta_m \sigma(\alpha_{0m} + \alpha_m^T X)\right)$$

この式を分解すると:

ネットワークのアーキテクチャ — 3層の構造

ニューラルネットワークは3つの層からできています。それぞれの役割を一緒に見ていきましょう。

3層ニューラルネットワークの構造と信号の伝播
入力層(青)から隠れ層(緑)、出力層(黄)へと信号が順番に伝わる。接続線は重みを表す。

入力層:特徴量 $X_1, X_2, \ldots, X_p$ がそのまま入ります。 追加の「バイアスユニット(常に1)」も含まれます。

隠れ層:M個のユニットがあります。各ユニットは、すべての入力に対して 「重み付き和 + バイアス → 非線形変換」を計算し、導出特徴量 $Z_m$ を生成します。

$$Z_m = \sigma(\alpha_{0m} + \alpha_m^T X), \quad m = 1, \ldots, M$$

$Z_m$ は「学習される特徴量」です。 線形回帰が使う特徴量は事前に手作りするのに対して、ニューラルネットワークはデータから自動的に最適な特徴量を学習します。 これが「隠れ層」の核心的な役割です。

出力層:隠れ層の出力 $Z_1, \ldots, Z_M$ を受け取り、最終予測を計算します。

$$T_k = \beta_{0k} + \beta_k^T Z, \quad k = 1, \ldots, K$$

回帰問題なら出力はそのまま $T_k$分類問題ならソフトマックス関数を通します:

$$f_k(X) = \frac{e^{T_k}}{\sum_{l=1}^K e^{T_l}}$$

この構造全体でのパラメータ数は $(p+1)M + K(M+1)$ 個です。 入力特徴量が100個、隠れユニットが20個、出力が10クラスなら、なんと2230個のパラメータを 同時に最適化することになります——これをどうやって学習するかが次の問いです。

シグモイド関数 — 非線形性の源

ニューラルネットワークが線形モデルと根本的に異なる理由は、活性化関数にあります。 ここで一つ、思考実験をしてみましょう。

もしシグモイド関数の代わりに恒等関数 $\sigma(v) = v$ を使ったとしたら、何が起きるでしょうか?

$$Z_m = \alpha_{0m} + \alpha_m^T X \quad \text{(線形変換)}$$
$$f(X) = \beta_0 + \beta^T Z = \underbrace{\beta_0 + \sum_m \beta_m \alpha_{0m}}_{\text{定数}} + \underbrace{\left(\sum_m \beta_m \alpha_m\right)^T}_{\text{線形係数}} X$$

これは単なる線形回帰と同じです。100個の隠れユニットを使っても、 結局1層の線形モデルにしか相当しない——「深さ」が意味を持つのは、非線形性があってこそです。

シグモイド関数の3種類のスケールによる形状の変化
スケール(重みの大きさ)によってシグモイドの形は変わる。緩やか(緑)→標準(青)→ほぼステップ関数(黄)。

シグモイド関数は「滑らかなステップ関数」です:

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

アニメーションで見えるように、重みの大きさによってシグモイドの形が変わります。 重みが小さいとシグモイドは線形に近く動作し、 重みが大きいとほぼステップ関数として動作します。 ネットワークは学習の中で「どの程度非線形に振る舞うか」を重みの大小を通じて自動調整できるのです。

さらに重要な性質:シグモイドの微分は $\sigma'(v) = \sigma(v)(1 - \sigma(v))$ と書けます。 この「自身の値で表せる微分」が、次に学ぶバックプロパゲーションを効率的にする鍵になります。

バックプロパゲーション — 誤差を逆方向に伝える

ネットワークに何千ものパラメータがあるとして、どうやってすべてを学習するのでしょうか?

目標は損失関数 $R(\theta)$ を最小化することです。回帰なら:

$$R(\theta) = \sum_{i=1}^N (y_i - f(x_i))^2$$

これを勾配降下法で最小化します。各パラメータについて偏微分を計算し、負の勾配方向に少しずつ更新する—— しかし問題があります。パラメータが何千個もあり、しかも層が重なっているため、単純な計算では計算量が爆発します。

前向きパスと後向きパス(バックプロパゲーション)の流れ
青い光が左→右へ流れる(前向きパス)。出力で誤差が生じ(赤)、オレンジ色の誤差信号が右→左へ逆伝播する(後向きパス)。

バックプロパゲーションはこの計算を効率的に行うアルゴリズムです。 核心は連鎖律(chain rule)です。

まず「前向きパス(forward pass)」で予測値を計算します。次に「後向きパス(backward pass)」で、 出力層から隠れ層へ向けて誤差信号を伝播させます。

出力層の誤差を $\delta_{ki}$、隠れ層の誤差を $s_{mi}$ と呼ぶと:

$$s_{mi} = \sigma'(\alpha_m^T x_i) \sum_{k=1}^K \beta_{km} \delta_{ki}$$

この式には深い意味があります。隠れ層の誤差 $s_{mi}$ は、 出力層の誤差 $\delta_{ki}$ を重み $\beta_{km}$ で加重平均して、 シグモイドの微分 $\sigma'$ をかけたものです。

$\sigma'$(シグモイドの傾き)が大きい場所—— つまりシグモイドが最も急峻に変化する領域——ほど誤差信号が強く伝わります。 「感度が高い場所ほど誤差が響く」という直感と合致しています。

この考え方を連鎖的に適用することで、任意の深さのネットワークのすべてのパラメータの勾配を 効率的に計算できます。

訓練の落とし穴 — 初期値と過適合

ニューラルネットワークの訓練には、線形回帰にはない独特の課題があります。 2つの代表的な落とし穴を見ていきましょう。

落とし穴1: 初期値の問題

重みをすべて0から始めるとどうなるでしょう?すべての隠れユニットが同一の計算をし、 勾配も同一になり、いつまでたっても同じ状態のまま動かない——「対称性の罠」に陥ります。

だから重みはランダムな小さな値(例: $[-0.7, +0.7]$ の一様分布)で初期化します。 これによりシグモイドの線形領域付近から出発しつつ、ユニット間の対称性を破ることができます。

落とし穴2: 過適合の問題

正則化なし(過適合)と重み減衰あり(滑らかな境界)の比較
同じデータに対して、正則化なし(左・オレンジ)はノイズまで学習した複雑な境界線、重み減衰あり(右・緑)は滑らかで汎化性の高い境界線になる。

パラメータが多いほど、ネットワークは訓練データのノイズまで学習しやすくなります(過学習)。 その対策が重み減衰(weight decay)です:

$$R(\theta) + \lambda \left(\sum_{k,m} \beta_{km}^2 + \sum_{m,\ell} \alpha_{m\ell}^2\right)$$

ペナルティ項が重みの大きくなりすぎを抑制します。$\lambda$ が大きいほど正則化が強くなり、 モデルは滑らかになります。これはリッジ回帰(L₂正則化)の考え方をニューラルネットワークに拡張したものです。

もう一つの正則化方法が早期停止(early stopping)です。 訓練を続けると訓練誤差は下がり続けますが、検証誤差はある時点で増加に転じます(過適合の始まり)。 検証誤差が増加し始めたら訓練を止める——シンプルながら非常に有効な手法です。

隠れユニットの数と複数の局所最小解

「隠れユニットは何個にすればいいのか?」という問いに、残念ながら魔法の答えはありません。

経験則としては5〜100個の範囲が多いですが、より重要なのは考え方です:

もう一つの根本的な問題は、損失関数が非凸であることです。 線形回帰では必ず唯一のグローバル最小解が存在しましたが、 ニューラルネットワークでは損失関数の地形は山と谷が入り組んだ複雑な形になります。

非凸損失関数の地形上で複数の初期値から勾配降下する様子
3つの異なる初期値(黄、緑、赤)から出発した勾配降下。1つはグローバル最小解(最も深い谷)に達し、2つは局所最小解(浅い谷)に止まる。

勾配降下法はある谷(局所最小解)に落ちますが、それがグローバル最小解である保証はありません。

対策として:

  1. 異なるランダム初期値で複数回訓練し、最も良い解を選ぶ
  2. 複数の解の予測を平均する(アンサンブル的アプローチ)

実用上、局所最小解が大きな問題になることは少なく、多くの場合「十分良い解」が見つかります。 特にデータ量が多く、正則化が適切であれば。

まとめ — ニューラルネットワークの本質

ここまで見てきたことを振り返りましょう。ニューラルネットワークは魔法ではありません。

ニューラルネットワークの全体的な学習サイクル
入力(青)→特徴変換(黄)→出力(緑)の前向きパス、誤差の逆伝播(赤)、そして学習完了(白)という一連のサイクル。

その本質は4つの要素に集約されます:

1. 特徴変換の自動化:隠れ層が「最適な基底関数」を自動学習します。 手作りの特徴量設計が不要になります。

2. 非線形性の導入シグモイド活性化関数により、 線形では解けない問題を解けます。

3. 効率的な学習バックプロパゲーションにより、 何千ものパラメータを連鎖律を使って効率的に更新できます。

4. 正則化の必要性:パラメータが多い分、過適合への対策 (重み減衰、早期停止)が不可欠です。

ESLが書かれた当時(2001年)、ニューラルネットワークは「有望だが実用上課題が多い」手法とされていました。 それが2010年代のDeep Learningの革命により状況は一変する——しかしその根底にある数学は、ここで学んだことと同じです。

隠れ層を1つから複数にすること、シグモイドをReLUに変えること、勾配降下をAdamにすること—— それらはすべてここで学んだ基礎概念の延長線上にあります。ここで理解した「なぜ層が必要か」「なぜ非線形が必要か」「どうやって学習するか」という問いへの答えが、 現代のDeep Learningを理解する土台です。