8  勾配で学ぶ ── 誤差をさかのぼる学習と最適化

前章で我々は壁にぶつかった。ボルツマンマシンの学習則は美しかったが、負相の計算に 2^N 通りの和が要る。MCMC で近似しても収束が遅すぎた。

本章では、この壁を迂回する。

やり方は乱暴である。エネルギー関数も分配関数も捨てる。確率分布をモデル化することをやめ、入力から出力への決定的な写像だけを作る。そして「答えとのずれ」を損失関数として、連鎖律で勾配を計算する。

これがバックプロパゲーションであり、現代の深層学習を動かしているものである。うまくいく。恐ろしくうまくいく。

だが忘れないでおきたい。捨てたものがある。ボルツマンマシンが持っていた「世界の確率的なモデルを内に持つ」という性格は、ここで失われる。生成ができない。不確かさが表現できない。

第14章で、我々はこの二つを和解させることになる。変分法という第三の道で、確率モデルを保ったまま勾配で学習する—それが VAE である。本章はその中間地点だと思って読んでほしい。

ヒント本章のガイド

第1〜3節がバックプロパゲーション、第4〜6節が実際に動かすための工夫、第7〜8節がアーキテクチャ、第9節が生物学との対決である。

第3節の導出が本章の核である。バックプロパゲーションは「連鎖律を効率よく適用しているだけ」であって、それ以上の魔法はない。そのことが腑に落ちるように書いた。

第7節で、第4章の畳み込みが再登場する。そこでは「効率のため」と説明するが、それは本当の理由ではない。本当の理由は第13章第7節まで待つことになる。

第9節は短いが、本書の主題(脳とAIを同じ数学で見る)にとって重要な節である。同じ数学で書けることと、同じ機構であることは違う。


1. 必要な数学:多変数関数の微分と連鎖律

勾配

f: \mathbb{R}^n \to \mathbb{R}勾配は、偏微分を並べたベクトルである。

\nabla f = \left( \frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n}\right)^\top

幾何的な意味。勾配は「もっとも急に増える方向」を指す。実際、単位ベクトル \mathbf{u} 方向の変化率は \nabla f\cdot\mathbf{u} であり、これが最大になるのは \mathbf{u}\nabla f と同じ向きのときだ(コーシー・シュワルツの不等式)。

だから逆向きに動けば、もっとも急に減る。これが勾配降下法の原理である。

ヤコビ行列

写像 \mathbf{f}: \mathbb{R}^n\to\mathbb{R}^m に対しては、行列になる。

J = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} \in \mathbb{R}^{m\times n}, \qquad J_{ij} = \frac{\partial f_i}{\partial x_j}

ここでの J は、五つの役目のどれでもない。本章では J が計算の対象そのものになる—バックプロパゲーションとは、ヤコビ行列の積を効率よく計算する手続きに他ならない。

連鎖律

合成関数 \mathbf{z} = \mathbf{g}(\mathbf{y})\mathbf{y} = \mathbf{f}(\mathbf{x}) の微分は、ヤコビ行列の積になる。

\frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial\mathbf{z}}{\partial\mathbf{y}}\cdot\frac{\partial\mathbf{y}}{\partial\mathbf{x}} = J_g\, J_f

成分で書けば

\frac{\partial z_i}{\partial x_k} = \sum_j \frac{\partial z_i}{\partial y_j}\frac{\partial y_j}{\partial x_k}

「途中の変数について足し上げる」—これが連鎖律の中身である。バックプロパゲーションはこの式を、深いネットワークに対して効率よく適用するだけの手続きである。

掛ける順序が問題になる

ここで、後で効いてくる論点を一つ。

L 層のネットワークなら、勾配はヤコビ行列の積 J_L J_{L-1}\cdots J_1 になる。行列の積は結合的だから、どの順で掛けてもよい。だが計算量は違う。

損失はスカラーだから、いちばん左のヤコビアンは 1\times n の行ベクトルである。左から順に掛けていけば、常にベクトル × 行列の計算で済む。右から掛けると行列 × 行列になり、はるかに重い。

「左から掛ける」がバックプロパゲーション(逆モード自動微分)、「右から掛ける」が前進モードである。出力がスカラー(損失)なら、逆モードが圧倒的に効率的だ。これがバックプロパゲーションが逆向きに進む理由である。


2. 勾配降下法

基本形

損失関数 \mathcal{L}(\theta) を最小化したい。勾配の逆向きに少しずつ動く。

\theta \leftarrow \theta - \eta\, \nabla_\theta \mathcal{L}(\theta)

\eta学習率である。

学習率の効果

\eta の選び方は、実務的にもっとも重要な判断の一つである。

二次関数 \mathcal{L}(\theta) = \frac{1}{2}\lambda\theta^2 で考えてみよう。更新は \theta \leftarrow \theta(1 - \eta\lambda) となる。

  • 0 < \eta\lambda < 1 — 単調に収束する
  • 1 < \eta\lambda < 2 — 符号を変えながら振動して収束する
  • \eta\lambda > 2 — 発散する

収束条件は \eta < 2/\lambda である。多変数なら、\lambda をヘッセ行列の最大固有値と読み替えればよい。

条件数の問題

ここから困った帰結が出る。ヘッセ行列の固有値が \lambda_{\max}\lambda_{\min} の間に散らばっているとしよう。

  • 発散しないためには \eta < 2/\lambda_{\max}
  • だが \lambda_{\min} 方向の収束速度は \eta\lambda_{\min} で決まる

\lambda_{\max}/\lambda_{\min}(条件数)が大きいと、いちばん緩い方向の収束が絶望的に遅くなる。

幾何的には、等高線が細長い谷になっている状況である。勾配は谷の壁に垂直な方向を向くので、谷底に沿って進まず、壁の間を往復してしまう。第5節の工夫は、主にこの問題への対処である。

非凸性

深層ネットワークの損失関数は凸ではない。局所最小値がいくらでもある。

だから勾配降下法が大域最小値に到達する保証はない。理論的にはひどい状況である。

にもかかわらず、実際にはうまくいく。なぜか—これは深層学習の大きな謎の一つであり、第9章の主題である。高次元では局所最小値よりサドル点のほうが圧倒的に多く、そしてサドル点は脱出できる、という説明が有力だが、決着していない。


3. バックプロパゲーション

順伝播

L 層のネットワークを定義する。層 \ell の入力を \mathbf{a}^{(\ell-1)}、出力を \mathbf{a}^{(\ell)} とする。

\mathbf{z}^{(\ell)} = W^{(\ell)}\mathbf{a}^{(\ell-1)} + \mathbf{b}^{(\ell)}, \qquad \mathbf{a}^{(\ell)} = \varphi\big(\mathbf{z}^{(\ell)}\big)

\mathbf{a}^{(0)} = \mathbf{x} が入力、\mathbf{a}^{(L)} が出力である。損失を \mathcal{L} = \mathcal{L}(\mathbf{a}^{(L)}, \mathbf{y}) と書く。以下、L は層数、\mathcal{L} は損失である—紛らわしいので区別しておく。

誤差信号を定義する

鍵となるのは、次の量である。

\boldsymbol{\delta}^{(\ell)} \equiv \frac{\partial \mathcal{L}}{\partial \mathbf{z}^{(\ell)}}

「層 \ell の入力側の値を少し変えたら、損失がどれだけ変わるか」である。これを誤差信号と呼ぶ。

逆向きの漸化式

\boldsymbol{\delta}^{(\ell)} を、\boldsymbol{\delta}^{(\ell+1)} から計算できる。これが導ければ、あとは出力層から順に降りていくだけである。

連鎖律を書き下す。\mathbf{z}^{(\ell)} が損失に影響するのは、\mathbf{a}^{(\ell)} を経由して \mathbf{z}^{(\ell+1)} に至る道だけである。

\begin{aligned} \delta^{(\ell)}_j &= \frac{\partial \mathcal{L}}{\partial z^{(\ell)}_j} = \sum_k \frac{\partial \mathcal{L}}{\partial z^{(\ell+1)}_k}\cdot\frac{\partial z^{(\ell+1)}_k}{\partial z^{(\ell)}_j} &&\textsf{(連鎖律。} \mathbf{z}^{(\ell+1)} \textsf{ を経由)}\\ &= \sum_k \delta^{(\ell+1)}_k \cdot \frac{\partial}{\partial z_j^{(\ell)}}\Big(\sum_m W^{(\ell+1)}_{km}\varphi(z^{(\ell)}_m) + b_k\Big) &&\textsf{(定義を代入)}\\ &= \sum_k \delta^{(\ell+1)}_k \, W^{(\ell+1)}_{kj}\,\varphi'\big(z^{(\ell)}_j\big) &&\textsf{(} m=j \textsf{ の項だけ残る)} \end{aligned}

ベクトルでまとめると、

\boxed{\;\boldsymbol{\delta}^{(\ell)} = \Big( \big(W^{(\ell+1)}\big)^\top \boldsymbol{\delta}^{(\ell+1)} \Big) \odot \varphi'\big(\mathbf{z}^{(\ell)}\big)\;}

\odot は成分ごとの積である。

この式を読もう。誤差信号は、

  1. 重み行列の転置を掛けて、上の層から下の層へ運ばれる
  2. 活性化関数の微分を掛けて、その層のゲインで変調される

順伝播では W を掛け、逆伝播では W^\top を掛ける。この対称性が、第9節の生物学的妥当性の議論で焦点になる。

重みの勾配

誤差信号が手に入れば、重みの勾配はすぐ出る。

\frac{\partial \mathcal{L}}{\partial W^{(\ell)}_{ji}} = \frac{\partial \mathcal{L}}{\partial z^{(\ell)}_j}\cdot\frac{\partial z^{(\ell)}_j}{\partial W^{(\ell)}_{ji}} = \delta^{(\ell)}_j\, a^{(\ell-1)}_i

行列で書けば \partial \mathcal{L}/\partial W^{(\ell)} = \boldsymbol{\delta}^{(\ell)}\big(\mathbf{a}^{(\ell-1)}\big)^\top

この形に注目してほしい。重みの更新量は、

\Delta W_{ji} \propto \underbrace{\delta_j}_{\textsf{後シナプス側の誤差}} \times \underbrace{a_i}_{\textsf{前シナプス側の活動}}

前と後の積である。これは第7章第1節のヘッブ則 w_{ij}\propto \xi_i\xi_j と、形が同じだ。違うのは、後シナプス側が「活動」ではなく「誤差」であることである。

ここがポイント

バックプロパゲーションは連鎖律の効率的な適用にすぎない。誤差信号 \boldsymbol{\delta} を出力層から逆向きに運び、各層で W^\top を掛けて \varphi' で変調する。重みの勾配は「前シナプス活動 × 後シナプス誤差」—ヘッブ則と同じ形をしている。

計算グラフという見方

上の導出は層状のネットワークに特化していたが、もっと一般に考えられる。

計算を有向非巡回グラフとして表す。ノードが変数、エッジが演算である。各ノードで局所的な微分(ヤコビアン)が計算できれば、あとはグラフを逆向きに辿って掛け合わせればよい。

これが自動微分(automatic differentiation)である。PyTorch や JAX がやっているのは、まさにこれだ。任意の計算に対して勾配が自動的に得られる—この汎用性が、深層学習の実験サイクルを劇的に速くした。

この手続きの来歴

「バックプロパゲーション」という名前が付いたのは1986年だが、手続き自体はもっと早い。

甘利俊一は1967年に、多層のパターン識別機械を確率的勾配降下法で学習させる方式を提案している(Amari 1967)。要点はいま導いたものと同じである。素子の出力を微分可能な関数にしておけば、出力の誤差を各パラメータで微分でき、中間層の素子も学習に参加できる。当時のパーセプトロンは中間層を学習させられない点で行き詰まっていたから、これはその壁を越える提案だった。甘利は多層パーセプトロンをこの方式で学習させる計算機実験も行っている(甘利 2025)。

それが広く知られるようになるのは、二十年近く後である。Rumelhart, Hinton & Williams (1986) が同じ発想を「誤差逆伝播」(back-propagation)という名で提示し、第二次ニューロブームの主役になった。甘利自身、そのゲラ刷りを送られて「まったく同じ発想で議論が進んでいることに驚いた」と書いている(甘利 2025)。

この本では「バックプロパゲーション」という普及した名前を使う。ただし、いま導いた式が1960年代に日本で書かれていたことは、記憶しておいてよい。次節で扱う確率的勾配降下法という呼び名も、甘利の命名である。

ヒント手を動かす

2層のネットワークを NumPy だけで実装し、数値微分で勾配を検証しよう。コードは コード/08_backprop.py にある。

def forward(x, W1, b1, W2, b2):
    z1 = W1 @ x + b1
    a1 = np.tanh(z1)
    return z1, a1, W2 @ a1 + b2

def backward(x, y, W1, b1, W2, b2):
    z1, a1, z2 = forward(x, W1, b1, W2, b2)
    d2 = z2 - y                    # 出力層の誤差信号
    d1 = (W2.T @ d2)*(1 - a1**2)   # tanh の微分を掛ける
    return np.outer(d2, a1), d2, np.outer(d1, x), d1

def numeric(param, eps=1e-5):      # 数値微分(勾配チェック)
    g = np.zeros_like(param)
    it = np.nditer(param, flags=["multi_index"])
    while not it.finished:
        i = it.multi_index; old = param[i]
        param[i] = old + eps; lp = loss(W1, b1, W2, b2)
        param[i] = old - eps; lm = loss(W1, b1, W2, b2)
        param[i] = old
        g[i] = (lp - lm)/(2*eps)
        it.iternext()
    return g

backward\boldsymbol{\delta}_1 の行が、本文の逆向きの漸化式そのものである—重みの転置を掛けて、活性化関数の微分を掛ける。

\epsilon = 10^{-5}\dfrac{\partial \mathcal{L}}{\partial W_{ij}} \approx \dfrac{\mathcal{L}(W_{ij}+\epsilon) - \mathcal{L}(W_{ij}-\epsilon)}{2\epsilon} と比べると、解析的な勾配との相対誤差はこうなる。

W_1 b_1 W_2 b_2
相対誤差 3.7\times10^{-11} 2.5\times10^{-11} 2.6\times10^{-11} 1.3\times10^{-11}

桁が合っていれば実装は正しい。この「勾配チェック」は、バグを見つけるのにいまでも欠かせない。

次に、層を12層まで増やして誤差信号のノルムを測る(シグモイド、各層32ユニット)。

第12層 第9層 第6層 第3層
\|\boldsymbol{\delta}^{(\ell)}\| 6.3 9.2\times10^{-2} 7.6\times10^{-4} 1.1\times10^{-5}

9層さかのぼるあいだに、60万分の1まで減衰している。これが第6節で扱う勾配消失である。

活性化関数を替えると何が起きるかも、同じコードで見られる。

図 1: 誤差信号のノルムが層をさかのぼるにつれてどう変わるか(コード/08_backprop.py の出力、縦軸は対数)。シグモイドでは12層で7桁近く減衰するのに対し、ReLU と He 初期化では、ほぼ平らなまま下層まで届く。深いネットワークが学習できるようになった理由が、この一枚に表れている。

ReLU と He 初期化では、ほとんど減衰しない。深いネットワークが学習できるようになった理由が、ここにある—第6節で扱う工夫が、なぜ効くのかを先に見ておいてほしい。


4. 損失関数の選び方

二乗誤差と最尤推定

回帰なら二乗誤差を使う。

\mathcal{L} = \frac{1}{2}\|\mathbf{y} - \hat{\mathbf{y}}\|^2

これは天下りの選択ではない。出力にガウスノイズが乗るというモデル p(\mathbf{y}\mid\mathbf{x}) = \mathcal{N}(\hat{\mathbf{y}}, \sigma^2 I) を置けば、その負の対数尤度が

-\log p(\mathbf{y}\mid\mathbf{x}) = \frac{\|\mathbf{y}-\hat{\mathbf{y}}\|^2}{2\sigma^2} + \text{const}

二乗誤差そのものである。第5章第4節で見た「最尤推定は KL 最小化」という話が、ここに効いている。

交差エントロピーとソフトマックス

分類なら、出力を確率にする。ソフトマックス関数を使う。

p_k = \frac{e^{z_k}}{\sum_{k'} e^{z_{k'}}}

この形に見覚えがあるはずだ。第7章第3節のギブス分布 p \propto e^{-E} と同じ形である(z_k = -E_k と読めばよい)。分母は分配関数にあたる。ただし、こちらはクラス数だけの和なので計算できる。第7章の困難は、和を取る状態数が指数的だったことにあった。

損失は交差エントロピーである。

L = -\sum_k y_k \log p_k

勾配が驚くほど簡単になる

ソフトマックスと交差エントロピーを組み合わせると、勾配が単純になる。計算してみよう。

正解が k^* のとき(y_{k^*}=1、他は 0)、L = -\log p_{k^*} である。z_j で微分する。まずソフトマックスの微分を計算しておく。

\frac{\partial p_k}{\partial z_j} = p_k\big(\delta_{kj} - p_j\big)

\delta_{kj} はクロネッカーのデルタ。商の微分から出る。)これを使うと、

\begin{aligned} \frac{\partial \mathcal{L}}{\partial z_j} &= -\frac{1}{p_{k^*}}\frac{\partial p_{k^*}}{\partial z_j} &&\textsf{(連鎖律)}\\ &= -\frac{1}{p_{k^*}}\, p_{k^*}\big(\delta_{k^*j} - p_j\big) &&\textsf{(上の式を代入)}\\ &= p_j - \delta_{k^*j} = p_j - y_j \end{aligned}

\boxed{\;\frac{\partial \mathcal{L}}{\partial \mathbf{z}} = \mathbf{p} - \mathbf{y}\;}

予測から正解を引くだけである。二乗誤差の場合とまったく同じ形になった。これは偶然ではなく、指数型分布族に共通する性質である。

組み合わせが効いている。ソフトマックスを二乗誤差と組むと、飽和領域で微分が小さくなって勾配が消える。交差エントロピーと組むとそれが起きない—上のとおり \mathbf{p}-\mathbf{y} になるからだ。実装上も、\log\exp が打ち消し合う形にまとめれば桁あふれを避けられる。現代のフレームワークが softmax_cross_entropy を一体で提供するのはこのためである。


5. 最適化の実際

確率的勾配降下法

データが M 個あるとき、損失は各サンプルの和である。全部について勾配を計算するのは重い。

ミニバッチ(数十〜数百サンプル)だけで勾配を推定する。これが確率的勾配降下法(SGD)である—前節で触れたとおり、この名前は Amari (1967) による。

\theta \leftarrow \theta - \eta\, \frac{1}{|B|}\sum_{i\in B}\nabla_\theta L_i(\theta)

利点は速度だけではない。勾配にノイズが乗ることで、浅い局所最小値やサドル点から脱出しやすくなる。ノイズが正則化として働くという見方もある—第9章でこの論点に戻る。

モーメンタム

第2節で見た「細長い谷で往復する」問題への対処である。

\mathbf{v} \leftarrow \beta\mathbf{v} + \nabla_\theta L, \qquad \theta \leftarrow \theta - \eta\mathbf{v}

過去の勾配を指数移動平均で溜める。谷底に沿った方向は勾配が一貫しているので蓄積され、壁の間で往復する方向は打ち消し合う。結果として谷底方向が加速される。

物理的な比喩が名前の由来である。斜面を転がるボールが慣性を持つように、更新方向に「慣性」を持たせる。

Adam

勾配の大きさは、パラメータごとに桁が違うことがある。各パラメータに違う学習率を割り当てたい。

RMSProp は、勾配の二乗の移動平均で正規化する。

\mathbf{s} \leftarrow \gamma\mathbf{s} + (1-\gamma)(\nabla L)^2, \qquad \theta \leftarrow \theta - \frac{\eta}{\sqrt{\mathbf{s}}+\epsilon}\odot\nabla L

勾配が大きく振れているパラメータは学習率を下げ、小さいパラメータは上げる。

Adam は、モーメンタムと RMSProp を組み合わせたものである。一次モーメント(勾配の平均)と二次モーメント(勾配の二乗の平均)の両方を追跡し、初期のバイアス補正を加える。

実務上の既定値になっているが、SGD + モーメンタムのほうが最終的な汎化性能が良いという報告もあり、選択は課題による。


6. 初期化と勾配消失

何が起きるか

第3節の「手を動かす」で予告した問題である。深いネットワークでは、誤差信号 \boldsymbol{\delta} が下の層へ届かない。

原因は逆伝播の式にある。

\boldsymbol{\delta}^{(\ell)} = \big(W^{(\ell+1)}\big)^\top\boldsymbol{\delta}^{(\ell+1)}\odot\varphi'

L 層を遡ると、W^\top\varphi'L 回掛かる。掛かる量が平均的に 1 より小さければ指数的に消え、大きければ指数的に爆発する。

シグモイド関数だと深刻である。\sigma'(z) = \sigma(1-\sigma) \le 1/4。毎層で最大でも 1/4 倍になる。10層なら 4^{-10} \approx 10^{-6}—下の層は事実上学習しない。

分散を保つ初期化

対処の第一は、初期化である。各層で活性の分散が保たれるように、重みのスケールを決める。

n_{\text{in}} 個の入力を持つ層で、入力の分散を \mathrm{Var}[a]、重みを平均 0・分散 \sigma_w^2 で独立に初期化すると、

\mathrm{Var}[z] = n_{\text{in}}\,\sigma_w^2\,\mathrm{Var}[a]

分散を保つには \sigma_w^2 = 1/n_{\text{in}} とすればよい。

  • Xavier(Glorot)初期化 — 順伝播と逆伝播の両方を考慮して \sigma_w^2 = 2/(n_{\text{in}}+n_{\text{out}})。tanh 向け
  • He 初期化 — ReLU は入力の半分を捨てるので分散が半減する。それを補って \sigma_w^2 = 2/n_{\text{in}}

「初期化を変えるだけで学習できるようになる」—理論的な洞察が実用に直結した好例である。第7章第8節で述べた事前学習が不要になった理由の一つが、これである。

ReLU

対処の第二は、活性化関数である。

\mathrm{ReLU}(z) = \max(0, z), \qquad \mathrm{ReLU}'(z) = \begin{cases}1 & z>0\\ 0 & z<0\end{cases}

正の領域では微分がちょうど 1 である。だから何層遡っても減衰しない。

代償もある。負の領域では微分が 0 で、そのユニットは完全に学習しなくなる(dying ReLU)。Leaky ReLU(負の領域で小さな傾きを持つ)などの変種が提案されている。

第2章第7節で述べたとおり、ReLU が生物学的な f–I 曲線の近似でもあることは、幸運な一致である。生物学的動機と計算上の都合が、たまたま揃った。

バッチ正規化

対処の第三は、層の出力を明示的に正規化することである。

\hat{z} = \frac{z - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}, \qquad y = \gamma\hat{z} + \beta

ミニバッチ内で平均 0・分散 1 に正規化し、学習可能なスケール \gamma とシフト \beta で戻す。

効果は大きい。学習が速くなり、学習率の選択に鈍感になり、正則化としても働く。

だが、なぜ効くのかは決着していない。提案者は「内部共変量シフトの軽減」と説明したが、後の研究はこの説明に疑問を投げかけ、「損失関数の地形を滑らかにする効果」という別の説明を提出している。動くことは確かだが、理由は分かっていない—深層学習にはこの種の技法が多い。


7. 畳み込みニューラルネットワーク

全結合の問題

224\times224 のカラー画像を全結合層に入れると、入力は約15万次元である。次の層も同じ規模なら、重みは 225 億個。学習できるはずがない。

そして無駄でもある。画像の構造を何も使っていない。ピクセルの並びをシャッフルしても、全結合層にとっては同じ問題である。だが我々は、隣り合うピクセルが関係していることを知っている。

二つの制約

そこで二つの制約を課す。

局所性。各ユニットは、入力の局所的な領域だけを見る。これは第4章の受容野そのものである。

重み共有。同じ重みを、画像のすべての位置で使い回す。

この二つを課すと、演算は畳み込みになる。

z_{ij}^{(k)} = \sum_{c}\sum_{p,q} W^{(k)}_{cpq}\, a_{c,\,i+p,\,j+q} + b_k

k が出力チャネル(フィルタの種類)、c が入力チャネルである。

第4章第2節で導入した畳み込みが、そのまま層になった。

なぜ重み共有なのか

教科書的な説明は二つある。

説明1:パラメータが減る。全結合なら 15万 \times 15万 だったものが、3\times3 のフィルタなら1枚あたり9個で済む。

説明2:平行移動に強くなる。猫が画像のどこにあっても、同じフィルタが反応する。

どちらも正しい。だが、これは本当の理由ではない。

第13章第7節で、次の定理を証明する。

線形かつ平行移動同変な作用素は、畳み込みに限る。

つまり「位置によらず同じ処理をする」ことを要求した瞬間に、畳み込み以外の選択肢は消える。重み共有は効率のための工夫ではなく、対称性を課したことの必然的な帰結である。

この伏線は、第4章から引かれて、第13章で回収される。いまは「効率がよい」と思っておいてよい。だがあと5章で見方が変わることを、頭の隅に置いておいてほしい。

プーリング

畳み込み層の後に、空間方向に情報をまとめる層を置く。最大値を取る(max pooling)か、平均を取る。

これは第4章第5節の複雑細胞である。単純細胞(畳み込み)の出力を空間的にまとめ、位置ずれに頑健にする。

そして第13章第8節で、この操作が「群の軌道上で足し合わせる」ことの一例だったと分かる。福島のネオコグニトロンの S 細胞・C 細胞から、現代の CNN まで、同じ構造が続いている(第4章第7節)。


8. 残差接続と Transformer への一歩

深さの壁

層を深くすれば表現力が上がる—はずだった。だが実際には、ある深さを超えると訓練誤差すら増えることが観察された。過学習ではない。最適化が失敗している。

残差接続

He らの解決策は、驚くほど単純である。層の出力に、入力をそのまま足す。

\mathbf{a}^{(\ell)} = \mathbf{a}^{(\ell-1)} + F\big(\mathbf{a}^{(\ell-1)}\big)

なぜこれが効くのか。二つの読み方がある。

恒等写像を学びやすくする。もし最適な変換が恒等写像なら、F = 0 とすればよい。重みをゼロに近づけるだけで済む。残差接続がなければ、恒等写像を重みで表現しなければならず、それは難しい。

勾配が素通りする。逆伝播を計算すると、

\frac{\partial \mathbf{a}^{(\ell)}}{\partial \mathbf{a}^{(\ell-1)}} = I + \frac{\partial F}{\partial\mathbf{a}^{(\ell-1)}}

単位行列の項があるので、勾配が減衰せずに下層まで届く。第6節の勾配消失への、構造的な対処になっている。

これにより、100層を超えるネットワークが学習可能になった。

自己注意

Transformer の中核である自己注意(self-attention)を、式だけ示しておく。

\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V

入力の各要素から、クエリ Q・キー K・バリュー V を線形変換で作る。QK^\top で要素どうしの類似度を測り、softmax で正規化して重みにし、V の加重平均を取る。

読み方。「どの要素に注目すべきかを、内容に応じて動的に決める」機構である。畳み込みが「固定された近傍」を見るのに対し、自己注意は「関連する要素」を距離に関係なく見る。

softmax が効いている。重みが非負で総和が 1 になるので、出力は V の行の凸結合—つまり凸包の中の点になる。「注目先の加重平均」という解釈が、ここから来る。

自己注意は連想記憶の想起である

ここで、本書でもとりわけ意外な合流点に出る。いま書いた自己注意の式は、第7章のホップフィールド・ネットワークから導ける。

第7章のネットワークは状態が \pm1 の離散値で、記憶容量は 0.138N しかなかった—線形にしか増えない。この壁を破ったのが Krotov と Hopfield (2016) で、エネルギー関数に高次の相互作用を入れると容量が多項式オーダーに、Demircigil ら (2017) の指数関数版では 2^{N/2} のオーダーに上がる。相互作用を急峻にするほど、谷が細く深くなり、たくさん掘れる。

連続値に拡張する。Ramsauer ら (2021) は、これを連続値の状態に持ち上げた。記憶させたい M 個のパターンを並べた行列を X = (x_1,\dots,x_M)、現在の状態を \xi とする。提案されたエネルギー関数は

E(\xi) = -\frac{1}{\beta}\log\sum_{i=1}^{M} \exp\big(\beta\, x_i^\top \xi\big) \;+\; \frac{1}{2}\,\xi^\top\xi \;+\; \text{const}

式を読もう。第一項は「\xi にいちばん近い記憶パターン」を柔らかく選ぶ働きをする。\beta を大きくすれば \max_i x_i^\top\xi に近づき、小さくすれば全パターンの平均に近づく—\tfrac{1}{\beta}\log\sum\exp は「柔らかい最大値」である。第7章第3節の \log Z が、逆温度つきでここに顔を出している。第二項は \xi が無限に伸びないよう抑える錘である。

更新規則を求める。このエネルギーを下げる方向へ \xi を動かしたい。第一項の勾配を計算すると、

\begin{aligned} \nabla_\xi\!\left[-\frac{1}{\beta}\log\sum_i e^{\beta x_i^\top \xi}\right] &= -\sum_i \frac{e^{\beta x_i^\top\xi}}{\sum_j e^{\beta x_j^\top\xi}}\, x_i && \textsf{(合成関数の微分。}\tfrac{1}{\beta}\textsf{ と }\beta\textsf{ が相殺する)} \end{aligned}

この係数は、まさに softmax である。全体で

\nabla_\xi E = -X\,\mathrm{softmax}\big(\beta X^\top \xi\big) + \xi

この式を、更新の規則として読む。\nabla_\xi E = 0\xi について解いた形に整理すると、

\boxed{\;\xi^{\text{new}} = X\,\mathrm{softmax}\big(\beta X^\top \xi\big)\;}

右辺の \xi に現在の状態を入れ、左辺を次の状態とする。これを繰り返した先の固定点 \xi^* = X\,\mathrm{softmax}(\beta X^\top \xi^*) が、エネルギーの停留点である—一回の更新でそこに着くとは限らないことに注意してほしい(後述するが、パターンが十分に離れていれば実際には一回で着く)。

これを自己注意と見比べてほしい。\xi をクエリ Q、記憶パターン X をキー K とバリュー V両方に置き(K = V = X とする簡略化である。実際の Transformer では別々の射影で作る)、逆温度を \beta = 1/\sqrt{d_k} と読み替えると、

\mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

この簡略化のもとで、完全に一致する。 Transformer の自己注意は、現代版ホップフィールド・ネットワークの一回分の更新と同じ式になる。

ここがポイント

注意機構は、指数容量の連想記憶からの想起である。「どこに注目するか」を計算していると思っていたものが、「どの記憶を思い出すか」の計算と同じ式だった。しかも Ramsauer らは、パターンが十分に離れていればこの更新が一回で収束することを示している。Transformer が層あたり一回しか注意を計算することと符合するが、それが設計の理由だと示されたわけではない

第7章のエネルギー関数が、本章で環をなして戻ってきた。そして同じエネルギー関数は、第15章のスコアと第16章の自由エネルギーでもう二度、姿を変えて現れる。

ヒント手を動かす

M 個のランダムなベクトルを X に並べ、そのうち一本にノイズを乗せたものを \xi の初期値にして、上の更新をまわしてみよう。コードは コード/08_hopfield_modern.py にある。次元 D=64、パターン M=100 本、ノイズの大きさ 0.5 とする。

def retrieve(X, xi, beta, n_iter=100, tol=1e-12):
    """収束するまで更新し、(状態, 反復数, 重み) を返す。"""
    for t in range(1, n_iter + 1):
        w = softmax(beta * (X @ xi))   # 注意の重み
        new = X.T @ w                  # バリューの加重平均
        if np.linalg.norm(new - xi) < tol:
            return new, t, w
        xi = new
    return xi, n_iter, w

この4行が本文の更新式そのものである。そして同時に、自己注意の \mathrm{softmax}(QK^\top)V でもある。

\beta を動かすと、こうなる。

\beta 0.5 2 5 10 20 50
目標との余弦 -0.17 0.06 0.06 1.0000 1.0000 1.0000
最大の重み 0.010 0.011 0.012 0.988 1.000 1.000
混ざった本数 100.0 99.9 99.5 1.0 1.0 1.0
反復数 8 12 19 11 4 2

\beta \ge 10 で、余弦がぴったり 1 になる。ノイズを乗せた入力から、元のパターンが完全に戻ってくる。

そして \beta が小さいと、どこへ行くのか。最下段を見てほしい—「混ざった本数」(重みの参加率)が 100.0、つまり M 本すべてが等しく混ざっている。\xi全パターンの平均に落ちているのだ。最大の重みが 0.010 = 1/100 であることからも分かる。

反復数の右端にも注目してほしい。\beta=50 では 2—つまり一回の更新で固定点に着いている(2回目には動かない)。Ramsauer らの「パターンが十分に離れていれば一回で収束する」が、ここに見えている。Transformer が層あたり一回しか注意を計算しないことと重ねて読める—ただし、これで設計の理由が説明できたわけではない。

容量も確かめておこう。\beta=32 に固定してパターン数を増やすと、M = 8, 64, 512, 4096、そして 20000 本でも余弦は 1.0000 のままである。D=64 次元に2万本が入る。第7章のホップフィールド則なら 0.138 \times 64 \approx 8.8 本が限界だった—指数容量とはこういうことである。

そして問い—\beta が小さいときの「全パターンの平均」は、第7章第2節で見た偽記憶と同じものだろうか。あちらは数本のパターンが混ざった状態だった。ここでは Mすべてが混ざる。同じ現象の両端なのか、それとも別物なのか。\beta を 5 から 10 のあいだで細かく刻むと、何が見えるだろうか。

留保も書いておく。一致するのは数式であって、機能が同じだと示されたわけではない。実際の Transformer では KV が別々の行列であり(上の対応では両方 X)、更新も反復されない。「連想記憶として使える」ことと「連想記憶として働いている」ことは別である—第1章第2節から繰り返してきた区別が、ここでも要る。

なお本書では、Transformer を独立の章としては扱わない。自己注意の式と上の関係を押さえておけば、第18章第1節で扱う「大規模言語モデルの表現」の議論には十分である。


9. バックプロパゲーションは生物学的に妥当か

本章の締めくくりに、正面から問う。脳はバックプロパゲーションをやっているのか。

三つの問題

問題1:重み輸送。これがもっとも深刻である。

逆伝播の式を見返してほしい。

\boldsymbol{\delta}^{(\ell)} = \big(W^{(\ell+1)}\big)^\top\boldsymbol{\delta}^{(\ell+1)}\odot\varphi'

順伝播で使った W の転置が必要である。つまり、フィードバック経路が、フィードフォワード経路のシナプス強度を正確に知っていなければならない。

生物学的には、これは考えにくい。シナプスは局所的な情報しか使えない。A\to B のシナプスの強度を、B\to A のシナプスがどうやって知るのか。

問題2:位相の分離。バックプロパゲーションは、順伝播を完了してから逆伝播を始める。この二つの位相が、時間的にきれいに分かれている必要がある。皮質でそのような大域的な同期があるという証拠は乏しい。

問題3:誤差信号の運搬。出力層の誤差を、遠く離れた入力層まで正確に運ばねばならない。しかも活動そのものとは別の経路で。そんな専用の配線は見つかっていない。

提案されている解決策

これらに対して、いくつもの提案がある。

フィードバックアラインメント。Lillicrap らの驚くべき発見である。フィードバック経路の重みを、ランダムに固定したまま学習させても、ネットワークは学習できる。

なぜか—順伝播の重みが、ランダムなフィードバック重みと「揃う」方向に学習されるからである。正確な転置は要らない。おおよそ揃っていればよい。問題1がかなり緩和される。

予測符号化による近似。第16章第1節で扱う予測符号化のネットワークが、適当な条件下でバックプロパゲーションを近似することが示されている。局所的な計算だけで、誤差信号に相当するものが自然に生じる。

ターゲット伝播。誤差ではなく「目標値」を逆向きに伝える。各層が自分の目標に近づくよう局所的に学習する。

ヘッブ則との対比

第3節で見たとおり、重みの更新は「前シナプス活動 × 後シナプス誤差」の形をしていた。ヘッブ則は「前シナプス活動 × 後シナプス活動」である。

違いは、後ろに来るのが「活動」か「誤差」かだけである。

そして第7章の正相・負相を思い出してほしい。あれは「データを見せたときの相関」から「モデルを走らせたときの相関」を引く形だった。二つの位相の差が学習を駆動していた。

予測符号化も同じ構造を持つ。予測と実際の差—つまり誤差—が、局所的に計算されて学習を駆動する。

つまり「誤差で学習する」こと自体は、生物学的に無理な要求ではない。問題は、その誤差をどうやって層をまたいで運ぶかである。

本書の立場

判定は下さない。だが本書の主題に照らして、一つ述べておきたい。

同じ数学で書けることと、同じ機構であることは違う。

本書は「脳とAIを同じ数学で見る」ことを目指している。だがそれは「脳とAIが同じものだ」という主張ではない。畳み込みが両方に現れることは、両者が同じ制約(平行移動同変性)に従っているからであって、実装が同じだからではない。

バックプロパゲーションは、その区別がもっとも鮮明に見える例である。「勾配で学習する」という抽象的な水準では脳もそうかもしれない。だが「W^\top を掛けて誤差を運ぶ」という具体的な水準では、ほぼ確実に違う。

どの水準で似ていると言っているのか—この問いを持ち続けることが、この分野で誤解を避ける最良の方法である。そして第11章から第18章では、この問いがもっと精密な形で戻ってくる。

ノートコラム:皮質の可塑性

本文の「学習」が、脳では何によって実現されているのかを見ておく。

シナプス可塑性。学習の物理的な実体は、シナプス強度の変化だと考えられている。強くなるのが長期増強(LTP)、弱くなるのが長期抑圧(LTD)である。海馬で最初に発見され(1973年)、その後皮質でも確認された。

分子機構。LTP の代表的な機構では、NMDA 受容体が鍵を握る。この受容体は、(a) グルタミン酸が結合し、かつ (b) 後シナプス側が脱分極している—この二つが同時に成り立つときにだけ開く。つまり「前シナプスの活動」と「後シナプスの活動」の同時性を検出する装置になっている。

これはヘッブ則の分子的な実装である。第7章第1節の w_{ij}\propto \xi_i\xi_j に、物理的な対応物が見つかったわけだ。

その先で何が起きるか。流れ込んだカルシウムイオンが CaMKII という酵素を活性化し、自己リン酸化によって刺激が去ったあとも活性が残る。これがシナプス後部の再編を引き起こし、AMPA 受容体が集まって伝達効率が上がる。「重み w_{ij} の値」に対応する実体は一つの数ではなく、受容体の数と配置、補助サブユニットの組み合わせからなる状態である(Nicoll と Schulman 2023、Diering と Huganir 2018)。

かたちが変わる。強化されたシナプスでは、スパイン(樹状突起の小さな突起)が実際に膨らむ。近年の驚きは、この膨らみが力学的にも働くことだ。Ucar ら (2021) は、スパインが前シナプス終末を押すこと自体が伝達物質の放出を促すと報告した。可塑性は化学だけの話ではなかったわけである。スパインの動態を人工ニューラルネットワークの学習と並べて論じた総説もある(Kasai ら 2021)。

タイミングはどこまで効くのか。前後のスパイクの時間差が可塑性を決めるスパイクタイミング依存可塑性(spike-timing-dependent plasticity, STDP)は、長く標準的な学習則として扱われてきた。前シナプスのスパイクが数ミリ秒早ければ強化、遅ければ抑圧—因果の向きを検出していると読める、きれいな規則である。

だが再現性には強い留保がつく。Inglebert ら (2020) は、細胞外カルシウム濃度を生体に近い 1.3〜1.5 mM にすると、単発のスパイク対では可塑性がまったく起きず、1.8 mM では抑圧になることを示した。古典的な STDP の実験は、これより高い濃度で行われていた。バーストや十分に高い発火率を使えば古典的な形が戻るので、STDP が存在しないという話ではない。だが「前後数ミリ秒の時間差が重みを決める」という単純な規則を、脳の学習の土台として無条件に置くことはできない(Inglebert と Debanne 2021)。

行動の時間スケール。むしろ近年注目されているのは、もっと遅い規則である。Bittner ら (2017) は海馬 CA1 で、樹状突起のプラトー電位の数秒前後に届いた入力が、一回の試行で強化されることを見出した。ミリ秒ではなく秒—動物の行動と同じ時間スケールである。しかも前後の同時性を要求しないので、ヘッブ則の枠からも外れている(Milstein ら 2021)。

大域信号との出会い方。ドーパミンのような修飾物質は広範囲に投射し、「うまくいったか」を全体に届けうる(第10章)。ではスカラー信号が、どうやって特定のシナプスを選ぶのか。Yagishita ら (2014) は線条体で、ドーパミンがスパインの拡大を促すのはグルタミン酸入力の 0.3〜2 秒後という狭い窓に限られることを示した。局所の活動が短時間だけ痕跡を残し、そこに大域信号が重なったときだけ変化が確定する。これは第10章第3節の適格度トレースそのものの姿である。時間のずれを埋めるために強化学習の理論が要求した仕掛けが、線条体のスパインで分子的に実装されていた—本書のなかでも、理論と実験がこれほど近く出会った例は少ない。

臨界期。可塑性の強さは、生涯一定ではない。視覚野では生後の限られた時期(臨界期)に可塑性が高く、この間に片眼を遮蔽すると眼優位性が不可逆的に変化する。Hubel と Wiesel のこの発見は、経験が回路を形作ることを示した。

バックプロパゲーションとの距離。さて、本文第9節の問いに戻る。

上に挙げた機構は、すべて局所的である。シナプスは、自分につながる前後の細胞の状態と、届いた修飾信号しか知らない。遠く離れた出力層の誤差を、層ごと・ユニットごとに区別して受け取る手段はない。

分かっていないこと。では脳はどうやって「良い方向」を知るのか。これは未解決である。

有力な候補は、上で見た神経修飾物質による大域信号である。第10章の報酬予測誤差がこれにあたる。だがこれは一つのスカラー信号であり、バックプロパゲーションが運ぶような層ごと・ユニットごとの詳細な誤差ベクトルではない。局所的な可塑性と、大域的なスカラー信号だけで、深いネットワークを学習できるのか。これは理論的にも実験的にも開かれた問いである。本文で挙げたフィードバックアラインメントや予測符号化による近似は、この隙間を埋めようとする試みだが、どれも決定的な実験的支持を得てはいない。

そもそも記憶の座がシナプスだけなのかも、確定していない。Abraham ら (2019) は、細胞内の分子状態や細胞そのものの興奮性の変化といった、シナプス以外の機構が長期記憶を担う可能性を整理している。上で述べた CaMKII を中心とする筋書きにしても、どの段階が実験で固まっていてどこが推測なのかは、総説の中で率直に区別されている(Nicoll と Schulman 2023)。教科書の図が与える印象よりずっと動いている領域だと思ってほしい。

出典 Bliss & Lømo (1973)、Bi & Poo (1998)、Inglebert et al. (2020)、Bittner et al. (2017)、Yagishita et al. (2014)、Ucar et al. (2021)、Nicoll & Schulman (2023)、Abraham et al. (2019)、Lillicrap et al. (2020)。

確認問題

  1. [導出]\mathcal{L}(\theta)=\frac{1}{2}\lambda\theta^2 に対する勾配降下法の収束条件を求めよ。多変数の場合、条件数が大きいと何が問題になるか。(第2節)

  2. [導出]誤差信号の漸化式 \boldsymbol{\delta}^{(\ell)} = (W^{(\ell+1)})^\top\boldsymbol{\delta}^{(\ell+1)}\odot\varphi' を導出せよ。(第3節)

  3. [導出]重みの勾配が \partial \mathcal{L}/\partial W_{ji} = \delta_j a_i となることを示せ。この形がヘッブ則とどう似ていて、どう違うかを述べよ。(第3節・第7章第1節)

  4. [導出]ソフトマックスと交差エントロピーを組み合わせたとき、\partial \mathcal{L}/\partial\mathbf{z} = \mathbf{p}-\mathbf{y} となることを導出せよ。(第4節)

  5. [導出]各層で活性の分散を保つには、重みの初期分散をどう選べばよいか。ReLU の場合に係数が変わる理由を述べよ。(第6節)

  6. [導出]残差接続が勾配消失を緩和する理由を、\partial\mathbf{a}^{(\ell)}/\partial\mathbf{a}^{(\ell-1)} を計算して示せ。(第8節)

  7. [導出]現代版ホップフィールド・ネットワークのエネルギーの勾配から、自己注意の更新式が出ることを本文にならって再現せよ。\beta を小さくすると何が起きるか。(第8節・第7章第1節)

  8. [考える]「同じ数学で書けることと、同じ機構であることは違う」という主張を、バックプロパゲーションを例に説明せよ。(第9節・第1章第2節)


参考文献

  • Amari, S.-I. (1967) A theory of adaptive pattern classifiers. IEEE Trans Electron Comput — 多層を確率的勾配降下法で学習させる最初の提案[3節・5節]
  • Rumelhart, D. E., Hinton, G. E. & Williams, R. J. (1986) Learning representations by back-propagating errors. Nature — 「誤差逆伝播」の名を与え、広めた論文[3節]
  • 甘利俊一 (2025)『脳・心・人工知能〈増補版〉』講談社 — 上の二つの関係を当事者の側から述べている[3節]
  • Prince, S. J. D. (2023) Understanding Deep Learning ch.6–11 — 現代の標準的な教科書。無料で公開されている
  • Vaswani, A. et al. (2017) Attention is all you need — 自己注意の原典[8節]
  • Ramsauer, H. et al. (2021) Hopfield networks is all you need — 本章第8節の導出の出典。自己注意と現代版ホップフィールドの同型。容量を指数的に上げる系譜は Krotov & Hopfield (2016)、Demircigil et al. (2017)[8節]
  • Lillicrap, T. P. et al. (2020) Backpropagation and the brain. Nat Rev Neurosci — 生物学的妥当性の総説[9節]
  • Bi, G. & Poo, M. (1998); Markram, H. et al. (1997) — STDP の原典。ただし次の項と必ず合わせて読んでほしい[コラム C8]
  • Inglebert, Y. et al. (2020) Synaptic plasticity rules with physiological calcium levels. PNAS; Inglebert, Y. & Debanne, D. (2021) Front Cell Neurosci; Bittner, K. C. et al. (2017) Behavioral time scale synaptic plasticity underlies CA1 place fields. Science — STDP の見直しと、秒の時間スケールで働く可塑性。実験条件が結論を作っていた例として重い[コラム C8]
  • Nicoll, R. A. & Schulman, H. (2023) Synaptic memory and CaMKII. Physiol Rev; Abraham, W. C. et al. (2019) Is plasticity of synapses the mechanism of long-term memory storage? npj Sci Learn — 分子機構の現在の筋書きと、記憶の座がシナプスだけなのかを疑う視点[コラム C8]
  • Kasai, H. et al. (2021) Spine dynamics in the brain, mental disorders and artificial neural networks. Nat Rev Neurosci; Ucar, H. et al. (2021) Nature; Yagishita, S. et al. (2014) Science — スパインの構造と力学、そして大域的な報酬信号が局所のシナプスを選ぶ仕組み[コラム C8・10章]