十億個のつまみ、それぞれに傾きが要る。一度の掃きで全部が見つかる。 勾配降下法は、すべての重みについて損失の傾きを知って初めて動く——本物のモデルにはそれが何十億もある。一つずつ測れば、ネットワークを十億回まるごと走らせることになる。バックプロパゲーションは、後ろ向きのたった一度の掃きで、そのすべての正確な傾きを渡してくれる。巨大なモデルの訓練をそもそも可能にする原動力だ。
つまみを一つ動かし、走らせ直し、変化を見る——それを十億回くり返す。 ∂L∂θ≈L(θ+ε)−L(θ)ε\frac{\partial L}{\partial \theta} \approx \frac{L(\theta + \varepsilon) - L(\theta)}{\varepsilon} つまみの効果を正面から測ることもできる——ほんの少し変え、ネットワーク全体をもう一度走らせ、損失がどれだけ動いたかを読む。それが下の式だ——そしてつまみ一つにつき、まるごと一回の実行がかかる。ひとつまみの塩のたびに鍋ごと作り直してスープを味見するようなもの:完全に正しいが、十億の材料では絶望的だ。
抜け道は微積分の一つの規則——連鎖に沿って傾きを掛け合わせる。 dLdx=dLdy⋅dydx\frac{dL}{dx} = \frac{dL}{dy}\cdot\frac{dy}{dx} 損失が早い層の重みに届くのは、いくつもの段の連鎖を通してだけだ。連鎖律は、連鎖全体の傾きが、局所的な傾きを掛け合わせただけのものだと言う。一列に並んだレンズのように:それぞれが倍率を掛け、最終的なズームは各レンズの倍率を端から端まで掛けたものになる。局所的な傾きを一つずつ求め、掛ける、それで終わり。
第一段階:前向きに走らせ、道すがらのすべての値を覚えておく。 z(l)=W(l)a(l−1)+b(l),a(l)=σ (z(l))z^{(l)} = W^{(l)} a^{(l-1)} + b^{(l)}, \qquad a^{(l)} = \sigma\!\big(z^{(l)}\big) 局所的な傾きは、その層を通って流れた値に依存する——だからまずネットワークを前向きに走らせ、その一つひとつをキャッシュする。各層は入力を重みと混ぜ、それから一つの曲線で曲げる。洞窟探検家が入りながらガイドロープを張るように:戻り道を見つけるのに、まさにその同じ綱をたどる。これを飛ばせば、後ろ向きの掃きは掛けるものが何もない。
第二段階:誤差から始めて、責任を後ろへ押し戻す。 δ(l)=(W(l+1))⊤δ(l+1) ⊙ σ′ (z(l))\delta^{(l)} = \big(W^{(l+1)}\big)^{\top}\delta^{(l+1)} \;\odot\; \sigma'\!\big(z^{(l)}\big) 今度は後ろ向きに掃く。出力の誤差から始め、各層で、入ってくる責任を取り、その層がどれだけ敏感だったかでスケールし、上流へ渡す。一度の掃きですべてのつまみに届く——共通の作業は一度きりで済む。配管をたどって漏れを突き止めるように:水たまりから、本当に元凶の継ぎ目まで、濡れた跡をたどる。(δ は各層が負う責任の分け前だ。)
すると各つまみの傾きが自ずと出る——その責任かけるその入力。 ∂L∂W(l)=δ(l) (a(l−1))⊤\frac{\partial L}{\partial W^{(l)}} = \delta^{(l)}\,\big(a^{(l-1)}\big)^{\top} 各層で責任が分かれば、ある一つの重みの傾きは、その責任に、それが掛けた入力をかけただけだ——全体を見渡す必要はない。帆のように:受ける推進力は、風にそれを捉える布をかけたもの——純粋に局所的な積だ。その局所性が至るところで繰り返されることこそ、バックプロパゲーションを何十億もの重みへ拡張させる。
それだけだ:覚えるための行きが一度、責任を割るための帰りが一度。 バックプロパゲーションは連鎖律に帳簿付けを足したものだ:前向きに一度走らせて覚え、後ろ向きに一度掃いて掛ける。およそ二回の実行の値段で、すべての重みの正確な傾きが手に入る——素朴なやり方が要求した十億回の実行ではなく。ブーメランのように:一度投げれば出てゆき、そのまったく同じ動きが、あなたの手までずっと戻してくれる。
🌱 落ちるコップを受け止めるのに、十億の責任を追跡したりはしない。 バックプロパゲーションは、各々の間違いを後ろ向きに、つまみごとに、誤りの正確な源まで走らせて学ぶ。脳はほぼ確実にそうはしない——あなたは十億もの偏微分を計算することなく自分を調整する。では、責任を後ろ向きにたどることは、本当に心が学ぶやり方なのか——それとも、今のところ機械がそうせざるを得ないだけなのか?次の飛躍は、決して振り返らずに学ぶやり方かもしれない。