ニューラルネットワークの構造とバックプロパゲーション
直線では解けない問題がある——XORはその典型だ。 ニューラルネットワークは「特徴変換の自動化」によってこの壁を超える。 なぜ層が必要か、なぜ非線形が必要か、どうやって学習するか—— 視覚から積み上げて理解しよう。
線形モデルの限界と「隠れ層」のアイデア
線形回帰や線形分類器を使えば、データに直線や平面を当てはめることができます。 しかし世界の多くの問題は、直線では解けない——そこに気づくことが、ニューラルネットワークを理解する出発点です。
たとえば、XOR問題を考えてみましょう。入力が(0,0)か(1,1)なら赤、(0,1)か(1,0)なら青に分類したい。 2次元空間にこの4点をプロットすると、どこに直線を引いても正しく分類できないことがわかります。

では、どうすれば解けるのでしょうか?答えは「座標を変換する」ことです。 元の空間での直線分離が不可能でも、適切な特徴変換を施した新しい空間では直線分離が可能になる—— ニューラルネットワークの「隠れ層」は、まさにこの「特徴変換を自動的に学習する」仕組みです。
ニューラルネットワークは、入力の線形結合に非線形変換(シグモイド関数)を適用した特徴をM個並列で生成し、 その変換済み特徴量を組み合わせて最終予測を出します。「脳の模倣」という名称とは裏腹に、 その本質は非線形統計モデルです。
この式を分解すると:
- $\alpha_m^T X$:入力Xをm番目の方向に「投影」する
- $\sigma(\cdot)$:投影結果を非線形変換する(隠れユニット)
- $\beta_m$:各隠れユニットの出力を重み付き結合する
- $g(\cdot)$:最終的な出力変換(回帰なら恒等関数、分類ならソフトマックス)
ネットワークのアーキテクチャ — 3層の構造
ニューラルネットワークは3つの層からできています。それぞれの役割を一緒に見ていきましょう。

入力層:特徴量 $X_1, X_2, \ldots, X_p$ がそのまま入ります。 追加の「バイアスユニット(常に1)」も含まれます。
隠れ層:M個のユニットがあります。各ユニットは、すべての入力に対して 「重み付き和 + バイアス → 非線形変換」を計算し、導出特徴量 $Z_m$ を生成します。
$Z_m$ は「学習される特徴量」です。 線形回帰が使う特徴量は事前に手作りするのに対して、ニューラルネットワークはデータから自動的に最適な特徴量を学習します。 これが「隠れ層」の核心的な役割です。
出力層:隠れ層の出力 $Z_1, \ldots, Z_M$ を受け取り、最終予測を計算します。
回帰問題なら出力はそのまま $T_k$、分類問題ならソフトマックス関数を通します:
この構造全体でのパラメータ数は $(p+1)M + K(M+1)$ 個です。 入力特徴量が100個、隠れユニットが20個、出力が10クラスなら、なんと2230個のパラメータを 同時に最適化することになります——これをどうやって学習するかが次の問いです。
シグモイド関数 — 非線形性の源
ニューラルネットワークが線形モデルと根本的に異なる理由は、活性化関数にあります。 ここで一つ、思考実験をしてみましょう。
もしシグモイド関数の代わりに恒等関数 $\sigma(v) = v$ を使ったとしたら、何が起きるでしょうか?
これは単なる線形回帰と同じです。100個の隠れユニットを使っても、 結局1層の線形モデルにしか相当しない——「深さ」が意味を持つのは、非線形性があってこそです。

シグモイド関数は「滑らかなステップ関数」です:
- $v \to -\infty$ のとき $\sigma(v) \to 0$
- $v = 0$ のとき $\sigma(v) = 0.5$
- $v \to +\infty$ のとき $\sigma(v) \to 1$
アニメーションで見えるように、重みの大きさによってシグモイドの形が変わります。 重みが小さいとシグモイドは線形に近く動作し、 重みが大きいとほぼステップ関数として動作します。 ネットワークは学習の中で「どの程度非線形に振る舞うか」を重みの大小を通じて自動調整できるのです。
さらに重要な性質:シグモイドの微分は $\sigma'(v) = \sigma(v)(1 - \sigma(v))$ と書けます。 この「自身の値で表せる微分」が、次に学ぶバックプロパゲーションを効率的にする鍵になります。
バックプロパゲーション — 誤差を逆方向に伝える
ネットワークに何千ものパラメータがあるとして、どうやってすべてを学習するのでしょうか?
目標は損失関数 $R(\theta)$ を最小化することです。回帰なら:
これを勾配降下法で最小化します。各パラメータについて偏微分を計算し、負の勾配方向に少しずつ更新する—— しかし問題があります。パラメータが何千個もあり、しかも層が重なっているため、単純な計算では計算量が爆発します。

バックプロパゲーションはこの計算を効率的に行うアルゴリズムです。 核心は連鎖律(chain rule)です。
まず「前向きパス(forward pass)」で予測値を計算します。次に「後向きパス(backward pass)」で、 出力層から隠れ層へ向けて誤差信号を伝播させます。
出力層の誤差を $\delta_{ki}$、隠れ層の誤差を $s_{mi}$ と呼ぶと:
この式には深い意味があります。隠れ層の誤差 $s_{mi}$ は、 出力層の誤差 $\delta_{ki}$ を重み $\beta_{km}$ で加重平均して、 シグモイドの微分 $\sigma'$ をかけたものです。
$\sigma'$(シグモイドの傾き)が大きい場所—— つまりシグモイドが最も急峻に変化する領域——ほど誤差信号が強く伝わります。 「感度が高い場所ほど誤差が響く」という直感と合致しています。
この考え方を連鎖的に適用することで、任意の深さのネットワークのすべてのパラメータの勾配を 効率的に計算できます。
訓練の落とし穴 — 初期値と過適合
ニューラルネットワークの訓練には、線形回帰にはない独特の課題があります。 2つの代表的な落とし穴を見ていきましょう。
落とし穴1: 初期値の問題
重みをすべて0から始めるとどうなるでしょう?すべての隠れユニットが同一の計算をし、 勾配も同一になり、いつまでたっても同じ状態のまま動かない——「対称性の罠」に陥ります。
だから重みはランダムな小さな値(例: $[-0.7, +0.7]$ の一様分布)で初期化します。 これによりシグモイドの線形領域付近から出発しつつ、ユニット間の対称性を破ることができます。
落とし穴2: 過適合の問題

パラメータが多いほど、ネットワークは訓練データのノイズまで学習しやすくなります(過学習)。 その対策が重み減衰(weight decay)です:
ペナルティ項が重みの大きくなりすぎを抑制します。$\lambda$ が大きいほど正則化が強くなり、 モデルは滑らかになります。これはリッジ回帰(L₂正則化)の考え方をニューラルネットワークに拡張したものです。
もう一つの正則化方法が早期停止(early stopping)です。 訓練を続けると訓練誤差は下がり続けますが、検証誤差はある時点で増加に転じます(過適合の始まり)。 検証誤差が増加し始めたら訓練を止める——シンプルながら非常に有効な手法です。
隠れユニットの数と複数の局所最小解
「隠れユニットは何個にすればいいのか?」という問いに、残念ながら魔法の答えはありません。
経験則としては5〜100個の範囲が多いですが、より重要なのは考え方です:
- 少なすぎる場合:ネットワークが必要な非線形性を表現できず、 単純すぎるモデルになります(高バイアス)。
- 多すぎる場合:過適合しやすくなりますが、 これは重み減衰などの正則化で対処できます。 つまり「多めに設定して正則化で制御」という戦略が有効です。
もう一つの根本的な問題は、損失関数が非凸であることです。 線形回帰では必ず唯一のグローバル最小解が存在しましたが、 ニューラルネットワークでは損失関数の地形は山と谷が入り組んだ複雑な形になります。

勾配降下法はある谷(局所最小解)に落ちますが、それがグローバル最小解である保証はありません。
対策として:
- 異なるランダム初期値で複数回訓練し、最も良い解を選ぶ
- 複数の解の予測を平均する(アンサンブル的アプローチ)
実用上、局所最小解が大きな問題になることは少なく、多くの場合「十分良い解」が見つかります。 特にデータ量が多く、正則化が適切であれば。
まとめ — ニューラルネットワークの本質
ここまで見てきたことを振り返りましょう。ニューラルネットワークは魔法ではありません。

その本質は4つの要素に集約されます:
1. 特徴変換の自動化:隠れ層が「最適な基底関数」を自動学習します。 手作りの特徴量設計が不要になります。
2. 非線形性の導入:シグモイド活性化関数により、 線形では解けない問題を解けます。
3. 効率的な学習:バックプロパゲーションにより、 何千ものパラメータを連鎖律を使って効率的に更新できます。
4. 正則化の必要性:パラメータが多い分、過適合への対策 (重み減衰、早期停止)が不可欠です。
ESLが書かれた当時(2001年)、ニューラルネットワークは「有望だが実用上課題が多い」手法とされていました。 それが2010年代のDeep Learningの革命により状況は一変する——しかしその根底にある数学は、ここで学んだことと同じです。
隠れ層を1つから複数にすること、シグモイドをReLUに変えること、勾配降下をAdamにすること—— それらはすべてここで学んだ基礎概念の延長線上にあります。ここで理解した「なぜ層が必要か」「なぜ非線形が必要か」「どうやって学習するか」という問いへの答えが、 現代のDeep Learningを理解する土台です。