ニューラルネットワークと逆伝播:連鎖律を計算グラフの上で逆向きに走らせる
Prerequisite:勾配降下法:勾配はなぜ「最も急な坂」なのか
This content is not available in your language yet.
0. この記事の要点
Section titled “0. この記事の要点”- ニューラルネットワークとは、アフィン変換 と成分ごとの非線形関数 を交互に合成しただけの関数です。損失もその先に合成されるので、全体は 1 つの合成関数になります。
- 合成関数の微分は、ヤコビ行列の積 です。逆伝播とは、この積を左から掛けるという、ただそれだけの計算順序の指定です。
- 出力がスカラーのとき、左端は行ベクトルです。行ベクトルに行列を掛け続ければ計算はずっと「ベクトル×行列」で済み、右から掛ける場合の「行列×行列」より 1 桁安くなります。
- 一般の計算グラフに対して、随伴変数 の漸化式 が本当に偏微分を与えることを証明します(Theorem 4.3)。多層ネットワークの逆伝播はその特別な場合です。
- 逆伝播 1 回の計算量は順伝播 1 回の定数倍です。パラメータ数が のとき、数値微分なら に比例する回数の順伝播が要るので、実用規模では 10 万倍以上の差がつきます。
1. 動機:連鎖律を「知っている」ことと「安く計算できる」ことは別
Section titled “1. 動機:連鎖律を「知っている」ことと「安く計算できる」ことは別”勾配降下法では、パラメータ を で更新しました(Definition 4.1[勾配降下法])。この式は勾配 が手に入ることを前提にしています。線形回帰やロジスティック回帰では、勾配を紙の上で 1 行に書き下せました(Theorem 5.1[Logistic Regression])。ところが層を重ねたニューラルネットワークでは、 を の式として展開すると人間が読めない大きさになります。しかもパラメータ数 は、小さなモデルでも 、現代の大規模モデルでは を超えます。
一番素朴な手は差分近似です。 番目のパラメータについて
と計算すれば、微分の公式を一切知らなくても勾配が得られます。しかしこれには の評価が 回必要です。 でも 20 万回、 なら話になりません。さらに、差分近似には打ち切り誤差と丸め誤差のせめぎ合いがあり、精度も限られます(Exercise 9.4)。
一方、ニューラルネットワークは合成関数です。合成関数の微分法(連鎖律)を使えば、微分は原理的には求まります。ではなぜ「逆伝播」という名前のアルゴリズムがわざわざ必要なのでしょうか。答えは計算の順序にあります。層が 個あるとき、連鎖律は
というヤコビ行列の積を与えます( は損失のヤコビ行列で 、 は第 層のヤコビ行列で )。行列の積は結合法則を満たすので、どの順で掛けても答えは同じです。しかしコストは同じではありません。すべての層幅を とすると、
| 掛ける順序 | 途中の形 | 1 回の積のコスト | 全体 |
|---|---|---|---|
| 右から( から) | 行列 | ||
| 左から( から) | 行ベクトル |
逆伝播とは、この表の下の行、すなわち左から掛けるという選択のことです。出力がスカラー(損失は 1 つの実数)だから左端が行ベクトルになり、行ベクトルのまま右へ右へと押し込んでいける。この非対称性が、深層学習を計算可能にしている唯一といってよい仕掛けです。
歴史的には、この「逆向きの微分」は 1970 年に Linnainmaa が丸め誤差の解析のために定式化し([1])、1974 年に Werbos が学習アルゴリズムとして提案し、1986 年の Rumelhart・Hinton・Williams の論文([2])で機械学習の標準手法として広まりました。計算量の一般論としては、Baur と Strassen が 1983 年に「勾配の計算コストは関数値の計算コストの定数倍で抑えられる」ことを証明しています([3])。
2. 準備:記号と、ネットワークの定式化
Section titled “2. 準備:記号と、ネットワークの定式化”記号を固定します。ベクトルはすべて列ベクトルとし、 に対して
- (勾配は列ベクトル)
- のヤコビ行列は
- アダマール積(成分ごとの積)を と書く
- 1 変数関数 をベクトルに施すときは成分ごととし、、 と書く
とします。
Definition 2.1(多層パーセプトロン)
、 とする。各 について行列 、ベクトル 、および 級の 1 変数関数 (活性化関数)が与えられているとする。入力 に対し と置き、 の順に
で定まる を出力とする写像を、 層の多層パーセプトロンという。 を第 層の前活性、 を活性と呼ぶ。パラメータの全体を と書く。
さらに正解 に対する 級の損失関数 を与え、 と置く。
活性化関数 を恒等写像にしてしまうと、ネットワーク全体は というアフィン写像に潰れ、1 層と表現力が変わりません。層を重ねる意味は非線形性にあります。逆にいえば、 が入るせいで を の閉じた式に展開できなくなり、連鎖律が必要になるのです。
Example 2.2(ニューロン 1 個の場合の手計算)
、、 をシグモイド関数 、損失を とします。パラメータは実数 の 2 つで、
1 変数の連鎖律(Theorem 7.2[The Derivative])を 2 回使います。まず 、次に 、最後に 、 です。したがって
ここで と置くと、、 と書けます。つまり「前活性についての微分 」さえ手に入れば、パラメータの微分は に入力を掛けるだけです。この が、以下で として一般化されるものです。
なお なので(Exercise 9.1)、、、、 なら 、、 となり、、、 です。
3. 多変数の連鎖律
Section titled “3. 多変数の連鎖律”逆伝播のすべては、次の定理から出ます。仮定を省かずに述べます。
Theorem 3.1(連鎖律)
、 を開集合とし、写像 が を満たすとする。 が点 で全微分可能、 が点 で全微分可能とする。このとき合成 は で全微分可能で
成分で書けば、、 について
Proof(Theorem 3.1)
、 と置きます。行列の作用素ノルムを とすると、 が成り立ちます。
の における全微分可能性(Definition 4.1[多変数関数の微分と偏微分])とは、 が十分小さいとき
と書けることです。同様に について、 が十分小さいとき
であり、 と定めておきます。 が開集合なので が小さければ であり、 と置けます。2 つの展開を繋ぐと
あとは を示せば、定義より は で全微分可能でヤコビ行列が だと結論できます。
第 1 項は であり、 なので です。
第 2 項を評価します。まず となるほど を小さく取れば
です。 と置きます。任意に を取ります。 の性質から、ある があって ならば です( のときも より成立)。そこで かつ上の評価が使えるほど を小さく取れば となり、
が従います。 は任意だったので です。以上で が示されました。成分表示は行列積 の 成分を書き下したものです。
出力がスカラー()のとき、Theorem 3.1 のヤコビ行列は の行ベクトル、すなわち勾配の転置です。両辺を転置すると
となります。勾配は、ヤコビ行列の転置を掛けることで、出力側から入力側へ運ばれる。この 1 行が逆伝播の正体です。実装では を明示的に作らず、「ベクトルにヤコビ行列の転置を掛ける」操作(vector-Jacobian product)だけを層ごとに用意します。
4. 計算グラフと随伴変数
Section titled “4. 計算グラフと随伴変数”ネットワークを層の列として見る代わりに、スカラー変数の有向非巡回グラフとして見ると、逆伝播の正しさをいちどきに証明できます。分岐(同じ値が複数の場所で使われる)や重み共有も、この見方なら追加の議論なしに扱えます。
Definition 4.1(計算グラフ)
とする。変数 に対し、各 について空でない親集合 と、 の開集合上で定義された 級関数 が与えられているとする。入力 を与えると、 の順に
によってすべての が定まる。この組を計算グラフと呼び、 を出力(スカラー)と呼ぶ。入力から出力を返す写像を と書く。
添字が親より大きいという条件 は、グラフに閉路がなく、 という順番がトポロジカル順序になっていることを意味します。実際のプログラムは演算を 1 つずつ順に実行するので、この条件は自動的に満たされます。
flowchart LR X["x = a⁽⁰⁾"] --> Z1["z⁽¹⁾ = W⁽¹⁾a⁽⁰⁾ + b⁽¹⁾"] P1["W⁽¹⁾, b⁽¹⁾"] --> Z1 Z1 --> A1["a⁽¹⁾ = σ(z⁽¹⁾)"] A1 --> Z2["z⁽²⁾ = W⁽²⁾a⁽¹⁾ + b⁽²⁾"] P2["W⁽²⁾, b⁽²⁾"] --> Z2 Z2 --> A2["a⁽²⁾ = σ(z⁽²⁾)"] A2 --> E["E = ℒ(a⁽²⁾, y)"] Y["y"] --> E
Definition 4.2(随伴変数)
Definition 4.1 の計算グラフと、入力の値 を 1 つ固定する。随伴変数 を、添字の大きい順に
で定める。ここで偏微分は、 の引数のうち に対応するものについての偏微分を、固定した入力から定まる値の組で評価したものとする。
和が意味を持つことを確かめておきます。 ならば ですから、 の右辺に現れる はすべて添字が より大きく、すでに計算済みです。また が誰の親でもなければ和は空で になります。
Theorem 4.3(逆伝播(リバースモード自動微分)の正当性)
Definition 4.1 の計算グラフを考え、入力の値 を、以降に現れるすべての の評価がその定義域の内点で行われるように固定する。このとき Definition 4.2 の随伴変数について
が成り立つ。
Proof(Theorem 4.3)
途中状態から出力への写像を用意します。 各 に対し、 を次で定めます。引数 を受け取り、 の順に を計算し、 を返す。定義域 は、この計算が定義される点の集合の、着目点を含む開近傍とします。各 は 級で、 級写像の合成は Theorem 3.1 より 級なので、 も着目点の近傍で 級です。
定義から 、また です。以下、偏微分はすべて着目点 で評価するものとし、
と書きます。 から、ただちに
がわかります。以下これを基点の式と呼びます。
1 段だけ状態を減らす関係式。 を固定します。 の計算手順の最初の一歩は を作ることで、その後は の手順とまったく同じです。よって が着目点の近くにあるとき
が恒等的に成り立ちます。右辺を と の合成と見て Theorem 3.1 を適用すると、 について
を得ます。以下これを1 段落としの式と呼びます。ただし のときは と約束します( はその変数を含まないので、内側の写像の第 成分の による偏微分が実際に になります)。第 1 項は内側の写像の第 成分(恒等写像)からの寄与、第 2 項は第 成分からの寄与です。
降順の帰納法で を示します。 のときは基点の式と より成立します。 とし、 なるすべての で が成り立つと仮定します。1 段落としの式を に対して と適用して足し合わせると、左辺は望遠鏡的に消えて
となります。 なので基点の式より です。帰納法の仮定 と、 の項が であることを使うと
となり(最後の等号は Definition 4.2)、 でも主張が成り立ちます。 の範囲でこの帰納法が回ります。
入力ノードへの結論。 を固定します。上とまったく同じ計算を に対して行います。1 段落としの式を と適用して足すと
より基点の式から 、また では上で示した が使えるので
を得ます。最初の等号は から、最後の等号は Definition 4.2 の定義式そのものです。
証明を振り返ると、逆伝播が使っているのは Theorem 3.1 と、トポロジカル順序の逆順に走査すれば必要な量がすべて確定済みであるという順序の事実だけです。ネットワークの形(層状か、分岐があるか、重みを共有しているか)は一切使っていません。だから同じアルゴリズムが畳み込みでも再帰型でも Transformer でも動きます。
Example 4.4(分岐のある小さなグラフを手で逆向きに回す)
を計算グラフにします。、 を入力とし、
とします。、、 です。 は と の両方の親になっている(分岐している)点が要です。
、 とすると順伝播は 、、 です。Definition 4.2 に従って添字の大きい順に随伴変数を計算します。
直接微分して確かめます。 に 、 を入れると で と一致します。 で とも一致します。
分岐ノード のところで和が現れたことに注意してください。同じ中間値が下流の複数箇所で使われるとき、随伴変数はそれぞれの経路からの寄与を足し合わせます。Theorem 4.3 の証明で 全体にわたる和を取ったのは、まさにこのためです。
5. 多層ネットワークの逆伝播公式
Section titled “5. 多層ネットワークの逆伝播公式”Theorem 4.3 を Definition 2.1 のネットワークに適用すると、教科書でおなじみの 4 本の式が出ます。
Corollary 5.1(逆伝播の漸化式)
Proof(Corollary 5.1)
スカラー変数 、、、、、 を並べ、 と と と の成分を入力ノード、 を出力ノードとする計算グラフを作ります。トポロジカル順序は の順に取れます。各ノードの生成規則と親は
です。Theorem 4.3 の証明中で示したとおり、入力ノードだけでなく中間ノードについても が成り立ち、これは「その変数を微小に動かしたときの の変化率」に他なりません。 は定義より です。以下、Definition 4.2 の漸化式を各ノードに書き下します。
(i) 最終層。 の子は だけなので ()。次に の子は ただ 1 つで(活性化は成分ごとなので は他の に影響しません)、 ですから
成分ごとの積なので、これはアダマール積で (i) と書けます。
(ii) 中間層。 のとき、 の子は です。 なので
添字の位置に注意してください。 の について和を取るので、現れるのは転置です。続いて の子は だけなので となり、(ii) を得ます。
(iii) パラメータ。 が現れるのは の式の中だけです( の の式には しか現れません)。したがって子は 一つで、 ですから
これは外積 の 成分です。同様に の子は だけで なので です。
(iv) 入力。 の子は で、(ii) の計算と同じ形になり です。
(iii) が実務上いちばん大事な式です。あるパラメータの勾配は「その層の 」と「その層への入力」の外積だけで決まります。Example 2.2 で見た の一般化になっています。(iv) は学習には不要ですが、入力に関する勾配は敵対的サンプルの生成や特徴の可視化に使われます。
アルゴリズムとしてまとめると次のようになります。
- 順伝播: から始め、 の順に を計算し、すべて保存する。
- 出力層の :Corollary 5.1 (i) で を作る。
- 逆伝播: の順に、(iii) で と を確定させ、 なら (ii) で を作る。
手順 1 で と を保存するところが重要です。(ii) と (iii) はどちらも順伝播時の値を必要とするので、逆伝播は順伝播の記録なしには走りません。これが深層学習のメモリ消費の主因です。
import numpy as np
def sigmoid(z): return 1.0 / (1.0 + np.exp(-z))
def forward(Ws, bs, x): """順伝播。前活性 zs と活性 a を層ごとに保存して返す。出力層は恒等活性。""" a, zs = [x], [] L = len(Ws) for l, (W, b) in enumerate(zip(Ws, bs)): z = W @ a[-1] + b zs.append(z) a.append(sigmoid(z) if l < L - 1 else z) return zs, a
def backward(Ws, zs, a, y): """二乗誤差 E = |a_L - y|^2 / 2 に対する逆伝播。dW[l], db[l] を返す。""" L = len(Ws) dWs, dbs = [None] * L, [None] * L delta = a[-1] - y # 系 (i):出力層は恒等活性 for l in range(L - 1, -1, -1): dWs[l] = np.outer(delta, a[l]) # 系 (iii) dbs[l] = delta if l > 0: # 系 (ii) s = sigmoid(zs[l - 1]) delta = s * (1.0 - s) * (Ws[l].T @ delta) return dWs, dbsExample 5.2(2-2-1 ネットワークの数値計算を最後まで)
、、 とします。第 1 層の活性化はシグモイド、第 2 層は恒等写像、損失は とし、
とします。以下、小数第 4 位まで書きます。
順伝播。
逆伝播。 第 2 層の活性化は恒等なので 、また です。Corollary 5.1 (i) より
(iii) から第 2 層のパラメータの勾配が出ます。
(ii) で に降ります。まず
次に から
よってアダマール積を取って
最後に (iii) を で使います。 なので
検算。 について直接微分してみます。 は にしか現れず、、、、 なので、1 変数の連鎖律を繋ぐと
となり、上の行列の 成分と一致します。同様に については で、 の第 1 成分と一致します。
実際によく使われる ReLU は で微分可能でないので、Definition 2.1 の「 級」という仮定を満たしません。実装では を (または )と決め打ちします。これは数学的には劣微分から 1 つ選んでいることに相当します。 ちょうどが起きる確率は測度ゼロで、実務上はまず問題になりません。ただし「勾配」と呼んでいるものが真の勾配とは限らないことは意識しておいてください。
6. なぜ安いのか:計算量
Section titled “6. なぜ安いのか:計算量”Theorem 4.3 は「正しい」ことしか言っていません。逆伝播の値打ちは「安い」ことにあります。それを見積もります。
Proposition 6.1(逆伝播 1 回は順伝播 1 回の定数倍)
Definition 4.1 の計算グラフについて、辺数を とする。各 について、値 の評価と、すべての偏微分 ()の評価が、それぞれ に比例する演算回数でできると仮定する。このとき
であり、後者 1 回で 個の偏微分 がすべて得られる。一方、差分近似で同じ 個を得るには順伝播が 回以上必要で、計算量は となる。
Proof(Proposition 6.1)
順伝播はノード を順に 1 回ずつ処理し、各ノードで の演算を行います。合計は 、ノードの読み書きに かかるので です。
逆伝播は次のように実装します。長さ の配列 を 、それ以外 で初期化します()。次に の順に、各 について
と加算します。この二重ループが触れる回数は辺の総数 に等しく、各回の仕事は偏微分 1 個の評価と積和で ですから、合計 です。
この手続きが Definition 4.2 の定義と一致することを確かめます。 を降順に処理するので、添字 の枠に加算が行われるのは なる すべてについてであり、加算が終わった時点の値は です。しかも の枠が読み出される(すなわち の番が来る)のは、 より大きい添字の処理がすべて終わった後なので、そのとき はすでに確定しています。よって Definition 4.2 と同じ値が得られ、Theorem 4.3 より でそれは です。
差分近似については、 を得るには少なくとも を動かした の評価が 1 回必要で、 ごとに別の評価が要ります。 の 1 回の評価が順伝播 1 回、すなわち なので、全体で です。
Definition 2.1 のネットワークでは、辺数の主要項は で、これはパラメータ数 とほぼ同じです。したがって逆伝播は 、差分近似は になります。 が大きいほど差は開きます。
Example 6.2(784-256-128-10 のネットワークでの見積もり)
手書き数字認識でよく使われるサイズを取ります。、、、 の 3 層ネットワークです。パラメータ数は
です。順伝播 1 回の積和回数は行列ベクトル積が支配的で
回です。Proposition 6.1 より逆伝播も同じオーダーで、実際 (ii) の と (iii) の外積がそれぞれ順伝播と同じ回数の積和なので、勾配計算全体でおよそ 回です。
一方、中心差分で全パラメータの勾配を出すには 回の順伝播が要るので
回の積和になります。比を取ると 、およそ 16 万倍です。逆伝播で 1 秒の学習ステップが、差分近似では 2 日近くかかる計算になります。しかもこれは小さいネットワークでの話で、 が の規模になれば比はさらに 桁開きます。
連鎖律の積 を右から掛ける計算も、それ自体は正当なアルゴリズムで、フォワードモード自動微分と呼ばれます。こちらは 1 回の走査で「入力方向 に沿った方向微分」 を返すので、勾配全体を得るには 回走らせる必要があります。逆に、出力が多くて入力が少ない状況( が小さく が大きい)ではフォワードモードのほうが安上がりです。深層学習ではスカラーの損失を大量のパラメータで微分するので、リバースモード一択になります。
Proposition 6.1 は時間の話で、空間については別の見積もりが要ります。逆伝播は順伝播で作った中間値を保持しなければならないので、メモリは深さに比例して増えます。これを緩和するのが再計算(gradient checkpointing) で、中間値を間引いて保存し、逆伝播中に必要になった区間だけ順伝播をやり直します。 段の連鎖に対して のメモリと の追加計算で済ませられます。詳しくは Griewank と Walther の教科書([4])を参照してください。
7. 出力層と損失を組にする:ソフトマックスと交差エントロピー
Section titled “7. 出力層と損失を組にする:ソフトマックスと交差エントロピー”Corollary 5.1 (i)(ii) は活性化関数が成分ごとであることを使いました。多クラス分類で使うソフトマックス関数はそうではありません。その場合は Remark 3.2 に戻り、ヤコビ行列の転置を掛ける一般形
を使います。ソフトマックスと交差エントロピー(2 クラスの場合が Definition 4.1[Logistic Regression])を組にすると、この積が劇的に簡単になります。
Proposition 7.1(ソフトマックス+交差エントロピーの勾配)
に対しソフトマックスを
で定める。 が かつ を満たすとし、交差エントロピー損失を とする。このとき
が成り立つ。またソフトマックスのヤコビ行列は である。
Proof(Proposition 7.1)
と置きます。 より 、したがって で は定義され、 は 級です。
まず です。 なので であり、
を得ます。ここで は のとき 、 のとき を表す記法とします。これに を掛ければ 、すなわち行列で です。
損失の勾配は、 を経由せずに直接計算するほうが早く済みます。 を で偏微分すると、第 1 項からは 、第 2 項からは が出ます。仮定 と、上で求めた を使えば
となり、主張が従います。
念のため、Remark 3.2 の一般形からも同じ答えになることを確かめます。 の第 成分は なので、 が対称であることに注意して
で一致します。
出力層でソフトマックスを使うとき、実装では と 1 行で書きます。ヤコビ行列 ()を作らずに済むので、クラス数が大きいときの節約は大きくなります。なお が one-hot(正解クラス で 、他は )のときも仮定 は満たされるので、この命題がそのまま使えます。
8. 深さの代償:勾配消失
Section titled “8. 深さの代償:勾配消失”逆伝播は「安い」ですが「よく効く」とは限りません。Corollary 5.1 (ii) を から まで繰り返すと、 は 個の行列と 個の対角行列の積になります。積の各因子が より小さいと、積は指数的に小さくなります。
Proposition 8.1(勾配の大きさの指数的な上界)
Definition 2.1 の設定に加え、ある定数 、 が存在して、すべての とすべての について 、かつ作用素ノルムについて が成り立つとする。このとき任意の について
が成り立つ( はフロベニウスノルム)。とくに がシグモイド関数のときは が取れるので、 ならば が小さくなるにつれて勾配は指数的に へ近づく。
Proof(Proposition 8.1)
Corollary 5.1 (ii) は、 と置けば
と書き直せます(アダマール積は対角行列を左から掛けることと同じです)。
まず を示します。任意の について
なので、作用素ノルムの定義から従います。次に です。実際、特異値分解 ( は直交行列)を取ると で、作用素ノルムは最大特異値に等しく、 と は特異値を共有します(スペクトル定理、とくに Theorem 4.2[スペクトル定理] を参照)。よって です。
作用素ノルムの劣乗法性 を使うと
となり、 についての降順の帰納法で を得ます。
第 2 の不等式は Corollary 5.1 (iii) からです。外積のフロベニウスノルムは
なので、 に第 1 の不等式を代入すればよいです。
最後にシグモイドの場合です。(Exercise 9.1)で と置くと なので です。したがって が取れます。
のとき、たとえば で なら係数は です。入力に近い層のパラメータはほとんど更新されなくなります。これが勾配消失です。逆に なら勾配は指数的に増大し、勾配爆発が起きます。
Proposition 8.1 は上界なので、勾配が必ず消えることを主張してはいません。しかし「何が効いているか」ははっきり読み取れます。(活性化関数の傾きの上限)と (重みの作用素ノルム)の積が から離れると危ない、ということです。実際の対策はこの読みに沿っています。 を上げるために飽和しない ReLU 系を使う、 を の近くに保つように初期化を設計する(層の入出力幅に応じて分散を決める Glorot らの初期化)、恒等写像の経路を足して積の因子に を混ぜる残差接続、前活性のスケールを揃える正規化層、といったものです。詳しくは Goodfellow らの教科書([5])の第 8 章を参照してください。
シグモイド関数 について、次を示してください。
- 。
- であり、最大値は でのみ取られる。
Solution
1. を商の微分法(あるいは合成関数の微分法)で微分します。
ここで なので
を得ます。
2. と置きます。 は から開区間 の上への狭義単調増加な全単射なので、 を動かすことは を で動かすことと同じです。 を評価すると
なので であり、等号は のとき、すなわち すなわち のときに限ります。 なので最大値 は実際に達成されます。
この が Proposition 8.1 の定数 です。シグモイドを重ねると勾配が最低でも 4 分の 1 ずつ縮む、というのがこの計算の意味です。
再帰型ネットワーク(RNN)では、同じ重み行列が各時刻で使い回されます。 を固定された初期状態、 を入力列とし、 級の成分ごとの活性化 に対して
と定めます。損失 は の 級関数とします。 と置くとき
を Theorem 4.3 から導いてください。
Solution
スカラー変数を並べた計算グラフを作ります。入力ノードは 、、、 と の成分、中間ノードは と 、出力ノードは です。トポロジカル順序は時刻の順に取れます。
がどのノードの式に現れるかを数えます。 なので、 が現れるのは のときだけ、すなわち
の 個です。ここが要点で、同じパラメータが 個の子を持つ、つまり Example 4.4 の と同じ分岐ノードになっています。
局所偏微分は です( はグラフ上の別のノードであって、 の関数として展開する必要はありません。これが計算グラフで考える利点です)。Definition 4.2 の漸化式を に適用すると、子の全体にわたる和として
が得られます。 は入力ノードなので Theorem 4.3 より であり、これを行列としてまとめれば です。
一般に、重みを共有したら勾配は各出現箇所の寄与の和になるというのがここでの教訓です。畳み込み層で 1 つのフィルタ係数の勾配が全位置にわたる和になるのも、まったく同じ理由です。
Proposition 7.1 のソフトマックスのヤコビ行列 について、次を示してください。 とします。
- 。これはソフトマックスのどんな性質を表していますか。
- 任意の に対して 、すなわち は半正定値。
Solution
1. です。また (ソフトマックスの定義から分子の総和が分母に等しい)なので です。差を取って を得ます。
意味はシフト不変性です。 方向の方向微分が ということは、 に定数ベクトル を足しても 1 次の変化がないということです。実際、定義に戻れば
で、厳密に不変です。数値計算で を引いてよいのはこの等式によります。
2. 成分で書くと
、 なので、 を 上の確率分布と見て、 をその分布に従い値 を確率 で取る確率変数とすれば、右辺は です。
確率を持ち出さずに示すこともできます。 と置くと
であり、左辺は非負の項の和なので非負です。ついでに、等号成立は全部の が等しいとき、すなわち のときに限ることもわかり、1 の結果と整合します。
逆伝播の実装が正しいかを確かめるには、数値微分と突き合わせるのが定石です(gradient check)。1 変数の 級関数 について中心差分
を考えます。 とし、 の値の計算には相対誤差 程度の丸め誤差が乗るとします(倍精度なら )。
- 打ち切り誤差が で抑えられることを示してください。
- 丸め誤差の寄与を と見積もり、両者の和を最小にする と、そのときの誤差の大きさを求めてください。、 で数値を出してください。
Solution
1. テイラーの定理(Theorem 5.3[Mean Value Theorems and Taylor's Theorem]、ラグランジュの剰余項付き、3 次まで)を のまわりで使います。ある 、 があって
です。辺々引くと の項と の項が消えて
両辺を で割ると
三角不等式と から です。 の項が打ち消し合うのが中心差分の利点で、前進差分 なら誤差は にしかなりません。
2. の計算値はそれぞれ 程度の絶対誤差を持ちます。分子で最大 、 で割って です。誤差の総和を
と置きます。 で、 は と同値です。 なので、この停留点
が最小点です。、 を入れると です。このとき
となります。つまり中心差分では 程度の精度が限界で、 をこれ以上小さくすると丸め誤差でかえって悪化します。
実務上の指針もここから出ます。gradient check では 前後を使い、逆伝播の値との相対差が 程度なら合格、 を超えたら実装を疑う、という判定が使われます。Proposition 6.1 のとおりこのチェックは高価なので、パラメータを数個だけ抜き取って行います。
- S. Linnainmaa, “Taylor expansion of the accumulated rounding error”, BIT Numerical Mathematics 16 (1976), 146–160. DOI: 10.1007/BF01931367 — リバースモード自動微分の最初の定式化。
- D. E. Rumelhart, G. E. Hinton, R. J. Williams, “Learning representations by back-propagating errors”, Nature 323 (1986), 533–536. DOI: 10.1038/323533a0 — 逆伝播をニューラルネットワークの学習として提示した論文。
- W. Baur, V. Strassen, “The complexity of partial derivatives”, Theoretical Computer Science 22 (1983), 317–330. DOI: 10.1016/0304-3975(83)90110-X — 勾配の計算コストが関数値の計算コストの定数倍で済むことの証明。
- A. Griewank, A. Walther, Evaluating Derivatives: Principles and Techniques of Algorithmic Differentiation, 2nd ed., SIAM, 2008 — 第 3 章(リバースモード)と、checkpointing を扱う章。
- I. Goodfellow, Y. Bengio, A. Courville, Deep Learning, MIT Press, 2016 — 第 6 章 6.5 節(Back-Propagation and Other Differentiation Algorithms)、第 8 章(最適化の困難)。
- W. Rudin, Principles of Mathematical Analysis, 3rd ed., McGraw-Hill, 1976 — 第 9 章(多変数関数の微分、連鎖律)。
Appendix: ミニバッチのテンソル形式
Section titled “Appendix: ミニバッチのテンソル形式”1 サンプルずつではなく、 個まとめて処理する形に書き直します。 実装では入力を列に並べた行列 を使い、
とします( は全成分 のベクトルで、第 2 項はバイアスを全列に複製する操作です)。損失はサンプルごとの損失の和 とします。
勾配は「サンプルごとの外積の和」になります。 を、第 列がサンプル に対する である行列とします。 が和の形なので、Corollary 5.1 (iii) をサンプルごとに適用して足し合わせると
が得られます。中央の等号は「行列の積は列ベクトルの外積の和に分解できる」という行列の積(Definition 4.1[Matrices and Linear Systems])の基本性質です。 の漸化式も列ごとに同じ式なので、そのまま行列形になります。
ここで は行列の成分ごとの積です。ミニバッチ化によってループが行列積 1 回に置き換わり、GPU の演算器を埋められるようになります。深層学習の実装がほぼすべて行列積の羅列になっているのは、この書き換えの結果です。
Report an error in this article ・Operated by: Mugen Giken LLC ・Pricing ・Terms ・Legal notice
© 2026 夢現技研合同会社 ・Feeding the text to an LLM is welcome. Code samples are MIT licensed.