コンテンツにスキップ

ニューラルネットワークと逆伝播:連鎖律を計算グラフの上で逆向きに走らせる

前提:勾配降下法:勾配はなぜ「最も急な坂」なのか

生 Markdown
  • ニューラルネットワークとは、アフィン変換 zWz+b\boldsymbol{z} \mapsto W\boldsymbol{z} + \boldsymbol{b} と成分ごとの非線形関数 σ\sigma を交互に合成しただけの関数です。損失もその先に合成されるので、全体は 1 つの合成関数になります。
  • 合成関数の微分は、ヤコビ行列の積 JLJLJ1J_{\mathcal{L}}J_{L}\cdots J_{1} です。逆伝播とは、この積を左から掛けるという、ただそれだけの計算順序の指定です。
  • 出力がスカラーのとき、左端は行ベクトルです。行ベクトルに行列を掛け続ければ計算はずっと「ベクトル×行列」で済み、右から掛ける場合の「行列×行列」より 1 桁安くなります。
  • 一般の計算グラフに対して、随伴変数 vˉk\bar v_k の漸化式 vˉk=mvˉmφm/vk\bar v_k = \sum_{m} \bar v_m \,\partial \varphi_m/\partial v_k が本当に偏微分を与えることを証明します(定理 4.3)。多層ネットワークの逆伝播はその特別な場合です。
  • 逆伝播 1 回の計算量は順伝播 1 回の定数倍です。パラメータ数が PP のとき、数値微分なら PP に比例する回数の順伝播が要るので、実用規模では 10 万倍以上の差がつきます。

1. 動機:連鎖律を「知っている」ことと「安く計算できる」ことは別

Section titled “1. 動機:連鎖律を「知っている」ことと「安く計算できる」ことは別”

勾配降下法では、パラメータ θ\boldsymbol{\theta}θθηE(θ)\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \eta\, \nabla E(\boldsymbol{\theta}) で更新しました(定義 4.1[勾配降下法])。この式は勾配 E(θ)\nabla E(\boldsymbol{\theta}) が手に入ることを前提にしています。線形回帰ロジスティック回帰では、勾配を紙の上で 1 行に書き下せました(定理 5.1[ロジスティック回帰])。ところが層を重ねたニューラルネットワークでは、EEθ\boldsymbol{\theta} の式として展開すると人間が読めない大きさになります。しかもパラメータ数 PP は、小さなモデルでも 10510^5、現代の大規模モデルでは 101110^{11} を超えます。

一番素朴な手は差分近似です。ii 番目のパラメータについて

EθiE(θ+hei)E(θhei)2h\frac{\partial E}{\partial \theta_i} \approx \frac{E(\boldsymbol{\theta} + h\boldsymbol{e}_i) - E(\boldsymbol{\theta} - h\boldsymbol{e}_i)}{2h}

と計算すれば、微分の公式を一切知らなくても勾配が得られます。しかしこれには EE の評価が 2P2P 回必要です。P=105P = 10^5 でも 20 万回、P=1011P = 10^{11} なら話になりません。さらに、差分近似には打ち切り誤差と丸め誤差のせめぎ合いがあり、精度も限られます(演習 9.4)。

一方、ニューラルネットワークは合成関数です。合成関数の微分法(連鎖律)を使えば、微分は原理的には求まります。ではなぜ「逆伝播」という名前のアルゴリズムがわざわざ必要なのでしょうか。答えは計算の順序にあります。層が LL 個あるとき、連鎖律は

ET=JLJLJL1J1\nabla E^{\mathsf{T}} = J_{\mathcal{L}}\, J_{L}\, J_{L-1} \cdots J_{1}

というヤコビ行列の積を与えます(JLJ_{\mathcal{L}} は損失のヤコビ行列で 1×nL1 \times n_LJkJ_k は第 kk 層のヤコビ行列で nk×nk1n_k \times n_{k-1})。行列の積は結合法則を満たすので、どの順で掛けても答えは同じです。しかしコストは同じではありません。すべての層幅を nn とすると、

掛ける順序途中の形1 回の積のコスト全体
右から(J2J1J_2J_1 から)n×nn \times n 行列n3n^3O(Ln3)O(Ln^3)
左から(JLJLJ_{\mathcal{L}} J_L から)1×n1 \times n 行ベクトルn2n^2O(Ln2)O(Ln^2)

逆伝播とは、この表の下の行、すなわち左から掛けるという選択のことです。出力がスカラー(損失は 1 つの実数)だから左端が行ベクトルになり、行ベクトルのまま右へ右へと押し込んでいける。この非対称性が、深層学習を計算可能にしている唯一といってよい仕掛けです。

歴史的には、この「逆向きの微分」は 1970 年に Linnainmaa が丸め誤差の解析のために定式化し([1])、1974 年に Werbos が学習アルゴリズムとして提案し、1986 年の Rumelhart・Hinton・Williams の論文([2])で機械学習の標準手法として広まりました。計算量の一般論としては、Baur と Strassen が 1983 年に「勾配の計算コストは関数値の計算コストの定数倍で抑えられる」ことを証明しています([3])。

ここから先は Pro プランの内容です。

この章の続き(定義・定理・証明・例・演習)をすべて読むには Pro プランにご登録ください。無料の章は最後まで読めます。

プランを見る ログイン

この記事の誤りを報告する ・運営: 夢現技研合同会社料金プラン利用条件特定商取引法に基づく表記

© 2026 夢現技研合同会社 ・本文の LLM への入力は自由です。コード例は MIT ライセンスです。