この 章の 目標
多層パーセプトロンを 行列の 式で 書き、非線形な 活性化関数が 必要な 理由を 説明できる
連鎖律から 誤差逆伝播法を 導き、誤差 δ ( l ) \delta^{(l)} δ ( l ) の 漸化式と 勾配の 式を 証明できる
自動微分の 前向きモードと 後ろ 向きモードの 違いを 説明し、スカラー値関数の 勾配が 関数の 評価の 定数倍の 手間で 求まる ことを 証明できる
勾配消失・爆発を 活性化関数の 微分と 重みの 大きさで 説明し、Xavier・He の 初期化の 分散の 条件を 導ける
万能近似定理を 仮定まで 正確に 述べ、1 次元では ReLU に よる 折れ線近似で 構成的に 証明できる
畳み込み層と 注意機構の 式を 読み、パラメータの 共有や 並べ替えに 対する 性質を 説明できる
前提 :第2章 (ロジスティック回帰・ソフトマックスと 交差エントロピー)、 01-calculus 第7章 (連鎖律)。5.7 節では 01-calculus 第3章 の ハイネ–カントールの 定理を 使う。学習に 使う 勾配法と 確率的勾配降下法は 23-optimization 第5章 ・23-optimization 第7章 で 扱う。
製品の 画像から 傷を 見つける、文章の 続きを 予測する ――入力が 画素や 単語の 列のような 生の 高次元データの とき、 第2章 の 線形モデルに 入れる 特徴量を 人が 設計するのは 難しい。 ニューラルネットワーク (neural network) は 特徴量を 作る 部分まで パラメータで 表し、予測と 一緒に データから 学習する。式の 上での 線形モデルとの 違いは、1 次式と 非線形な 関数を 交互に 何度も 合成する ことだけである。
本章では、多層パーセプトロン(5.1 節)、勾配を 求める 誤差逆伝播法と 自動微分(5.2・5.3 節)、勾配消失・爆発と その 対策(5.4〜5.6 節)、万能近似定理(5.7 節)を 扱い、畳み込み層と 注意機構の 式の 読み方を 紹介する(5.8・5.9 節)。学習は 凸でない 最適化問題で、勾配法が なぜ う まく いくのか、なぜ汎化するのかの 理論は 発展の 途中に ある。本章では 確かに 言える ことを 証明し、経験則は 経験則と して 述べる。汎化の 理論は 第6章で 扱う。
5.1 多層パーセプトロン
定義 5.1 (多層パーセプトロン, multilayer perceptron)正の 整数 L L L , d 0 , d 1 , … , d L d_0, d_1, \dots, d_L d 0 , d 1 , … , d L と 関数 ϕ : R → R \phi\colon \mathbb{R} \to \mathbb{R} ϕ : R → R を 定める。パラメータ θ = ( W ( 1 ) , b ( 1 ) , … , W ( L ) , b ( L ) ) \theta = (W^{(1)}, b^{(1)}, \dots, W^{(L)}, b^{(L)}) θ = ( W ( 1 ) , b ( 1 ) , … , W ( L ) , b ( L ) ) (W ( l ) ∈ R d l × d l − 1 W^{(l)} \in \mathbb{R}^{d_l \times d_{l-1}} W ( l ) ∈ R d l × d l − 1 , b ( l ) ∈ R d l b^{(l)} \in \mathbb{R}^{d_l} b ( l ) ∈ R d l )に 対し、入力 x ∈ R d 0 x \in \mathbb{R}^{d_0} x ∈ R d 0 から
h ( 0 ) = x , z ( l ) = W ( l ) h ( l − 1 ) + b ( l ) , h ( l ) = ϕ ( z ( l ) ) ( l = 1 , … , L − 1 ) , z ( L ) = W ( L ) h ( L − 1 ) + b ( L ) h^{(0)} = x, \qquad z^{(l)} = W^{(l)}h^{(l-1)} + b^{(l)}, \qquad h^{(l)} = \phi(z^{(l)}) \quad (l = 1, \dots, L - 1), \qquad z^{(L)} = W^{(L)}h^{(L-1)} + b^{(L)} h ( 0 ) = x , z ( l ) = W ( l ) h ( l − 1 ) + b ( l ) , h ( l ) = ϕ ( z ( l ) ) ( l = 1 , … , L − 1 ) , z ( L ) = W ( L ) h ( L − 1 ) + b ( L )
に よって f θ ( x ) = z ( L ) ∈ R d L f_\theta(x) = z^{(L)} \in \mathbb{R}^{d_L} f θ ( x ) = z ( L ) ∈ R d L を 計算する 関数 f θ f_\theta f θ を、L L L 層の 多層パーセプトロン (MLP) と いう。 ϕ ( z ) \phi(z) ϕ ( z ) は ベクトル z z z の 各成分に ϕ \phi ϕ を 施した ものである。 ϕ \phi ϕ を 活性化関数 (activation function)、z ( l ) z^{(l)} z ( l ) を 前活性 (pre-activation)、h ( 1 ) , … , h ( L − 1 ) h^{(1)}, \dots, h^{(L-1)} h ( 1 ) , … , h ( L − 1 ) を 隠れ層 (hidden layer)、d l d_l d l を 層の 幅 、L L L を 深さ 、W ( l ) W^{(l)} W ( l ) を 重み (weight)、b ( l ) b^{(l)} b ( l ) を バイアス (bias) と いう。
出力 z ( L ) z^{(L)} z ( L ) は 損失に 渡す(回帰なら 二乗損失、 K K K クラスの 分類なら d L = K d_L = K d L = K と して 第2章の 交差エントロピー損失 − log softmax ( z ) y -\log\operatorname{softmax}(z)_y − log softmax ( z ) y )。L = 1 L = 1 L = 1 なら 第2章の 線形モデルその もので、多層パーセプトロンは「学習した 特徴量 h ( L − 1 ) h^{(L-1)} h ( L − 1 ) の 上の 線形モデル」と みる ことができる。パラメータの 個数は ∑ l = 1 L d l ( d l − 1 + 1 ) \sum_{l=1}^{L}d_l(d_{l-1} + 1) ∑ l = 1 L d l ( d l − 1 + 1 ) である(層の 数え方は 文献に よって 異なる)。
例 5.2 (活性化関数)ロジスティック関数 σ ( t ) = 1 / ( 1 + e − t ) \sigma(t) = 1/(1 + e^{-t}) σ ( t ) = 1/ ( 1 + e − t ) (シグモイド関数とも いう。 σ ′ = σ ( 1 − σ ) \sigma' = \sigma(1 - \sigma) σ ′ = σ ( 1 − σ ) )、tanh t = 2 σ ( 2 t ) − 1 \tanh t = 2\sigma(2t) - 1 tanh t = 2 σ ( 2 t ) − 1 (tanh ′ = 1 − tanh 2 \tanh' = 1 - \tanh^2 tanh ′ = 1 − tanh 2 )、ReLU ReLU ( t ) = max ( t , 0 ) \operatorname{ReLU}(t) = \max(t, 0) ReLU ( t ) = max ( t , 0 ) (微分は t > 0 t > 0 t > 0 で 1 1 1 、t < 0 t < 0 t < 0 で 0 0 0 で、t = 0 t = 0 t = 0 では 微分できない)。ReLU は 計算が 軽く、正の 側で 微分が 0 0 0 に 近づかない(飽和しない)ので、現在の 深い ネットワークの 多くは ReLU や その 変種を 使う。
活性化関数が 1 次式 ϕ ( t ) = α t + β \phi(t) = \alpha t + \beta ϕ ( t ) = α t + β なら、h ( l − 1 ) = A x + c h^{(l-1)} = Ax + c h ( l − 1 ) = A x + c の とき h ( l ) = α W ( l ) A x + α ( W ( l ) c + b ( l ) ) + β 1 h^{(l)} = \alpha W^{(l)}Ax + \alpha(W^{(l)}c + b^{(l)}) + \beta\mathbf{1} h ( l ) = α W ( l ) A x + α ( W ( l ) c + b ( l ) ) + β 1 (1 \mathbf{1} 1 は 成分が すべて 1 1 1 の ベクトル)なので、帰納法で f θ f_\theta f θ は x x x の 1 次式に なり、層を 重ねる 意味が ない。表現力を 生むのは 非線形な ϕ \phi ϕ である。
例 5.3 (排他的論理和)x ∈ { 0 , 1 } 2 x \in \lbrace 0, 1 \rbrace^2 x ∈ { 0 , 1 } 2 で、x 1 ≠ x 2 x_1 \neq x_2 x 1 = x 2 の ときだけ y = 1 y = 1 y = 1 と する(XOR)。1 次式 g ( x ) = w 1 x 1 + w 2 x 2 + b g(x) = w_1x_1 + w_2x_2 + b g ( x ) = w 1 x 1 + w 2 x 2 + b で「g ( x ) > 0 g(x) > 0 g ( x ) > 0 なら 1 1 1 」と 分類できたとすると g ( 1 , 0 ) + g ( 0 , 1 ) > 0 ≥ g ( 0 , 0 ) + g ( 1 , 1 ) g(1, 0) + g(0, 1) > 0 \geq g(0, 0) + g(1, 1) g ( 1 , 0 ) + g ( 0 , 1 ) > 0 ≥ g ( 0 , 0 ) + g ( 1 , 1 ) だが、両辺は ともに w 1 + w 2 + 2 b w_1 + w_2 + 2b w 1 + w 2 + 2 b で 矛盾する。一方、隠れユニット 2 個の ネットワーク f ( x ) = ReLU ( x 1 + x 2 ) − 2 ReLU ( x 1 + x 2 − 1 ) f(x) = \operatorname{ReLU}(x_1 + x_2) - 2\operatorname{ReLU}(x_1 + x_2 - 1) f ( x ) = ReLU ( x 1 + x 2 ) − 2 ReLU ( x 1 + x 2 − 1 ) は ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) (0, 0), (1, 0), (0, 1), (1, 1) ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) で 0 , 1 , 1 , 0 0, 1, 1, 0 0 , 1 , 1 , 0 を とり、XOR を 正確に 表す。隠れ層が 入力を 線形分離できる 特徴量に 変換しているのである。
学習では、経験リスク(第1章 定義 1.2)に 多くの 場合 重み減衰 (weight decay) λ 2 ∑ l ∥ W ( l ) ∥ F 2 \frac{\lambda}{2}\sum_l\lVert W^{(l)} \rVert_F^2 2 λ ∑ l ∥ W ( l ) ∥ F 2 (∥ ⋅ ∥ F \lVert \cdot \rVert_F ∥ ⋅ ∥ F は 成分の 2 乗和の 平方根)を 加えた ものを、ランダムに 選んだ 少数の データ(ミニバッチ)での 勾配の 平均 g g g に よる 更新 θ ← θ − η g \theta \leftarrow \theta - \eta g θ ← θ − η g (確率的勾配降下法 。23-optimization 第7章 )などで 小さく する。必要なのは 1 つの データでの 損失の 勾配で、それを 求めるのが 次節の 誤差逆伝播法である。
例 5.4 (凸でない こと) f ( x ) = a w x f(x) = awx f ( x ) = a w x (活性化関数は 恒等写像)に、データ 1 点 ( x , y ) = ( 1 , 1 ) (x, y) = (1, 1) ( x , y ) = ( 1 , 1 ) と 損失 ( f ( x ) − y ) 2 (f(x) - y)^2 ( f ( x ) − y ) 2 を 使うと、 J ( a , w ) = ( a w − 1 ) 2 J(a, w) = (aw - 1)^2 J ( a , w ) = ( a w − 1 ) 2 は ( 1 , 1 ) (1, 1) ( 1 , 1 ) と ( − 1 , − 1 ) (-1, -1) ( − 1 , − 1 ) で 最小値 0 0 0 を とるが 中点 ( 0 , 0 ) (0, 0) ( 0 , 0 ) では 1 1 1 で、凸でない。隠れユニットを 重みごと 入れ替えても f θ f_\theta f θ は 変わらないので、最小点は 対称な 組で 現れる。経験リスクは 一般に 凸でなく、勾配法が 大域的な 最小点に 達する 保証は ないが、多くの 応用で 訓練誤差を 十分 小さく できる ことが 経験的に 知られている。
5.2 誤差逆伝播法
1 つの データ ( x , y ) (x, y) ( x , y ) での 損失 J ( θ ) = ℓ ( y , f θ ( x ) ) J(\theta) = \ell(y, f_\theta(x)) J ( θ ) = ℓ ( y , f θ ( x )) の 勾配を 求める。数値微分では 全成分に パラメータの 数に 比例する 回数の 前向きの 計算が 要るが、連鎖律を 後ろの 層から 使えば 前向きの 計算の 数倍で 済む。 ∂ J / ∂ W \partial J/\partial W ∂ J / ∂ W は W W W と 同じ形で ( j , k ) (j, k) ( j , k ) 成分が ∂ J / ∂ W j k \partial J/\partial W_{jk} ∂ J / ∂ W j k の 行列、勾配は 縦ベクトル、 u ⊙ v u \odot v u ⊙ v は 成分ごとの 積、 ϕ ′ ( z ) \phi'(z) ϕ ′ ( z ) は z z z の 各成分に ϕ ′ \phi' ϕ ′ を 施した ベクトルと する。
定理 5.5 (誤差逆伝播法, backpropagation)入力 x x x と 正解 y y y を 固定する。損失 ℓ ( y , ⋅ ) : R d L → R \ell(y, \cdot)\colon \mathbb{R}^{d_L} \to \mathbb{R} ℓ ( y , ⋅ ) : R d L → R は z ( L ) z^{(L)} z ( L ) で 微分可能、 ϕ \phi ϕ は 前活性の 各成分 z j ( l ) z^{(l)}_j z j ( l ) (1 ≤ l ≤ L − 1 1 \leq l \leq L - 1 1 ≤ l ≤ L − 1 )で 微分可能と する。ベクトル δ ( L ) , … , δ ( 1 ) \delta^{(L)}, \dots, \delta^{(1)} δ ( L ) , … , δ ( 1 ) を
δ ( L ) = ∇ z ℓ ( y , z ( L ) ) , δ ( l ) = ϕ ′ ( z ( l ) ) ⊙ ( W ( l + 1 ) ⊤ δ ( l + 1 ) ) ( l = L − 1 , … , 1 ) \delta^{(L)} = \nabla_z\ell(y, z^{(L)}), \qquad \delta^{(l)} = \phi'(z^{(l)}) \odot \left(W^{(l+1)\top}\delta^{(l+1)}\right) \quad (l = L - 1, \dots, 1) δ ( L ) = ∇ z ℓ ( y , z ( L ) ) , δ ( l ) = ϕ ′ ( z ( l ) ) ⊙ ( W ( l + 1 ) ⊤ δ ( l + 1 ) ) ( l = L − 1 , … , 1 )
で 定めると、 J J J は θ \theta θ で 微分可能で、 l = 1 , … , L l = 1, \dots, L l = 1 , … , L に ついて
∂ J ∂ W ( l ) = δ ( l ) h ( l − 1 ) ⊤ , ∂ J ∂ b ( l ) = δ ( l ) \frac{\partial J}{\partial W^{(l)}} = \delta^{(l)}h^{(l-1)\top}, \qquad \frac{\partial J}{\partial b^{(l)}} = \delta^{(l)} ∂ W ( l ) ∂ J = δ ( l ) h ( l − 1 ) ⊤ , ∂ b ( l ) ∂ J = δ ( l )
すな わち ∂ J / ∂ W j k ( l ) = δ j ( l ) h k ( l − 1 ) \partial J/\partial W^{(l)}_{jk} = \delta^{(l)}_jh^{(l-1)}_k ∂ J / ∂ W j k ( l ) = δ j ( l ) h k ( l − 1 ) である。δ ( l ) \delta^{(l)} δ ( l ) は、第 l l l 層の 前活性を 変数と みて 残りの 層を 計算した 損失の、 z ( l ) z^{(l)} z ( l ) での 勾配に 等しい。 δ ( l ) \delta^{(l)} δ ( l ) を 第 l l l 層の 誤差 (error) と いう。
証明. パラメータを 固定し、 G L ( z ) = ℓ ( y , z ) G_L(z) = \ell(y, z) G L ( z ) = ℓ ( y , z ) 、G l ( z ) = G l + 1 ( W ( l + 1 ) ϕ ( z ) + b ( l + 1 ) ) G_l(z) = G_{l+1}(W^{(l+1)}\phi(z) + b^{(l+1)}) G l ( z ) = G l + 1 ( W ( l + 1 ) ϕ ( z ) + b ( l + 1 ) ) (l < L l < L l < L )で G l : R d l → R G_l\colon \mathbb{R}^{d_l} \to \mathbb{R} G l : R d l → R を 定める。 G l ( z ) G_l(z) G l ( z ) は 第 l l l 層の 前活性を z z z に 置き換えて 残りの 層を 計算した 損失で、どの l l l でも J = G l ( z ( l ) ) J = G_l(z^{(l)}) J = G l ( z ( l ) ) である。
(1) ∇ G l ( z ( l ) ) = δ ( l ) \nabla G_l(z^{(l)}) = \delta^{(l)} ∇ G l ( z ( l ) ) = δ ( l ) を l l l に ついて 下向きの 帰納法で 示す。 l = L l = L l = L では 定義 その ものである。成分ごとに ϕ \phi ϕ を 施す写像 Φ \Phi Φ は、ϕ ( z j + u j ) = ϕ ( z j ) + ϕ ′ ( z j ) u j + r j \phi(z_j + u_j) = \phi(z_j) + \phi'(z_j)u_j + r_j ϕ ( z j + u j ) = ϕ ( z j ) + ϕ ′ ( z j ) u j + r j 、r j = o ( ∣ u j ∣ ) r_j = o(\lvert u_j \rvert) r j = o (∣ u j ∣) と ∣ u j ∣ ≤ ∥ u ∥ \lvert u_j \rvert \leq \lVert u \rVert ∣ u j ∣ ≤ ∥ u ∥ より、z ( l ) z^{(l)} z ( l ) で 微分可能で ヤコビ行列は diag ( ϕ ′ ( z ( l ) ) ) \operatorname{diag}(\phi'(z^{(l)})) diag ( ϕ ′ ( z ( l ) )) である。アフィン写像 h ↦ W ( l + 1 ) h + b ( l + 1 ) h \mapsto W^{(l+1)}h + b^{(l+1)} h ↦ W ( l + 1 ) h + b ( l + 1 ) の ヤコビ行列は W ( l + 1 ) W^{(l+1)} W ( l + 1 ) で、この 2 つの 合成は z ( l ) z^{(l)} z ( l ) を z ( l + 1 ) z^{(l+1)} z ( l + 1 ) に 写す。連鎖律( 01-calculus 第7章 定理 7.14)と 帰納法の 仮定より、 G l G_l G l は z ( l ) z^{(l)} z ( l ) で 微分可能で D G l ( z ( l ) ) = D G l + 1 ( z ( l + 1 ) ) W ( l + 1 ) diag ( ϕ ′ ( z ( l ) ) ) DG_l(z^{(l)}) = DG_{l+1}(z^{(l+1)})W^{(l+1)}\operatorname{diag}(\phi'(z^{(l)})) D G l ( z ( l ) ) = D G l + 1 ( z ( l + 1 ) ) W ( l + 1 ) diag ( ϕ ′ ( z ( l ) )) 。転置して ∇ G l ( z ( l ) ) = diag ( ϕ ′ ( z ( l ) ) ) W ( l + 1 ) ⊤ δ ( l + 1 ) = δ ( l ) \nabla G_l(z^{(l)}) = \operatorname{diag}(\phi'(z^{(l)}))W^{(l+1)\top}\delta^{(l+1)} = \delta^{(l)} ∇ G l ( z ( l ) ) = diag ( ϕ ′ ( z ( l ) )) W ( l + 1 ) ⊤ δ ( l + 1 ) = δ ( l ) 。
(2) ( θ , h ) ↦ W ( l ) h + b ( l ) (\theta, h) \mapsto W^{(l)}h + b^{(l)} ( θ , h ) ↦ W ( l ) h + b ( l ) の 成分は 多項式で C 1 C^1 C 1 級なので 微分可能であり( 01-calculus 第7章 の 定理 7.13)、これと Φ \Phi Φ の 合成を 繰り返した θ ↦ z ( L ) \theta \mapsto z^{(L)} θ ↦ z ( L ) は 連鎖律に より 微分可能で、 J J J も 微分可能である。
(3) W ( l ) , b ( l ) W^{(l)}, b^{(l)} W ( l ) , b ( l ) 以外を 固定すると、 h ( l − 1 ) h^{(l-1)} h ( l − 1 ) は 第 l − 1 l - 1 l − 1 層までの パラメータで 決まるので 定数であり、 G l G_l G l は 第 l + 1 l + 1 l + 1 層以降の パラメータで 決まる。 J = G l ( W ( l ) h ( l − 1 ) + b ( l ) ) J = G_l(W^{(l)}h^{(l-1)} + b^{(l)}) J = G l ( W ( l ) h ( l − 1 ) + b ( l ) ) で、∂ z i ( l ) / ∂ W j k ( l ) = 1 { i = j } h k ( l − 1 ) \partial z^{(l)}_i/\partial W^{(l)}_{jk} = \mathbf{1}\lbrace i = j \rbrace h^{(l-1)}_k ∂ z i ( l ) / ∂ W j k ( l ) = 1 { i = j } h k ( l − 1 ) 、∂ z i ( l ) / ∂ b j ( l ) = 1 { i = j } \partial z^{(l)}_i/\partial b^{(l)}_j = \mathbf{1}\lbrace i = j \rbrace ∂ z i ( l ) / ∂ b j ( l ) = 1 { i = j } だから、連鎖律と (1) より ∂ J / ∂ W j k ( l ) = ∑ i δ i ( l ) 1 { i = j } h k ( l − 1 ) = δ j ( l ) h k ( l − 1 ) \partial J/\partial W^{(l)}_{jk} = \sum_i\delta^{(l)}_i\mathbf{1}\lbrace i = j \rbrace h^{(l-1)}_k = \delta^{(l)}_jh^{(l-1)}_k ∂ J / ∂ W j k ( l ) = ∑ i δ i ( l ) 1 { i = j } h k ( l − 1 ) = δ j ( l ) h k ( l − 1 ) 、∂ J / ∂ b j ( l ) = δ j ( l ) \partial J/\partial b^{(l)}_j = \delta^{(l)}_j ∂ J / ∂ b j ( l ) = δ j ( l ) である。□ \square □
定理 5.5 に より、(i) 前 向きに z ( l ) , h ( l ) z^{(l)}, h^{(l)} z ( l ) , h ( l ) を 計算して 保存し、(ii) 後ろ 向きに δ ( L ) , … , δ ( 1 ) \delta^{(L)}, \dots, \delta^{(1)} δ ( L ) , … , δ ( 1 ) を 求め、(iii) 外積 δ ( l ) h ( l − 1 ) ⊤ \delta^{(l)}h^{(l-1)\top} δ ( l ) h ( l − 1 ) ⊤ を 作れば 勾配が 得られる。誤差が 出力側から 入力側へ 逆向きに 伝わるので 誤差逆伝播法と いう(ラメルハート・ヒントン・ウィリアムズの 1986 年の 論文で 広く 知られた)。乗算は 前向きが ∑ l d l d l − 1 \sum_ld_ld_{l-1} ∑ l d l d l − 1 回、後ろ 向きが その 約 2 倍なので、勾配の 全成分が 前向き計算の 約 3 倍の 手間で 求まる。 δ ( L ) \delta^{(L)} δ ( L ) は、二乗損失 1 2 ∥ z − y ∥ 2 \frac{1}{2}\lVert z - y \rVert^2 2 1 ∥ z − y ∥ 2 なら z ( L ) − y z^{(L)} - y z ( L ) − y 、交差エントロピー損失なら softmax ( z ( L ) ) − e y \operatorname{softmax}(z^{(L)}) - e_y softmax ( z ( L ) ) − e y である(第2章の 命題 2.20)。ミニバッチでは 勾配を 平均する。
例 5.6 (手計算)d 0 = d 1 = 2 d_0 = d_1 = 2 d 0 = d 1 = 2 、d 2 = 1 d_2 = 1 d 2 = 1 、ϕ = ReLU \phi = \operatorname{ReLU} ϕ = ReLU 、J = 1 2 ( z ( 2 ) − y ) 2 J = \frac{1}{2}(z^{(2)} - y)^2 J = 2 1 ( z ( 2 ) − y ) 2 とし、
W ( 1 ) = ( 1 − 1 0.5 1 ) , b ( 1 ) = ( 0.5 − 1 ) , W ( 2 ) = ( 2 − 1 ) , b ( 2 ) = 0.5 , x = ( 1 2 ) , y = 1 W^{(1)} = \begin{pmatrix} 1 & -1 \\ 0.5 & 1 \end{pmatrix}, \quad b^{(1)} = \begin{pmatrix} 0.5 \\ -1 \end{pmatrix}, \quad W^{(2)} = \begin{pmatrix} 2 & -1 \end{pmatrix}, \quad b^{(2)} = 0.5, \quad x = \begin{pmatrix} 1 \\ 2 \end{pmatrix}, \quad y = 1 W ( 1 ) = ( 1 0.5 − 1 1 ) , b ( 1 ) = ( 0.5 − 1 ) , W ( 2 ) = ( 2 − 1 ) , b ( 2 ) = 0.5 , x = ( 1 2 ) , y = 1
と する。前向き計算は z ( 1 ) = ( − 0.5 , 1.5 ) ⊤ z^{(1)} = (-0.5, 1.5)^{\top} z ( 1 ) = ( − 0.5 , 1.5 ) ⊤ 、h ( 1 ) = ( 0 , 1.5 ) ⊤ h^{(1)} = (0, 1.5)^{\top} h ( 1 ) = ( 0 , 1.5 ) ⊤ 、z ( 2 ) = − 1 z^{(2)} = -1 z ( 2 ) = − 1 、J = 2 J = 2 J = 2 。後ろ 向き計算は δ ( 2 ) = z ( 2 ) − y = − 2 \delta^{(2)} = z^{(2)} - y = -2 δ ( 2 ) = z ( 2 ) − y = − 2 、W ( 2 ) ⊤ δ ( 2 ) = ( − 4 , 2 ) ⊤ W^{(2)\top}\delta^{(2)} = (-4, 2)^{\top} W ( 2 ) ⊤ δ ( 2 ) = ( − 4 , 2 ) ⊤ 、ϕ ′ ( z ( 1 ) ) = ( 0 , 1 ) ⊤ \phi'(z^{(1)}) = (0, 1)^{\top} ϕ ′ ( z ( 1 ) ) = ( 0 , 1 ) ⊤ より δ ( 1 ) = ( 0 , 2 ) ⊤ \delta^{(1)} = (0, 2)^{\top} δ ( 1 ) = ( 0 , 2 ) ⊤ で、
∂ J ∂ W ( 2 ) = ( 0 − 3 ) , ∂ J ∂ b ( 2 ) = − 2 , ∂ J ∂ W ( 1 ) = δ ( 1 ) x ⊤ = ( 0 0 2 4 ) , ∂ J ∂ b ( 1 ) = ( 0 2 ) \frac{\partial J}{\partial W^{(2)}} = \begin{pmatrix} 0 & -3 \end{pmatrix}, \quad \frac{\partial J}{\partial b^{(2)}} = -2, \quad \frac{\partial J}{\partial W^{(1)}} = \delta^{(1)}x^{\top} = \begin{pmatrix} 0 & 0 \\ 2 & 4 \end{pmatrix}, \quad \frac{\partial J}{\partial b^{(1)}} = \begin{pmatrix} 0 \\ 2 \end{pmatrix} ∂ W ( 2 ) ∂ J = ( 0 − 3 ) , ∂ b ( 2 ) ∂ J = − 2 , ∂ W ( 1 ) ∂ J = δ ( 1 ) x ⊤ = ( 0 2 0 4 ) , ∂ b ( 1 ) ∂ J = ( 0 2 )
前活性に 0 0 0 が ないので 定理 5.5 の 仮定は 満たされ、中心差分に よる 数値微分とも 一致する(計算機で 確かめた)。第 1 隠れユニットは 前活性が 負なので、入る 重みの 勾配は 0 0 0 である(すべての 訓練データで こうなると 更新されない。いわゆる「死んだ」ReLU)。
実装した 逆伝播は 数値微分と 比べて 確かめる(勾配確認)。 J J J が C 3 C^3 C 3 級なら、テイラーの 定理より 中心差分 ( J ( θ + h e k ) − J ( θ − h e k ) ) / ( 2 h ) (J(\theta + he_k) - J(\theta - he_k))/(2h) ( J ( θ + h e k ) − J ( θ − h e k )) / ( 2 h ) と ∂ J / ∂ θ k \partial J/\partial\theta_k ∂ J / ∂ θ k の 差は O ( h 2 ) O(h^2) O ( h 2 ) で、これに 丸め誤差(倍精度で およそ 10 − 16 ∣ J ∣ / h 10^{-16}\lvert J \rvert/h 1 0 − 16 ∣ J ∣ / h )が 加わる。次の コードは、 tanh \tanh tanh の 隠れ層 2 つと ソフトマックスの 出力を もつ ネットワーク(パラメータ 51 個)で 両者を 比べる。
import numpy as np
rng = np.random.default_rng(0)
sizes = [3, 4, 4, 3] # d_0, d_1, d_2, d_3(3 クラス)
Ws = [rng.normal(0, 1, (m, k)) for k, m in zip(sizes[:-1], sizes[1:])]
bs = [rng.normal(0, 1, m) for m in sizes[1:]]
x, y = rng.normal(0, 1, 3), 2 # 入力と正解のクラス
def loss_and_grads(Ws, bs):
hs, z = [x], None # hs[l] = h^(l)
for l, (W, b) in enumerate(zip(Ws, bs)):
z = W @ hs[-1] + b
if l < len(Ws) - 1:
hs.append(np.tanh(z))
p = np.exp(z - z.max()); p /= p.sum() # softmax(z^(L))
J = -np.log(p[y]) # 交差エントロピー損失
delta = p.copy(); delta[y] -= 1 # δ^(L) = p - e_y
gWs, gbs = [], []
for l in reversed(range(len(Ws))): # 後ろの層から
gWs.insert(0, np.outer(delta, hs[l])); gbs.insert(0, delta)
if l > 0: # tanh' = 1 - tanh^2
delta = (1 - hs[l] ** 2) * (Ws[l].T @ delta)
return J, gWs, gbs
J, gWs, gbs = loss_and_grads(Ws, bs)
err, h = 0.0, 1e-6
for P, G in zip(Ws + bs, gWs + gbs): # 中心差分と比べる
for idx in np.ndindex(P.shape):
old = P[idx]
P[idx] = old + h; Jp = loss_and_grads(Ws, bs)[0]
P[idx] = old - h; Jm = loss_and_grads(Ws, bs)[0]
P[idx] = old
err = max(err, abs((Jp - Jm) / (2 * h) - G[idx]))
print(f"J = {J:.4f}, 勾配の成分の最大の差 = {err:.1e}")
J = 1.0232, 勾配の成分の最大の差 = 2.1e-10
勾配の 成分は 絶対値が 最大で 約 0.64 0.64 0.64 で、差は 打ち切り誤差と 丸め誤差で 説明できる 大きさである。
ヒント
実務では
深層学習の ライブラリは 次節の 自動微分で 勾配を 計算するが、自作の 層や 損失を 加えた ときは 小さな 例で 数値微分と 比べる(倍精度で、ドロップアウトのような 乱数を 使う 処理は 止めて)。勾配の 誤りは「学習が なんとなく 遅い」と いう 形でしか 現れない ことが あり、気づきにくい。
5.3 計算グラフと 自動微分
計算の 手順を 基本演算に 分解し、各演算の 局所的な 微分を 連鎖律で つなぐ 方法を 自動微分 (automatic differentiation) と いう。数値微分と 違って 丸め誤差を 除けば 正確で、記号的な 微分のように 式が 膨れ上がることもない。誤差逆伝播法は その 特別な 場合である。
定義 5.7 (計算グラフ, computational graph)関数 f : R n → R f\colon \mathbb{R}^n \to \mathbb{R} f : R n → R の 計算グラフとは、変数の 列 v 1 , … , v N v_1, \dots, v_N v 1 , … , v N で、v 1 , … , v n v_1, \dots, v_n v 1 , … , v n は 入力 x 1 , … , x n x_1, \dots, x_n x 1 , … , x n であり、i = n + 1 , … , N i = n + 1, \dots, N i = n + 1 , … , N に ついては v i = g i ( ( v j ) j ∈ pa ( i ) ) v_i = g_i((v_j)_{j \in \operatorname{pa}(i)}) v i = g i (( v j ) j ∈ pa ( i ) ) (pa ( i ) ⊂ { 1 , … , i − 1 } \operatorname{pa}(i) \subset \lbrace 1, \dots, i - 1 \rbrace pa ( i ) ⊂ { 1 , … , i − 1 } )と 前の 変数から 基本演算 g i g_i g i で 計算され、 f ( x ) = v N f(x) = v_N f ( x ) = v N と なる ものを いう。基本演算は 2 変数の 四則演算と、1 変数の exp , log , sin , cos , σ , tanh \exp, \log, \sin, \cos, \sigma, \tanh exp , log , sin , cos , σ , tanh などと する。 j ∈ pa ( i ) j \in \operatorname{pa}(i) j ∈ pa ( i ) の とき j j j から i i i へ 辺を 引くと 有向非巡回グラフが できる。 g i g_i g i の v j v_j v j に ついての 偏微分を 実際の 値で 評価した ものを ∂ j g i \partial_jg_i ∂ j g i と 書く(局所的な 偏微分)。
命題 5.8 (前向きモード, forward mode)方向 u ∈ R n u \in \mathbb{R}^n u ∈ R n に ついて v ˙ k = u k \dot{v}_k = u_k v ˙ k = u k (k ≤ n k \leq n k ≤ n )とし、i = n + 1 , … , N i = n + 1, \dots, N i = n + 1 , … , N の 順に v ˙ i = ∑ j ∈ pa ( i ) ∂ j g i v ˙ j \dot{v}_i = \sum_{j \in \operatorname{pa}(i)}\partial_jg_i\dot{v}_j v ˙ i = ∑ j ∈ pa ( i ) ∂ j g i v ˙ j と 定める。各 g i g_i g i が その点で 微分可能ならば v ˙ N = ∇ f ( x ) ⊤ u \dot{v}_N = \nabla f(x)^{\top}u v ˙ N = ∇ f ( x ) ⊤ u である。
証明. 各 v i v_i v i を x x x の 関数と みて、 v i v_i v i が 微分可能で v ˙ i = D v i ( x ) u \dot{v}_i = Dv_i(x)u v ˙ i = D v i ( x ) u である ことを i i i に ついての 帰納法で 示す。 i ≤ n i \leq n i ≤ n では v i = x i v_i = x_i v i = x i なので 正しい。 i > n i > n i > n では 連鎖律より D v i ( x ) u = ∑ j ∈ pa ( i ) ∂ j g i D v j ( x ) u = ∑ j ∂ j g i v ˙ j = v ˙ i Dv_i(x)u = \sum_{j \in \operatorname{pa}(i)}\partial_jg_iDv_j(x)u = \sum_j\partial_jg_i\dot{v}_j = \dot{v}_i D v i ( x ) u = ∑ j ∈ pa ( i ) ∂ j g i D v j ( x ) u = ∑ j ∂ j g i v ˙ j = v ˙ i 。□ \square □
命題 5.9 (後ろ 向きモード, reverse mode) v ˉ N = 1 \bar{v}_N = 1 v ˉ N = 1 、それ以外の v ˉ j = 0 \bar{v}_j = 0 v ˉ j = 0 から 始め、 i = N , N − 1 , … , n + 1 i = N, N - 1, \dots, n + 1 i = N , N − 1 , … , n + 1 の 順に、各 j ∈ pa ( i ) j \in \operatorname{pa}(i) j ∈ pa ( i ) に ついて v ˉ j ← v ˉ j + v ˉ i ∂ j g i \bar{v}_j \leftarrow \bar{v}_j + \bar{v}_i\partial_jg_i v ˉ j ← v ˉ j + v ˉ i ∂ j g i と 更新する。各 g i g_i g i が その点で 微分可能ならば、終わった ときの v ˉ k \bar{v}_k v ˉ k は ∂ f / ∂ x k ( x ) \partial f/\partial x_k(x) ∂ f / ∂ x k ( x ) に 等しい( k = 1 , … , n k = 1, \dots, n k = 1 , … , n )。
証明. k = n , … , N k = n, \dots, N k = n , … , N に ついて、 v 1 , … , v k v_1, \dots, v_k v 1 , … , v k に 任意の 値を 与えて v k + 1 , … , v N v_{k+1}, \dots, v_N v k + 1 , … , v N を 手順どおり計算し v N v_N v N を 返す関数を F k : R k → R F_k\colon \mathbb{R}^k \to \mathbb{R} F k : R k → R と する。 F N ( v 1 , … , v N ) = v N F_N(v_1, \dots, v_N) = v_N F N ( v 1 , … , v N ) = v N 、F n = f F_n = f F n = f 、F k − 1 ( v 1 , … , v k − 1 ) = F k ( v 1 , … , v k − 1 , g k ( ( v j ) j ∈ pa ( k ) ) ) F_{k-1}(v_1, \dots, v_{k-1}) = F_k(v_1, \dots, v_{k-1}, g_k((v_j)_{j \in \operatorname{pa}(k)})) F k − 1 ( v 1 , … , v k − 1 ) = F k ( v 1 , … , v k − 1 , g k (( v j ) j ∈ pa ( k ) )) である。下向きの 帰納法と 連鎖律に より、各 F k F_k F k は 実際の 値で 微分可能で、 j ≤ k − 1 j \leq k - 1 j ≤ k − 1 に ついて( j ∉ pa ( k ) j \notin \operatorname{pa}(k) j ∈ / pa ( k ) なら ∂ j g k = 0 \partial_jg_k = 0 ∂ j g k = 0 と する)
∂ F k − 1 ∂ v j = ∂ F k ∂ v j + ∂ F k ∂ v k ∂ j g k \frac{\partial F_{k-1}}{\partial v_j} = \frac{\partial F_k}{\partial v_j} + \frac{\partial F_k}{\partial v_k}\,\partial_jg_k ∂ v j ∂ F k − 1 = ∂ v j ∂ F k + ∂ v k ∂ F k ∂ j g k
が 成り立つ。「 i = k i = k i = k の 更新の 直前に、すべての j ≤ k j \leq k j ≤ k で v ˉ j = ∂ F k / ∂ v j \bar{v}_j = \partial F_k/\partial v_j v ˉ j = ∂ F k / ∂ v j 」を k k k に ついて 下向きの 帰納法で 示す。 k = N k = N k = N では v ˉ j = 1 { j = N } = ∂ F N / ∂ v j \bar{v}_j = \mathbf{1}\lbrace j = N \rbrace = \partial F_N/\partial v_j v ˉ j = 1 { j = N } = ∂ F N / ∂ v j 。k k k で 成り立てば、 i = k i = k i = k の 更新で 各 j ∈ pa ( k ) j \in \operatorname{pa}(k) j ∈ pa ( k ) に v ˉ k ∂ j g k \bar{v}_k\partial_jg_k v ˉ k ∂ j g k が 加わるので、上の 式より j ≤ k − 1 j \leq k - 1 j ≤ k − 1 で v ˉ j = ∂ F k − 1 / ∂ v j \bar{v}_j = \partial F_{k-1}/\partial v_j v ˉ j = ∂ F k − 1 / ∂ v j と なる。 i = n + 1 i = n + 1 i = n + 1 の 更新を 終えると v ˉ j = ∂ F n / ∂ v j = ∂ f / ∂ x j \bar{v}_j = \partial F_n/\partial v_j = \partial f/\partial x_j v ˉ j = ∂ F n / ∂ v j = ∂ f / ∂ x j である。□ \square □
例 5.10 f ( x 1 , x 2 ) = x 1 x 2 + exp ( x 1 − x 2 ) f(x_1, x_2) = x_1x_2 + \exp(x_1 - x_2) f ( x 1 , x 2 ) = x 1 x 2 + exp ( x 1 − x 2 ) を v 3 = v 1 v 2 v_3 = v_1v_2 v 3 = v 1 v 2 、v 4 = v 1 − v 2 v_4 = v_1 - v_2 v 4 = v 1 − v 2 、v 5 = exp ( v 4 ) v_5 = \exp(v_4) v 5 = exp ( v 4 ) 、v 6 = v 3 + v 5 v_6 = v_3 + v_5 v 6 = v 3 + v 5 と 計算する。 ( x 1 , x 2 ) = ( 1 , 1 ) (x_1, x_2) = (1, 1) ( x 1 , x 2 ) = ( 1 , 1 ) では v 3 = 1 v_3 = 1 v 3 = 1 、v 4 = 0 v_4 = 0 v 4 = 0 、v 5 = 1 v_5 = 1 v 5 = 1 、v 6 = 2 v_6 = 2 v 6 = 2 。後ろ 向きモードは、 i = 6 i = 6 i = 6 で v ˉ 3 = v ˉ 5 = 1 \bar{v}_3 = \bar{v}_5 = 1 v ˉ 3 = v ˉ 5 = 1 、i = 5 i = 5 i = 5 で v ˉ 4 = v ˉ 5 e v 4 = 1 \bar{v}_4 = \bar{v}_5e^{v_4} = 1 v ˉ 4 = v ˉ 5 e v 4 = 1 、i = 4 i = 4 i = 4 で v ˉ 1 = 1 \bar{v}_1 = 1 v ˉ 1 = 1 、v ˉ 2 = − 1 \bar{v}_2 = -1 v ˉ 2 = − 1 、i = 3 i = 3 i = 3 で v ˉ 1 = 1 + v ˉ 3 v 2 = 2 \bar{v}_1 = 1 + \bar{v}_3v_2 = 2 v ˉ 1 = 1 + v ˉ 3 v 2 = 2 、v ˉ 2 = − 1 + v ˉ 3 v 1 = 0 \bar{v}_2 = -1 + \bar{v}_3v_1 = 0 v ˉ 2 = − 1 + v ˉ 3 v 1 = 0 と なり、直接微分した ∇ f = ( x 2 + e x 1 − x 2 , x 1 − e x 1 − x 2 ) = ( 2 , 0 ) \nabla f = (x_2 + e^{x_1 - x_2}, x_1 - e^{x_1 - x_2}) = (2, 0) ∇ f = ( x 2 + e x 1 − x 2 , x 1 − e x 1 − x 2 ) = ( 2 , 0 ) と 一致する。前向きモードで 勾配を 求めるには u = ( 1 , 0 ) , ( 0 , 1 ) u = (1, 0), (0, 1) u = ( 1 , 0 ) , ( 0 , 1 ) の 2 回の 計算が 要る。
定理 5.11 (勾配の 計算量)定義 5.7 の 計算グラフで、各基本演算の 引数は 2 個以下、局所的な 偏微分 ∂ j g i \partial_jg_i ∂ j g i は 演算の 引数と 結果 v i v_i v i から 高々 c c c 回の 基本演算(定数との 四則演算も 1 回と 数える)で 計算できるとし、 f ( x ) f(x) f ( x ) を 計算する 基本演算の 回数を N f = N − n N_f = N - n N f = N − n と する。
前向きモードは f ( x ) f(x) f ( x ) と 1 つの 方向微分を 高々 ( 2 c + 4 ) N f (2c + 4)N_f ( 2 c + 4 ) N f 回の 基本演算で 求める。勾配の 全成分には n n n 方向が 要り、高々 ( 2 c + 4 ) n N f (2c + 4)nN_f ( 2 c + 4 ) n N f 回である。
後ろ 向きモードは f ( x ) f(x) f ( x ) と ∇ f ( x ) \nabla f(x) ∇ f ( x ) の 全成分を 高々 ( 2 c + 5 ) N f (2c + 5)N_f ( 2 c + 5 ) N f 回の 基本演算で 求める。この 上界は 入力の 次元 n n n に よらない。
証明. 各 i i i (n < i ≤ N n < i \leq N n < i ≤ N )ごとに 数える。前向きモードでは、 v i v_i v i に 1 回、局所的な 偏微分(高々 2 個)に 高々 2 c 2c 2 c 回、v ˙ i \dot{v}_i v ˙ i に 高々 3 回(乗算 2 回と 加算 1 回)である。後ろ 向きモードでは、まず v 1 , … , v N v_1, \dots, v_N v 1 , … , v N を 前向きに 計算して 保存し( N f N_f N f 回)、後ろ 向きの 各 i i i で 局所的な 偏微分に 高々 2 c 2c 2 c 回、各 j ∈ pa ( i ) j \in \operatorname{pa}(i) j ∈ pa ( i ) の 更新に 2 回ずつ 高々 4 回を 使う。合計は 高々 N f + ( 2 c + 4 ) N f N_f + (2c + 4)N_f N f + ( 2 c + 4 ) N f 回である。□ \square □
四則演算と exp , log , sin , cos , σ , tanh \exp, \log, \sin, \cos, \sigma, \tanh exp , log , sin , cos , σ , tanh なら c = 2 c = 2 c = 2 で よい(例: ∂ ( u / w ) / ∂ w = − v i / w \partial(u/w)/\partial w = -v_i/w ∂ ( u / w ) / ∂ w = − v i / w 、σ ′ ( u ) = v i ( 1 − v i ) \sigma'(u) = v_i(1 - v_i) σ ′ ( u ) = v i ( 1 − v i ) )ので、勾配の 手間は 関数の 評価の 高々 9 倍で、入力の 次元に よらない( 勾配は 安い , cheap gradient principle)。前向きモードと 数値微分の 手間は n n n に 比例する。パラメータが 非常に 多い モデルを 勾配法で 学習できるのは この ためである。代わりに 後ろ 向きモードは 途中の 値を すべて 保存するので、記憶領域が N f N_f N f に 比例する。多層パーセプトロンを 基本演算に 分解すれば z ( l ) z^{(l)} z ( l ) の 成分の v ˉ \bar{v} v ˉ が δ ( l ) \delta^{(l)} δ ( l ) で、誤差逆伝播法は 後ろ 向きモードを 層ごとの 行列演算に まとめた ものである。
例 5.12 (積の 勾配) f ( x ) = x 1 x 2 ⋯ x n f(x) = x_1x_2\cdots x_n f ( x ) = x 1 x 2 ⋯ x n を p 1 = x 1 p_1 = x_1 p 1 = x 1 、p k = p k − 1 x k p_k = p_{k-1}x_k p k = p k − 1 x k と 計算すると( N f = n − 1 N_f = n - 1 N f = n − 1 )、後ろ 向きモードは p ˉ n = 1 \bar{p}_n = 1 p ˉ n = 1 から k = n , … , 2 k = n, \dots, 2 k = n , … , 2 の 順に x ˉ k = p ˉ k p k − 1 \bar{x}_k = \bar{p}_kp_{k-1} x ˉ k = p ˉ k p k − 1 、p ˉ k − 1 = p ˉ k x k \bar{p}_{k-1} = \bar{p}_kx_k p ˉ k − 1 = p ˉ k x k を 計算し(最後に x ˉ 1 = p ˉ 1 \bar{x}_1 = \bar{p}_1 x ˉ 1 = p ˉ 1 )、∂ f / ∂ x k = ( x 1 ⋯ x k − 1 ) ( x k + 1 ⋯ x n ) \partial f/\partial x_k = (x_1\cdots x_{k-1})(x_{k+1}\cdots x_n) ∂ f / ∂ x k = ( x 1 ⋯ x k − 1 ) ( x k + 1 ⋯ x n ) を 乗算 2 ( n − 1 ) 2(n - 1) 2 ( n − 1 ) 回ですべて 求める。前向きモードでは 手間が n 2 n^2 n 2 に 比例する。
5.4 勾配消失と 勾配爆発
定理 5.5 の 漸化式を ほどくと、 D ( k ) = diag ( ϕ ′ ( z ( k ) ) ) D^{(k)} = \operatorname{diag}(\phi'(z^{(k)})) D ( k ) = diag ( ϕ ′ ( z ( k ) )) と して
δ ( l ) = D ( l ) W ( l + 1 ) ⊤ D ( l + 1 ) W ( l + 2 ) ⊤ ⋯ D ( L − 1 ) W ( L ) ⊤ δ ( L ) \delta^{(l)} = D^{(l)}W^{(l+1)\top}D^{(l+1)}W^{(l+2)\top}\cdots D^{(L-1)}W^{(L)\top}\delta^{(L)} δ ( l ) = D ( l ) W ( l + 1 ) ⊤ D ( l + 1 ) W ( l + 2 ) ⊤ ⋯ D ( L − 1 ) W ( L ) ⊤ δ ( L )
である。入力に 近い層の 勾配は L − l L - l L − l 個の 行列の 積で 決まり、各因子が ベクトルを 縮めるなら層の 数に ついて 指数的に 小さく( 勾配消失 )、伸ばすなら 指数的に 大きく( 勾配爆発 )なりうる。
命題 5.13 (勾配の 大きさの 上界) ∥ A ∥ \lVert A \rVert ∥ A ∥ を 作用素ノルム(最大特異値。 02-linear-algebra 第8章 命題 8.21)と すると
∥ δ ( l ) ∥ ≤ ( ∏ k = l L − 1 max j ∣ ϕ ′ ( z j ( k ) ) ∣ ∥ W ( k + 1 ) ∥ ) ∥ δ ( L ) ∥ , ∥ ∂ J ∂ W ( l ) ∥ F = ∥ δ ( l ) ∥ ∥ h ( l − 1 ) ∥ \lVert \delta^{(l)} \rVert \leq \left(\prod_{k=l}^{L-1}\max_j\lvert \phi'(z^{(k)}_j) \rvert\,\lVert W^{(k+1)} \rVert\right)\lVert \delta^{(L)} \rVert, \qquad \left\lVert \frac{\partial J}{\partial W^{(l)}} \right\rVert_F = \lVert \delta^{(l)} \rVert\,\lVert h^{(l-1)} \rVert ∥ δ ( l ) ∥ ≤ ( k = l ∏ L − 1 j max ∣ ϕ ′ ( z j ( k ) )∣ ∥ W ( k + 1 ) ∥ ) ∥ δ ( L ) ∥ , ∂ W ( l ) ∂ J F = ∥ δ ( l ) ∥ ∥ h ( l − 1 ) ∥
特に 0 < σ ′ ( t ) ≤ 1 / 4 0 < \sigma'(t) \leq 1/4 0 < σ ′ ( t ) ≤ 1/4 (等号は t = 0 t = 0 t = 0 の ときに 限る)なので、 ϕ = σ \phi = \sigma ϕ = σ ですべての k k k で ∥ W ( k ) ∥ ≤ c \lVert W^{(k)} \rVert \leq c ∥ W ( k ) ∥ ≤ c ならば ∥ δ ( l ) ∥ ≤ ( c / 4 ) L − l ∥ δ ( L ) ∥ \lVert \delta^{(l)} \rVert \leq (c/4)^{L-l}\lVert \delta^{(L)} \rVert ∥ δ ( l ) ∥ ≤ ( c /4 ) L − l ∥ δ ( L ) ∥ である。
証明. 対角行列の 作用素ノルムは 対角成分の 絶対値の 最大値で、 A ⊤ A^{\top} A ⊤ と A A A の 特異値は 同じなので ∥ A ⊤ ∥ = ∥ A ∥ \lVert A^{\top} \rVert = \lVert A \rVert ∥ A ⊤ ∥ = ∥ A ∥ 。∥ A u ∥ ≤ ∥ A ∥ ∥ u ∥ \lVert Au \rVert \leq \lVert A \rVert\lVert u \rVert ∥ A u ∥ ≤ ∥ A ∥ ∥ u ∥ を 繰り返せば 第 1 式を 得る。第 2 式は ∥ u v ⊤ ∥ F 2 = ∑ j , k u j 2 v k 2 = ∥ u ∥ 2 ∥ v ∥ 2 \lVert uv^{\top} \rVert_F^2 = \sum_{j,k}u_j^2v_k^2 = \lVert u \rVert^2\lVert v \rVert^2 ∥ u v ⊤ ∥ F 2 = ∑ j , k u j 2 v k 2 = ∥ u ∥ 2 ∥ v ∥ 2 に よる。 p = σ ( t ) ∈ ( 0 , 1 ) p = \sigma(t) \in (0, 1) p = σ ( t ) ∈ ( 0 , 1 ) と すると σ ′ ( t ) = p ( 1 − p ) = 1 4 − ( p − 1 2 ) 2 \sigma'(t) = p(1 - p) = \frac{1}{4} - (p - \frac{1}{2})^2 σ ′ ( t ) = p ( 1 − p ) = 4 1 − ( p − 2 1 ) 2 で、等号は p = 1 / 2 p = 1/2 p = 1/2 、すな わち t = 0 t = 0 t = 0 の ときに 限る。 □ \square □
シグモイドを 10 層重ねて ∥ W ( k ) ∥ ≤ 1 \lVert W^{(k)} \rVert \leq 1 ∥ W ( k ) ∥ ≤ 1 なら、第 1 層の 誤差は 出力の 誤差の 4 − 10 ≈ 9.5 × 10 − 7 4^{-10} \approx 9.5 \times 10^{-7} 4 − 10 ≈ 9.5 × 1 0 − 7 倍以下である。前活性の 絶対値が 大きいと 微分は さらに 小さい( σ ′ ( 5 ) ≈ 0.0066 \sigma'(5) \approx 0.0066 σ ′ ( 5 ) ≈ 0.0066 。ユニットの 飽和)。ただし命題 5.13 は 上界であり、重みが 大きければ 因子は 1 1 1 を 超えうる。
例 5.14 (勾配爆発)活性化関数を 恒等写像、 W ( k ) = a I W^{(k)} = aI W ( k ) = a I と すると δ ( l ) = a L − l δ ( L ) \delta^{(l)} = a^{L-l}\delta^{(L)} δ ( l ) = a L − l δ ( L ) で、L − l = 50 L - l = 50 L − l = 50 なら a = 1.1 a = 1.1 a = 1.1 で 約 117 117 117 倍、a = 0.9 a = 0.9 a = 0.9 で 約 0.0052 0.0052 0.0052 倍に なる。同じ 重み行列を 時刻ごとに 使う 再帰型ニューラルネットワーク (RNN) では 行列の 累乗が 現れるので、長い 系列で 消失・爆発が 起こりやすい。
対策には、(1) 正の 側で 微分が 1 1 1 の ReLU、(2) 分散を 保つ初期化(5.5 節)、(3) 正規化(5.6 節)、(4) 残差接続 (residual connection) h ( l ) = h ( l − 1 ) + F l ( h ( l − 1 ) ) h^{(l)} = h^{(l-1)} + F_l(h^{(l-1)}) h ( l ) = h ( l − 1 ) + F l ( h ( l − 1 ) ) 、(5) 勾配の ノルムが 閾値を 超えたら 縮める 勾配クリッピング、などが ある。(4) では ∂ J / ∂ h ( l − 1 ) = ( I + D F l ( h ( l − 1 ) ) ) ⊤ ∂ J / ∂ h ( l ) \partial J/\partial h^{(l-1)} = (I + DF_l(h^{(l-1)}))^{\top}\partial J/\partial h^{(l)} ∂ J / ∂ h ( l − 1 ) = ( I + D F l ( h ( l − 1 ) ) ) ⊤ ∂ J / ∂ h ( l ) で、恒等写像を 通る 経路が あるので 勾配が 消えに くい(残差接続を 使った ネットワーク(He ら 2016)で、100 層を 超える ネットワークの 学習が 実用に なった)。
5.5 初期化
すべての 重みを 同じ値で 初期化してはいけない。
命題 5.15 (対称性は 保たれる)ある 隠れ層の 2 つの ユニット j , j ′ j, j' j , j ′ に ついて、入る 重みと バイアスが 等しく( W ( l ) W^{(l)} W ( l ) の 第 j , j ′ j, j' j , j ′ 行、b j ( l ) , b j ′ ( l ) b^{(l)}_j, b^{(l)}_{j'} b j ( l ) , b j ′ ( l ) )、出る 重みも 等しい( W ( l + 1 ) W^{(l+1)} W ( l + 1 ) の 第 j , j ′ j, j' j , j ′ 列)と する。この とき、どの データに ついても 損失の 勾配の これらに 対応する 部分は 等しい。したがって 勾配降下法で(確率的でも)何回更新しても 等しいままで、2 つの ユニットは 同じ 特徴量しか 表さない。
証明. z j ( l ) = z j ′ ( l ) z^{(l)}_j = z^{(l)}_{j'} z j ( l ) = z j ′ ( l ) 、h j ( l ) = h j ′ ( l ) h^{(l)}_j = h^{(l)}_{j'} h j ( l ) = h j ′ ( l ) で、δ j ( l ) = ϕ ′ ( z j ( l ) ) ∑ i W i j ( l + 1 ) δ i ( l + 1 ) \delta^{(l)}_j = \phi'(z^{(l)}_j)\sum_iW^{(l+1)}_{ij}\delta^{(l+1)}_i δ j ( l ) = ϕ ′ ( z j ( l ) ) ∑ i W ij ( l + 1 ) δ i ( l + 1 ) も 出る 重みが 等しいので δ j ′ ( l ) \delta^{(l)}_{j'} δ j ′ ( l ) に 等しい。よって 定理 5.5 より、 W ( l ) W^{(l)} W ( l ) の 第 j , j ′ j, j' j , j ′ 行の 勾配 δ j ( l ) h ( l − 1 ) ⊤ \delta^{(l)}_jh^{(l-1)\top} δ j ( l ) h ( l − 1 ) ⊤ 、b j ( l ) , b j ′ ( l ) b^{(l)}_j, b^{(l)}_{j'} b j ( l ) , b j ′ ( l ) の 勾配、 W ( l + 1 ) W^{(l+1)} W ( l + 1 ) の 第 j , j ′ j, j' j , j ′ 列の 勾配 h j ( l ) δ ( l + 1 ) h^{(l)}_j\delta^{(l+1)} h j ( l ) δ ( l + 1 ) は それぞれ等しく、更新後も 仮定が 成り立つ。 □ \square □
そこで 重みは 乱数で 初期化する(バイアスは 0 0 0 で よい)。問題は その 分散である。
命題 5.16 (初期化での 分散の 伝播)入力 x x x を 固定し、バイアスを 0 0 0 と する。重みの 成分は すべて 独立で、第 l l l 層の 成分 W j k ( l ) W^{(l)}_{jk} W j k ( l ) は 同じ 分布に 従い、その 分布は 0 0 0 に ついて 対称( W j k ( l ) W^{(l)}_{jk} W j k ( l ) と − W j k ( l ) -W^{(l)}_{jk} − W j k ( l ) が 同じ 分布)で 分散 v l v_l v l を もつと する(現れる 期待値は 有限と する)。この とき E [ z j ( l ) ] = 0 E[z^{(l)}_j] = 0 E [ z j ( l ) ] = 0 で、q l = E [ ( z j ( l ) ) 2 ] q_l = E[(z^{(l)}_j)^2] q l = E [( z j ( l ) ) 2 ] は j j j に よらず、
q 1 = v 1 ∥ x ∥ 2 q_1 = v_1\lVert x \rVert^2 q 1 = v 1 ∥ x ∥ 2 、l ≥ 2 l \geq 2 l ≥ 2 では q l = d l − 1 v l E [ ϕ ( z 1 ( l − 1 ) ) 2 ] q_l = d_{l-1}v_lE[\phi(z^{(l-1)}_1)^2] q l = d l − 1 v l E [ ϕ ( z 1 ( l − 1 ) ) 2 ] 。
ϕ = ReLU \phi = \operatorname{ReLU} ϕ = ReLU ならば q l = 1 2 d l − 1 v l q l − 1 q_l = \frac{1}{2}d_{l-1}v_lq_{l-1} q l = 2 1 d l − 1 v l q l − 1 (l ≥ 2 l \geq 2 l ≥ 2 )。したがって v l = 2 / d l − 1 v_l = 2/d_{l-1} v l = 2/ d l − 1 ならば すべての l l l で q l = q 1 q_l = q_1 q l = q 1 である。
証明. h ( l − 1 ) h^{(l-1)} h ( l − 1 ) は x x x と W ( 1 ) , … , W ( l − 1 ) W^{(1)}, \dots, W^{(l-1)} W ( 1 ) , … , W ( l − 1 ) の 関数なので W ( l ) W^{(l)} W ( l ) と 独立である( 22-statistics 第1章 命題 1.4)。対称性より E [ W j k ( l ) ] = 0 E[W^{(l)}_{jk}] = 0 E [ W j k ( l ) ] = 0 なので E [ z j ( l ) ] = ∑ k E [ W j k ( l ) ] E [ h k ( l − 1 ) ] = 0 E[z^{(l)}_j] = \sum_kE[W^{(l)}_{jk}]E[h^{(l-1)}_k] = 0 E [ z j ( l ) ] = ∑ k E [ W j k ( l ) ] E [ h k ( l − 1 ) ] = 0 、
E [ ( z j ( l ) ) 2 ] = ∑ k , k ′ E [ W j k ( l ) W j k ′ ( l ) ] E [ h k ( l − 1 ) h k ′ ( l − 1 ) ] = v l ∑ k E [ ( h k ( l − 1 ) ) 2 ] E[(z^{(l)}_j)^2] = \sum_{k, k'}E[W^{(l)}_{jk}W^{(l)}_{jk'}]\,E[h^{(l-1)}_kh^{(l-1)}_{k'}] = v_l\sum_kE[(h^{(l-1)}_k)^2] E [( z j ( l ) ) 2 ] = k , k ′ ∑ E [ W j k ( l ) W j k ′ ( l ) ] E [ h k ( l − 1 ) h k ′ ( l − 1 ) ] = v l k ∑ E [( h k ( l − 1 ) ) 2 ]
である。l = 1 l = 1 l = 1 では h ( 0 ) = x h^{(0)} = x h ( 0 ) = x なので q 1 = v 1 ∥ x ∥ 2 q_1 = v_1\lVert x \rVert^2 q 1 = v 1 ∥ x ∥ 2 。l ≥ 2 l \geq 2 l ≥ 2 では、W ( l − 1 ) W^{(l-1)} W ( l − 1 ) の 各行は 同じ 分布に 従い h ( l − 2 ) h^{(l-2)} h ( l − 2 ) と 独立なので、 z k ( l − 1 ) z^{(l-1)}_k z k ( l − 1 ) は どの k k k でも 同じ 分布に 従い、和は d l − 1 E [ ϕ ( z 1 ( l − 1 ) ) 2 ] d_{l-1}E[\phi(z^{(l-1)}_1)^2] d l − 1 E [ ϕ ( z 1 ( l − 1 ) ) 2 ] に なる。(2) ( W ( l − 1 ) , h ( l − 2 ) ) (W^{(l-1)}, h^{(l-2)}) ( W ( l − 1 ) , h ( l − 2 ) ) と ( − W ( l − 1 ) , h ( l − 2 ) ) (-W^{(l-1)}, h^{(l-2)}) ( − W ( l − 1 ) , h ( l − 2 ) ) は 同じ 分布に 従うので、 z = z 1 ( l − 1 ) z = z^{(l-1)}_1 z = z 1 ( l − 1 ) と − z -z − z も 同じ 分布に 従う。よって E [ z 2 1 { z > 0 } ] = E [ z 2 1 { z < 0 } ] E[z^2\mathbf{1}\lbrace z > 0 \rbrace] = E[z^2\mathbf{1}\lbrace z < 0 \rbrace] E [ z 2 1 { z > 0 }] = E [ z 2 1 { z < 0 }] で、和は q l − 1 q_{l-1} q l − 1 だから E [ ReLU ( z ) 2 ] = q l − 1 / 2 E[\operatorname{ReLU}(z)^2] = q_{l-1}/2 E [ ReLU ( z ) 2 ] = q l − 1 /2 。□ \square □
v l = 2 / d l − 1 v_l = 2/d_{l-1} v l = 2/ d l − 1 を He の 初期化 と いう(He ら 2015)。 tanh \tanh tanh のように 0 0 0 の 近くで ϕ ( t ) ≈ t \phi(t) \approx t ϕ ( t ) ≈ t と なる 活性化関数では、(1) で E [ ϕ ( z ) 2 ] ≈ q l − 1 E[\phi(z)^2] \approx q_{l-1} E [ ϕ ( z ) 2 ] ≈ q l − 1 と 近似して v l = 1 / d l − 1 v_l = 1/d_{l-1} v l = 1/ d l − 1 が 条件に なる。後ろ 向きの δ \delta δ に ついても、 W ( l ) W^{(l)} W ( l ) と δ ( l ) \delta^{(l)} δ ( l ) を 独立とみなす近似(正確には 独立でない)で 同じ 計算を すると、条件は v l = 1 / d l v_l = 1/d_l v l = 1/ d l (ReLU なら 2 / d l 2/d_l 2/ d l )に なり、両者の 折衷 v l = 2 / ( d l − 1 + d l ) v_l = 2/(d_{l-1} + d_l) v l = 2/ ( d l − 1 + d l ) が Xavier の 初期化 (グロロ–ベンジオ 2010)である。幅 256、50 層の ReLU ネットワーク(重みは 正規分布)で 試すと、第 50 層と 第 1 層の 前活性の 2 乗平均の 比は、ある 1 回の 試行で v = 1 / d v = 1/d v = 1/ d なら 約 7 × 10 − 16 7 \times 10^{-16} 7 × 1 0 − 16 、v = 4 / d v = 4/d v = 4/ d なら 約 2.5 × 10 13 2.5 \times 10^{13} 2.5 × 1 0 13 、v = 2 / d v = 2/d v = 2/ d なら 約 0.41 0.41 0.41 だった。命題 5.16 の (2) に よる 期待値の 比は v = c / d v = c/d v = c / d の とき ( c / 2 ) 49 (c/2)^{49} ( c /2 ) 49 で、それぞれ 2 − 49 ≈ 1.8 × 10 − 15 2^{-49} \approx 1.8 \times 10^{-15} 2 − 49 ≈ 1.8 × 1 0 − 15 、2 49 ≈ 5.6 × 10 14 2^{49} \approx 5.6 \times 10^{14} 2 49 ≈ 5.6 × 1 0 14 、1 1 1 である。命題 5.16 は 期待値の 主張で、有限の 幅では 1 回の 試行の 値が これから 1 桁以上 ずれる こともある( v = 2 / d v = 2/d v = 2/ d で 2000 回試すと、比の 中央値は 約 0.62 0.62 0.62 で、9 割の 試行は 約 0.12 0.12 0.12 から 3.0 3.0 3.0 の 間に あった)。どの 条件も 初期化の 時点だけを 見た もので、学習の 進み方は 保証しない。
5.6 正規化(紹介)
学習が 進むと 各層の 値の 大きさは 変わっていく。そこで 層の 途中で 値を 正規化する。
定義 5.17 (バッチ正規化・層正規化)ミニバッチの B B B 個の データの 第 j j j 成分の 前活性を z 1 j , … , z B j z_{1j}, \dots, z_{Bj} z 1 j , … , z B j とし、μ j = 1 B ∑ b z b j \mu_j = \frac{1}{B}\sum_bz_{bj} μ j = B 1 ∑ b z bj 、s j 2 = 1 B ∑ b ( z b j − μ j ) 2 s_j^2 = \frac{1}{B}\sum_b(z_{bj} - \mu_j)^2 s j 2 = B 1 ∑ b ( z bj − μ j ) 2 と する。小さな 定数 ϵ > 0 \epsilon > 0 ϵ > 0 と 学習する パラメータ γ j , β j \gamma_j, \beta_j γ j , β j で z ^ b j = γ j ( z b j − μ j ) / s j 2 + ϵ + β j \hat{z}_{bj} = \gamma_j(z_{bj} - \mu_j)/\sqrt{s_j^2 + \epsilon} + \beta_j z ^ bj = γ j ( z bj − μ j ) / s j 2 + ϵ + β j と 変換する ことを バッチ正規化 (batch normalization) と いう。データ b b b ごとに、その 成分 z b 1 , … , z b d z_{b1}, \dots, z_{bd} z b 1 , … , z b d の 平均と 分散で 同じ形の 変換を する ことを 層正規化 (layer normalization) と いう。
バッチ正規化(イオフェ–セゲディ 2015)は、学習時には ミニバッチの 統計量を(逆伝播も それを 通して)使い、推論時には 学習中に 蓄えた 移動平均を 使う。層正規化(バ–キロス–ヒントン 2016)は バッチに よらず、トランスフォーマー(5.9 節)で 標準的に 使われる。 ϵ = 0 \epsilon = 0 ϵ = 0 なら、直前の 層の 重みと バイアスを c > 0 c > 0 c > 0 倍しても z b j , μ j , s j z_{bj}, \mu_j, s_j z bj , μ j , s j が c c c 倍に なるだけで z ^ b j \hat{z}_{bj} z ^ bj は 変わらないので、重みの 大きさの 影響を 受けにくい。正規化で 学習が 速く 安定に なる ことは 経験的に 広く 確かめられているが、なぜ 効くのかに ついて 確定した 理論は ない。
ヒント
実務では
バッチ正規化を 含むモデルは、学習時と 推論時で 計算が 違う。推論用の モードへの 切り 替えを 忘れると、同じ 入力でも 一緒に 入力した 他の データに よって 予測が 変わる。ミニバッチが 小さいと 統計量の ゆらぎで 学習が 不安定に なるので、層正規化など バッチに よらない 正規化を 検討する。入力の 標準化(第2章 2.6 節)と 同じく、推論で 使う 統計量は 訓練データだけから 作る。
5.7 万能近似定理
多層パーセプトロンで どんな 関数が 表せるだろうか。隠れ層が 1 つでも、幅を 十分に 大きく すれば、コンパクト集合上の 連続関数を いくらでも よく 近似できる。
定理 5.18 (万能近似定理, universal approximation theorem)ϕ : R → R \phi\colon \mathbb{R} \to \mathbb{R} ϕ : R → R を 連続関数と する。次の 2 条件は 同値である。
任意の d ≥ 1 d \geq 1 d ≥ 1 、コンパクト集合 K ⊂ R d K \subset \mathbb{R}^d K ⊂ R d 、連続関数 f : K → R f\colon K \to \mathbb{R} f : K → R 、ε > 0 \varepsilon > 0 ε > 0 に 対し、ある N N N と a i , b i ∈ R a_i, b_i \in \mathbb{R} a i , b i ∈ R , w i ∈ R d w_i \in \mathbb{R}^d w i ∈ R d (i = 1 , … , N i = 1, \dots, N i = 1 , … , N )が あって sup x ∈ K ∣ f ( x ) − ∑ i = 1 N a i ϕ ( w i ⊤ x + b i ) ∣ < ε \sup_{x \in K}\lvert f(x) - \sum_{i=1}^{N}a_i\phi(w_i^{\top}x + b_i) \rvert < \varepsilon sup x ∈ K ∣ f ( x ) − ∑ i = 1 N a i ϕ ( w i ⊤ x + b i )∣ < ε 。
ϕ \phi ϕ は 多項式でない。
∑ i a i ϕ ( w i ⊤ x + b i ) \sum_ia_i\phi(w_i^{\top}x + b_i) ∑ i a i ϕ ( w i ⊤ x + b i ) は 隠れユニット N N N 個の 2 層の 多層パーセプトロンである。(2)⇒(1) は、シグモイド型( t → − ∞ t \to -\infty t → − ∞ で 0 0 0 、t → ∞ t \to \infty t → ∞ で 1 1 1 に 収束)の ϕ \phi ϕ に ついて シベンコ(1989)と ホルニク–スティンチコム–ホワイト(1989)が それぞれの 条件のもとで 示し、レシュノ–リン–ピンカス–ショッケン(1993)が「多項式でない」と いう 条件まで 広げた(不連続な ϕ \phi ϕ も 一部 扱っている)。証明は 関数解析を 使うので 省略する(シベンコの 証明は ハーン–バナッハの 定理と リースの 表現定理に よる)。ReLU・ σ \sigma σ ・tanh \tanh tanh は どれも 連続で 多項式でない。逆向きは 易しい。
証明((1)⇒(2)). ϕ \phi ϕ が m m m 次以下の 多項式なら、 d = 1 d = 1 d = 1 で ネットワーク g ( x ) = ∑ i a i ϕ ( w i x + b i ) g(x) = \sum_ia_i\phi(w_ix + b_i) g ( x ) = ∑ i a i ϕ ( w i x + b i ) は m m m 次以下の 多項式である。 K = [ 0 , 1 ] K = [0, 1] K = [ 0 , 1 ] 、f ( x ) = x m + 1 f(x) = x^{m+1} f ( x ) = x m + 1 、h = 1 / ( m + 1 ) h = 1/(m + 1) h = 1/ ( m + 1 ) 、Δ u ( x ) = u ( x + h ) − u ( x ) \Delta u(x) = u(x + h) - u(x) Δ u ( x ) = u ( x + h ) − u ( x ) と おく。 Δ \Delta Δ は 1 次以上の 多項式の 次数を 1 下げて 最高次の 係数を(次数) × h \times h × h 倍にし、定数を 0 0 0 に するので、 Δ m + 1 g = 0 \Delta^{m+1}g = 0 Δ m + 1 g = 0 、Δ m + 1 f = ( m + 1 ) ! h m + 1 \Delta^{m+1}f = (m + 1)!\ h^{m+1} Δ m + 1 f = ( m + 1 )! h m + 1 (定数)である。Δ m + 1 u ( 0 ) = ∑ i = 0 m + 1 ( − 1 ) m + 1 − i ( m + 1 i ) u ( i h ) \Delta^{m+1}u(0) = \sum_{i=0}^{m+1}(-1)^{m+1-i}\binom{m+1}{i}u(ih) Δ m + 1 u ( 0 ) = ∑ i = 0 m + 1 ( − 1 ) m + 1 − i ( i m + 1 ) u ( ih ) 、i h ∈ [ 0 , 1 ] ih \in [0, 1] ih ∈ [ 0 , 1 ] 、∑ i ( m + 1 i ) = 2 m + 1 \sum_i\binom{m+1}{i} = 2^{m+1} ∑ i ( i m + 1 ) = 2 m + 1 より
( m + 1 ) ! h m + 1 = ∣ Δ m + 1 ( f − g ) ( 0 ) ∣ ≤ 2 m + 1 sup x ∈ [ 0 , 1 ] ∣ f ( x ) − g ( x ) ∣ (m + 1)!\,h^{m+1} = \lvert \Delta^{m+1}(f - g)(0) \rvert \leq 2^{m+1}\sup_{x \in [0, 1]}\lvert f(x) - g(x) \rvert ( m + 1 )! h m + 1 = ∣ Δ m + 1 ( f − g ) ( 0 )∣ ≤ 2 m + 1 x ∈ [ 0 , 1 ] sup ∣ f ( x ) − g ( x )∣
なので、ε ≤ ( m + 1 ) ! h m + 1 / 2 m + 1 \varepsilon \leq (m + 1)!\ h^{m+1}/2^{m+1} ε ≤ ( m + 1 )! h m + 1 / 2 m + 1 では (1) が 成り立たない。 □ \square □
注意
万能近似定理は、近似する ネットワークが 存在すると 言うだけである。必要な 幅 N N N が どれだけか、勾配法で その パラメータが 見つかるか、有限の データから それを 選べるか(汎化するか)に ついては 何も 言わない。近似は コンパクト集合の 上での 話で、データの 範囲の 外での 予測(外挿)の 良さも 保証しない。「ニューラルネットワークは 何でも 学習できる」と いう 言い方は、この 定理の 主張を 超えている。
1 次元で ReLU を 使う 場合には、近似する ネットワークを 具体的に 作れる。
定理 5.19 (ReLU に よる 1 次元の 構成的近似) f : [ a , b ] → R f\colon [a, b] \to \mathbb{R} f : [ a , b ] → R を 連続、 ε > 0 \varepsilon > 0 ε > 0 と する。 δ > 0 \delta > 0 δ > 0 を「∣ x − x ′ ∣ ≤ δ \lvert x - x' \rvert \leq \delta ∣ x − x ′ ∣ ≤ δ ならば ∣ f ( x ) − f ( x ′ ) ∣ < ε \lvert f(x) - f(x') \rvert < \varepsilon ∣ f ( x ) − f ( x ′ )∣ < ε 」と なるように とり、分点 a = t 0 < t 1 < ⋯ < t N = b a = t_0 < t_1 < \cdots < t_N = b a = t 0 < t 1 < ⋯ < t N = b を t k − t k − 1 ≤ δ t_k - t_{k-1} \leq \delta t k − t k − 1 ≤ δ と なるようにとる。 s k = ( f ( t k ) − f ( t k − 1 ) ) / ( t k − t k − 1 ) s_k = (f(t_k) - f(t_{k-1}))/(t_k - t_{k-1}) s k = ( f ( t k ) − f ( t k − 1 )) / ( t k − t k − 1 ) とし、
g ( x ) = f ( a ) + s 1 ReLU ( x − t 0 ) + ∑ k = 1 N − 1 ( s k + 1 − s k ) ReLU ( x − t k ) g(x) = f(a) + s_1\operatorname{ReLU}(x - t_0) + \sum_{k=1}^{N-1}(s_{k+1} - s_k)\operatorname{ReLU}(x - t_k) g ( x ) = f ( a ) + s 1 ReLU ( x − t 0 ) + k = 1 ∑ N − 1 ( s k + 1 − s k ) ReLU ( x − t k )
と 定めると、 g g g は f f f の 折れ線補間( g ( t k ) = f ( t k ) g(t_k) = f(t_k) g ( t k ) = f ( t k ) で、各 [ t k − 1 , t k ] [t_{k-1}, t_k] [ t k − 1 , t k ] 上で 1 次式)であり、sup x ∈ [ a , b ] ∣ f ( x ) − g ( x ) ∣ < ε \sup_{x \in [a, b]}\lvert f(x) - g(x) \rvert < \varepsilon sup x ∈ [ a , b ] ∣ f ( x ) − g ( x )∣ < ε 。g g g は 隠れユニット N N N 個の 2 層の ReLU ネットワークである。
証明. δ \delta δ の 存在は ハイネ–カントールの 定理( 01-calculus 第3章 定理 3.25)に よる。 x ∈ [ t j − 1 , t j ] x \in [t_{j-1}, t_j] x ∈ [ t j − 1 , t j ] なら、k ≤ j − 1 k \leq j - 1 k ≤ j − 1 で ReLU ( x − t k ) = x − t k \operatorname{ReLU}(x - t_k) = x - t_k ReLU ( x − t k ) = x − t k 、k ≥ j k \geq j k ≥ j で ReLU ( x − t k ) = 0 \operatorname{ReLU}(x - t_k) = 0 ReLU ( x − t k ) = 0 なので、g ( x ) = f ( a ) + s 1 ( x − t 0 ) + ∑ k = 1 j − 1 ( s k + 1 − s k ) ( x − t k ) g(x) = f(a) + s_1(x - t_0) + \sum_{k=1}^{j-1}(s_{k+1} - s_k)(x - t_k) g ( x ) = f ( a ) + s 1 ( x − t 0 ) + ∑ k = 1 j − 1 ( s k + 1 − s k ) ( x − t k ) は [ t j − 1 , t j ] [t_{j-1}, t_j] [ t j − 1 , t j ] 上で 傾き s 1 + ∑ k = 1 j − 1 ( s k + 1 − s k ) = s j s_1 + \sum_{k=1}^{j-1}(s_{k+1} - s_k) = s_j s 1 + ∑ k = 1 j − 1 ( s k + 1 − s k ) = s j の 1 次式である。g ( t 0 ) = f ( a ) g(t_0) = f(a) g ( t 0 ) = f ( a ) と g ( t j ) = g ( t j − 1 ) + s j ( t j − t j − 1 ) g(t_j) = g(t_{j-1}) + s_j(t_j - t_{j-1}) g ( t j ) = g ( t j − 1 ) + s j ( t j − t j − 1 ) から、帰納法で g ( t j ) = f ( t j ) g(t_j) = f(t_j) g ( t j ) = f ( t j ) 。よって λ = ( t j − x ) / ( t j − t j − 1 ) ∈ [ 0 , 1 ] \lambda = (t_j - x)/(t_j - t_{j-1}) \in [0, 1] λ = ( t j − x ) / ( t j − t j − 1 ) ∈ [ 0 , 1 ] と おくと g ( x ) = λ f ( t j − 1 ) + ( 1 − λ ) f ( t j ) g(x) = \lambda f(t_{j-1}) + (1 - \lambda)f(t_j) g ( x ) = λ f ( t j − 1 ) + ( 1 − λ ) f ( t j ) であり、∣ x − t j − 1 ∣ , ∣ x − t j ∣ ≤ δ \lvert x - t_{j-1} \rvert, \lvert x - t_j \rvert \leq \delta ∣ x − t j − 1 ∣ , ∣ x − t j ∣ ≤ δ より
∣ f ( x ) − g ( x ) ∣ ≤ λ ∣ f ( x ) − f ( t j − 1 ) ∣ + ( 1 − λ ) ∣ f ( x ) − f ( t j ) ∣ < ε \lvert f(x) - g(x) \rvert \leq \lambda\lvert f(x) - f(t_{j-1}) \rvert + (1 - \lambda)\lvert f(x) - f(t_j) \rvert < \varepsilon ∣ f ( x ) − g ( x )∣ ≤ λ ∣ f ( x ) − f ( t j − 1 )∣ + ( 1 − λ ) ∣ f ( x ) − f ( t j )∣ < ε
g g g は 重み 1 1 1 、バイアス − t k -t_k − t k の 隠れユニット( k = 0 , … , N − 1 k = 0, \dots, N - 1 k = 0 , … , N − 1 )を、出力の 重み s 1 , s 2 − s 1 , … , s N − s N − 1 s_1, s_2 - s_1, \dots, s_N - s_{N-1} s 1 , s 2 − s 1 , … , s N − s N − 1 と 出力の バイアス f ( a ) f(a) f ( a ) で 足した ものである。 □ \square □
折れ目 1 つが 隠れユニット 1 つに 対応する。 f f f が リプシッツ連続( ∣ f ( x ) − f ( x ′ ) ∣ ≤ M ∣ x − x ′ ∣ \lvert f(x) - f(x') \rvert \leq M\lvert x - x' \rvert ∣ f ( x ) − f ( x ′ )∣ ≤ M ∣ x − x ′ ∣ )なら、等間隔の 分点で N ≥ M ( b − a ) / ( 2 ε ) N \geq M(b - a)/(2\varepsilon) N ≥ M ( b − a ) / ( 2 ε ) と すれば 誤差は ε \varepsilon ε 以下に なる(問題 5.5)。同じ 格子の 考え方を d d d 次元で 使うと 格子点は およそ ε − d \varepsilon^{-d} ε − d 個で、次元とともに 急増する。一方、層を 重ねると 少ない ユニットで 表せる 関数も ある(問題 5.6)。
5.8 畳み込みニューラルネットワーク(紹介)
256 × 256 256 \times 256 256 × 256 画素の カラー画像では d 0 = 196608 d_0 = 196608 d 0 = 196608 で、全結合の 層は 1 層だけで 巨大に なる。また、画像の 中の 猫を 見分ける 特徴は、猫が どこに 写っていても 同じはずである。この 2 点を 組み込んだのが 畳み込み層である。
定義 5.20 (畳み込み層) 1 次元の 入力 x ∈ R n x \in \mathbb{R}^n x ∈ R n と カーネル w ∈ R k w \in \mathbb{R}^k w ∈ R k に ついて ( w ⋆ x ) i = ∑ j = 1 k w j x i + j − 1 (w \star x)_i = \sum_{j=1}^{k}w_jx_{i+j-1} ( w ⋆ x ) i = ∑ j = 1 k w j x i + j − 1 (i = 1 , … , n − k + 1 i = 1, \dots, n - k + 1 i = 1 , … , n − k + 1 )と する。 C C C チャンネルの 2 次元の 入力 X ∈ R C × n 1 × n 2 X \in \mathbb{R}^{C \times n_1 \times n_2} X ∈ R C × n 1 × n 2 には、カーネル K ∈ R C ′ × C × k × k K \in \mathbb{R}^{C' \times C \times k \times k} K ∈ R C ′ × C × k × k と バイアス b ∈ R C ′ b \in \mathbb{R}^{C'} b ∈ R C ′ で
Z c ′ , i , j = ∑ c = 1 C ∑ p = 1 k ∑ q = 1 k K c ′ , c , p , q X c , i + p − 1 , j + q − 1 + b c ′ Z_{c', i, j} = \sum_{c=1}^{C}\sum_{p=1}^{k}\sum_{q=1}^{k}K_{c', c, p, q}\,X_{c, i+p-1, j+q-1} + b_{c'} Z c ′ , i , j = c = 1 ∑ C p = 1 ∑ k q = 1 ∑ k K c ′ , c , p , q X c , i + p − 1 , j + q − 1 + b c ′
を 出力する。これに 活性化関数を 施した ものを 畳み込み層 (convolutional layer) と いう。
数学の 畳み込みは w w w を 反転して 掛けるが、学習する カーネルを 読み替えるだけなので、深層学習では この 形を 畳み込みと 呼ぶ。 x ↦ w ⋆ x x \mapsto w \star x x ↦ w ⋆ x は、各行に 同じ w 1 , … , w k w_1, \dots, w_k w 1 , … , w k が 1 つずつずれて 並ぶ帯行列の 線形写像で( パラメータの 共有 )、出力の 各成分は 近くの k k k 個の 入力だけで 決まる( 局所性 )。3 × 3 3 \times 3 3 × 3 の カーネルで 64 チャンネルを 64 チャンネルに 写す層の パラメータは 64 ⋅ 64 ⋅ 9 + 64 = 36928 64 \cdot 64 \cdot 9 + 64 = 36928 64 ⋅ 64 ⋅ 9 + 64 = 36928 個で、画像の 大きさに よらない( 32 × 32 32 \times 32 32 × 32 の 画像で 同じ 大きさの 出力を 全結合で 作ると、重みだけで ( 32 ⋅ 32 ⋅ 64 ) 2 ≈ 4.3 × 10 9 (32 \cdot 32 \cdot 64)^2 \approx 4.3 \times 10^9 ( 32 ⋅ 32 ⋅ 64 ) 2 ≈ 4.3 × 1 0 9 個)。
命題 5.21 (平行移動の 同変性)添字を Z / n Z \mathbb{Z}/n\mathbb{Z} Z / n Z で 考え、 ( w ⊛ x ) i = ∑ j = 1 k w j x i + j − 1 (w \circledast x)_i = \sum_{j=1}^{k}w_jx_{i+j-1} ( w ⊛ x ) i = ∑ j = 1 k w j x i + j − 1 (巡回畳み込み)、( τ x ) i = x i − 1 (\tau x)_i = x_{i-1} ( τ x ) i = x i − 1 と すると、 w ⊛ ( τ x ) = τ ( w ⊛ x ) w \circledast (\tau x) = \tau(w \circledast x) w ⊛ ( τ x ) = τ ( w ⊛ x ) である。成分ごとの 活性化関数も ϕ ( τ x ) = τ ϕ ( x ) \phi(\tau x) = \tau\phi(x) ϕ ( τ x ) = τ ϕ ( x ) を 満たすので、巡回畳み込みと 活性化関数を 何層重ねても 平行移動と 可換である。
証明. ( w ⊛ τ x ) i = ∑ j w j x i + j − 2 = ( w ⊛ x ) i − 1 = ( τ ( w ⊛ x ) ) i (w \circledast \tau x)_i = \sum_jw_jx_{i+j-2} = (w \circledast x)_{i-1} = (\tau(w \circledast x))_i ( w ⊛ τ x ) i = ∑ j w j x i + j − 2 = ( w ⊛ x ) i − 1 = ( τ ( w ⊛ x ) ) i 。□ \square □
最後に 位置に ついて 平均や 最大値を とれば(プーリング)、位置に よらない 特徴量が 得られる。
5.9 注意機構と トランスフォーマー(紹介)
文章の 続きを 予測するには、離れた 位置の 単語どうしの 関係を 使う 必要が ある。 注意機構 (attention) では、各位置が 系列の すべての 位置を 直接参照し、どこを どれだけ参照するかを 入力に 応じて 決める。
定義 5.22 (自己注意, self-attention)T T T 個の トークンの ベクトルを 行に 並べた X ∈ R T × d X \in \mathbb{R}^{T \times d} X ∈ R T × d と、パラメータ W Q , W K ∈ R d × d k W_Q, W_K \in \mathbb{R}^{d \times d_k} W Q , W K ∈ R d × d k , W V ∈ R d × d v W_V \in \mathbb{R}^{d \times d_v} W V ∈ R d × d v に 対し、 Q = X W Q Q = XW_Q Q = X W Q 、K = X W K K = XW_K K = X W K 、V = X W V V = XW_V V = X W V と して
Attn ( X ) = softmax ( Q K ⊤ d k ) V ∈ R T × d v \operatorname{Attn}(X) = \operatorname{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V \in \mathbb{R}^{T \times d_v} Attn ( X ) = softmax ( d k Q K ⊤ ) V ∈ R T × d v
と 定める(softmax は 行ごと)。 Q , K , V Q, K, V Q , K , V の 第 t t t 行 q t ⊤ , k t ⊤ , v t ⊤ q_t^{\top}, k_t^{\top}, v_t^{\top} q t ⊤ , k t ⊤ , v t ⊤ を クエリ 、キー 、バリュー と いう。
出力の 第 t t t 行は ∑ s α t s v s \sum_s\alpha_{ts}v_s ∑ s α t s v s 、α t s = exp ( q t ⊤ k s / d k ) / ∑ s ′ exp ( q t ⊤ k s ′ / d k ) \alpha_{ts} = \exp(q_t^{\top}k_s/\sqrt{d_k})/\sum_{s'}\exp(q_t^{\top}k_{s'}/\sqrt{d_k}) α t s = exp ( q t ⊤ k s / d k ) / ∑ s ′ exp ( q t ⊤ k s ′ / d k ) で、全位置の バリューの 重みつき平均であり、重みは「 t t t の クエリと s s s の キーの 内積(似ている 度合い)」で 決まる。全結合 層や 畳み込み層の 重みは 学習後は 固定だが、 α t s \alpha_{ts} α t s は 入力ごとに 変わる。
命題 5.23 (自己注意の 性質)
( 並べ替えの 同変性) T T T 次の 置換行列 P P P に ついて Attn ( P X ) = P Attn ( X ) \operatorname{Attn}(PX) = P\operatorname{Attn}(X) Attn ( P X ) = P Attn ( X ) 。
(d k \sqrt{d_k} d k で 割る 理由) q , k ∈ R d k q, k \in \mathbb{R}^{d_k} q , k ∈ R d k の 2 d k 2d_k 2 d k 個の 成分が 独立で 平均 0 0 0 、分散 1 1 1 ならば、E [ q ⊤ k ] = 0 E[q^{\top}k] = 0 E [ q ⊤ k ] = 0 、Var ( q ⊤ k ) = d k \operatorname{Var}(q^{\top}k) = d_k Var ( q ⊤ k ) = d k 。
証明. (1) Q , K , V Q, K, V Q , K , V は P Q , P K , P V PQ, PK, PV P Q , P K , P V に なり、 ( P Q ) ( P K ) ⊤ = P Q K ⊤ P ⊤ (PQ)(PK)^{\top} = PQK^{\top}P^{\top} ( P Q ) ( P K ) ⊤ = P Q K ⊤ P ⊤ 。行と 列を 同じ 置換で 並べ替えてから 行ごとに softmax を とるのは、softmax の 後で 並べ替えるのと 同じなので、 M = Q K ⊤ / d k M = QK^{\top}/\sqrt{d_k} M = Q K ⊤ / d k と して softmax ( P M P ⊤ ) = P softmax ( M ) P ⊤ \operatorname{softmax}(PMP^{\top}) = P\operatorname{softmax}(M)P^{\top} softmax ( P M P ⊤ ) = P softmax ( M ) P ⊤ 。P ⊤ P = I P^{\top}P = I P ⊤ P = I より Attn ( P X ) = P softmax ( M ) V = P Attn ( X ) \operatorname{Attn}(PX) = P\operatorname{softmax}(M)V = P\operatorname{Attn}(X) Attn ( P X ) = P softmax ( M ) V = P Attn ( X ) 。(2) E [ q i k i ] = 0 E[q_ik_i] = 0 E [ q i k i ] = 0 で、i ≠ j i \neq j i = j なら E [ q i k i q j k j ] = 0 E[q_ik_iq_jk_j] = 0 E [ q i k i q j k j ] = 0 なので Var ( ∑ i q i k i ) = ∑ i E [ q i 2 ] E [ k i 2 ] = d k \operatorname{Var}(\sum_iq_ik_i) = \sum_iE[q_i^2]E[k_i^2] = d_k Var ( ∑ i q i k i ) = ∑ i E [ q i 2 ] E [ k i 2 ] = d k 。□ \square □
(2) から、d k \sqrt{d_k} d k で 割らないと 内積が d k \sqrt{d_k} d k の 程度の 大きさに なって softmax が 飽和し、勾配が 小さくなる。(1) から 自己注意は トークンの 順序を 見ないので、位置を 表すベクトルを 加えるなどして 位置の 情報を 与える。 トランスフォーマー (transformer。ヴァスワニら 2017) は、注意を H H H 個 並べて 出力を 連結し、行列を 掛ける 層(マルチヘッド注意)と、各トークンに 同じ 2 層の 多層パーセプトロンを 施す層を、残差接続と 層正規化で つないだブロックを 積み重ねる。文章の 生成では、未来の 位置を 参照しないよう s > t s > t s > t の q t ⊤ k s q_t^{\top}k_s q t ⊤ k s を − ∞ -\infty − ∞ に 置き換えてから softmax を とる(因果マスク)。 Q K ⊤ QK^{\top} Q K ⊤ は T × T T \times T T × T 行列なので、そのまま 計算すると 計算量と 記憶領域は 系列の 長さの 2 乗に 比例する。
注意
注意の 重み α t s \alpha_{ts} α t s は 途中の 量であり、そのまま「モデルが 予測の 根拠に した 場所」とは 限らない。また 学習時に 因果マスクを 入れ忘れると、モデルは 予測すべき 未来の トークンを 見て 当てるので、訓練の 損失は 非常に 小さいのに 生成では 役に 立たない(第1章 1.8 節の データ漏洩と 同じ 構造である)。
まとめ
多層パーセプトロンは 1 次式と 活性化関数の 合成で、活性化関数が 1 次式なら 線形モデルに 戻る。経験リスクは 一般に 凸でない。
誤差逆伝播法: 誤差は δ ( l ) = ϕ ′ ( z ( l ) ) ⊙ ( W ( l + 1 ) ⊤ δ ( l + 1 ) ) \delta^{(l)} = \phi'(z^{(l)}) \odot (W^{(l+1)\top}\delta^{(l+1)}) δ ( l ) = ϕ ′ ( z ( l ) ) ⊙ ( W ( l + 1 ) ⊤ δ ( l + 1 ) ) で 後ろから 求まり、 ∂ J / ∂ W ( l ) = δ ( l ) h ( l − 1 ) ⊤ \partial J/\partial W^{(l)} = \delta^{(l)}h^{(l-1)\top} ∂ J / ∂ W ( l ) = δ ( l ) h ( l − 1 ) ⊤ 、∂ J / ∂ b ( l ) = δ ( l ) \partial J/\partial b^{(l)} = \delta^{(l)} ∂ J / ∂ b ( l ) = δ ( l ) 。実装は 数値微分と 比べて 確かめる。
自動微分の 後ろ 向きモードは、スカラー値関数の 勾配の 全成分を 関数の 評価の 定数倍の 手間で 求める(入力の 次元に よらない)。前向きモードと 数値微分の 手間は 入力の 次元に 比例する。
勾配は 行列の 積で 伝わるので、層の 数に ついて 指数的に 消失・爆発しうる。シグモイドの 微分は 1 / 4 1/4 1/4 以下である。対策は ReLU、初期化、正規化、残差接続、勾配クリッピングなど。
同じ値の 初期化では 対称性が 崩れない。前活性の 分散を 保つ条件は、ReLU で v l = 2 / d l − 1 v_l = 2/d_{l-1} v l = 2/ d l − 1 (He)、tanh \tanh tanh で 近似的に 1 / d l − 1 1/d_{l-1} 1/ d l − 1 (折衷が Xavier の 2 / ( d l − 1 + d l ) 2/(d_{l-1} + d_l) 2/ ( d l − 1 + d l ) )である。
万能近似定理:連続な 活性化関数に ついて、隠れ層 1 つの ネットワークが コンパクト集合上の 任意の 連続関数を 一様に 近似できる ことと、活性化関数が 多項式でない ことは 同値である。存在を 述べるだけで、必要な 幅や 学習・汎化に ついては 何も 言わない。
畳み込み層は パラメータの 共有と 局所性を もち、平行移動と 可換である。自己注意は 入力から 決まる 重みで バリューを 平均し、トークンの 並べ替えと 可換なので、位置の 情報を 別に 与える。
演習問題
問題 5.1 ★ ★ 2 値分類で 出力を p = σ ( z ) p = \sigma(z) p = σ ( z ) (z = z ( L ) ∈ R z = z^{(L)} \in \mathbb{R} z = z ( L ) ∈ R )と する。損失が (a) 二乗損失 1 2 ( p − y ) 2 \frac{1}{2}(p - y)^2 2 1 ( p − y ) 2 、(b) 交差エントロピー − y log p − ( 1 − y ) log ( 1 − p ) -y\log p - (1 - y)\log(1 - p) − y log p − ( 1 − y ) log ( 1 − p ) の それぞれに ついて δ ( L ) = ∂ J / ∂ z \delta^{(L)} = \partial J/\partial z δ ( L ) = ∂ J / ∂ z を 求め、 y = 1 y = 1 y = 1 、z = − 10 z = -10 z = − 10 (自信を もって 間違えている)の ときの 値を 比べよ。分類で (b) を 使う 理由を 述べよ。
解答
d p / d z = p ( 1 − p ) dp/dz = p(1 - p) d p / d z = p ( 1 − p ) より、(a) δ ( L ) = ( p − y ) p ( 1 − p ) \delta^{(L)} = (p - y)p(1 - p) δ ( L ) = ( p − y ) p ( 1 − p ) 、(b) δ ( L ) = − y p p ( 1 − p ) + 1 − y 1 − p p ( 1 − p ) = p − y \delta^{(L)} = -\frac{y}{p}p(1 - p) + \frac{1 - y}{1 - p}p(1 - p) = p - y δ ( L ) = − p y p ( 1 − p ) + 1 − p 1 − y p ( 1 − p ) = p − y 。z = − 10 z = -10 z = − 10 では p ≈ 4.54 × 10 − 5 p \approx 4.54 \times 10^{-5} p ≈ 4.54 × 1 0 − 5 で、(a) は 約 − 4.54 × 10 − 5 -4.54 \times 10^{-5} − 4.54 × 1 0 − 5 、(b) は 約 − 1 -1 − 1 。(a) では 出力の 飽和で p ( 1 − p ) p(1 - p) p ( 1 − p ) が 小さく、大きく 間違えているのに 勾配が ほぼ 0 0 0 で 学習が 進まない。(b) では σ ′ \sigma' σ ′ の 因子が 打ち消され、誤り p − y p - y p − y が そのまま 勾配に なる。
問題 5.2 ★ ★ f ( x ) = log ∑ i = 1 n e x i f(x) = \log\sum_{i=1}^{n}e^{x_i} f ( x ) = log ∑ i = 1 n e x i を u i = e x i u_i = e^{x_i} u i = e x i 、s = u 1 + ⋯ + u n s = u_1 + \cdots + u_n s = u 1 + ⋯ + u n 、f = log s f = \log s f = log s と 計算する。後ろ 向きモードで ∇ f \nabla f ∇ f を 求めて ソフトマックス関数に なる ことを 確かめ、前向きモード( n n n 方向)と 後ろ 向きモードの 基本演算の 回数が n n n に ついてどの 程度かを 答えよ。
解答
f ˉ = 1 \bar{f} = 1 f ˉ = 1 から s ˉ = 1 / s \bar{s} = 1/s s ˉ = 1/ s 、和の 各引数への 局所的な 偏微分は 1 1 1 なので u ˉ i = 1 / s \bar{u}_i = 1/s u ˉ i = 1/ s 、exp \exp exp の 局所的な 偏微分は u i u_i u i なので x ˉ i = u i / s = e x i / ∑ j e x j = softmax ( x ) i \bar{x}_i = u_i/s = e^{x_i}/\sum_je^{x_j} = \operatorname{softmax}(x)_i x ˉ i = u i / s = e x i / ∑ j e x j = softmax ( x ) i 。関数の 評価は 約 2 n 2n 2 n 回で、後ろ 向きモードは 除算 1 回と 乗算 n n n 回を 加えて 約 3 n 3n 3 n 回(n n n に 比例)。前向きモードは 1 方向ごとに n n n に 比例する 手間で、 n n n 方向では n 2 n^2 n 2 に 比例する。
問題 5.3 ★ ★ 隠れ層 1 つ(L = 2 L = 2 L = 2 )の 多層パーセプトロンを、重みと バイアスを すべて 0 0 0 に して 勾配降下法で 学習する。活性化関数が (a) ReLU( ϕ ′ ( 0 ) = 0 \phi'(0) = 0 ϕ ′ ( 0 ) = 0 と 約束する)、(b) σ \sigma σ の とき、それぞれ何が 起こるか。
解答
はじめ z ( 1 ) = 0 z^{(1)} = 0 z ( 1 ) = 0 、h ( 1 ) = ϕ ( 0 ) 1 h^{(1)} = \phi(0)\mathbf{1} h ( 1 ) = ϕ ( 0 ) 1 で、W ( 2 ) = 0 W^{(2)} = 0 W ( 2 ) = 0 より δ ( 1 ) = 0 \delta^{(1)} = 0 δ ( 1 ) = 0 なので、W ( 1 ) , b ( 1 ) W^{(1)}, b^{(1)} W ( 1 ) , b ( 1 ) の 勾配は 0 0 0 。(a) h ( 1 ) = 0 h^{(1)} = 0 h ( 1 ) = 0 なので W ( 2 ) W^{(2)} W ( 2 ) の 勾配 δ ( 2 ) h ( 1 ) ⊤ \delta^{(2)}h^{(1)\top} δ ( 2 ) h ( 1 ) ⊤ も 0 0 0 で、b ( 2 ) b^{(2)} b ( 2 ) だけが 更新される。更新後も 他は 0 0 0 の ままなので 同じことが 繰り返され、ネットワークは いつまでも 定数を 出力する。(b) h ( 1 ) = 1 2 1 h^{(1)} = \frac{1}{2}\mathbf{1} h ( 1 ) = 2 1 1 で、W ( 2 ) W^{(2)} W ( 2 ) の 勾配は すべての 列が 等しいので W ( 2 ) W^{(2)} W ( 2 ) は 動くが、命題 5.15 の 仮定が すべての ユニットの 組で 成り立ち続け、隠れユニットは いつまでも 互いに 等しい。どちらも、幅を いくら 大きくしても 実質的に 隠れユニット 1 個以下の ネットワークに しかならない。
問題 5.4 ★ ★ ReLU の ネットワークで 勾配確認( h = 10 − 5 h = 10^{-5} h = 1 0 − 5 の 中心差分)を した ところ、ほとんどの 成分は 10 − 9 10^{-9} 1 0 − 9 程度の 差で 一致したが、1 つの 成分だけ逆伝播の 値が 0 0 0 、数値微分の 値が 0.31 0.31 0.31 だった。考えられる 原因と 確かめ方を 述べよ。
解答
その パラメータに つながる ユニットの 前活性 z z z が(その データで) 0 0 0 の 近くに あり、逆伝播では ϕ ′ ( z ) = 0 \phi'(z) = 0 ϕ ′ ( z ) = 0 と されたが、パラメータを ± h \pm h ± h 動かすと z z z が 0 0 0 を またぎ、片方でだけ ReLU が 働いたと 考えられる。中心差分は 折れ目の 両側の 傾きの 平均に 近い 値を 返すので、片側の 傾きを 返す逆伝播と 食い 違う。各前活性の 絶対値が h h h に 比べて 小さくないかを 調べる、 h h h を 変えて 差分の 値が 大きく 変わるかを 見る、入力を 少しずらして 食い 違いが 消えるかを 見る、などで 確かめる。すべての 前活性が 0 0 0 から 十分離れているのに 食い 違うなら、実装の 誤りを 疑う。
問題 5.5 ★ ★ 定理 5.19 で f f f が ∣ f ( x ) − f ( x ′ ) ∣ ≤ M ∣ x − x ′ ∣ \lvert f(x) - f(x') \rvert \leq M\lvert x - x' \rvert ∣ f ( x ) − f ( x ′ )∣ ≤ M ∣ x − x ′ ∣ を 満たし、分点が 等間隔(間隔 h = ( b − a ) / N h = (b - a)/N h = ( b − a ) / N )ならば、sup x ∈ [ a , b ] ∣ f ( x ) − g ( x ) ∣ ≤ M h / 2 \sup_{x \in [a, b]}\lvert f(x) - g(x) \rvert \leq Mh/2 sup x ∈ [ a , b ] ∣ f ( x ) − g ( x )∣ ≤ M h /2 である ことを 示せ。
解答
x ∈ [ t k − 1 , t k ] x \in [t_{k-1}, t_k] x ∈ [ t k − 1 , t k ] 、u = x − t k − 1 u = x - t_{k-1} u = x − t k − 1 、λ = 1 − u / h \lambda = 1 - u/h λ = 1 − u / h と すると、定理 5.19 の 証明より
∣ f ( x ) − g ( x ) ∣ ≤ h − u h M u + u h M ( h − u ) = 2 M h u ( h − u ) ≤ 2 M h ⋅ h 2 4 = M h 2 \lvert f(x) - g(x) \rvert \leq \frac{h - u}{h}Mu + \frac{u}{h}M(h - u) = \frac{2M}{h}u(h - u) \leq \frac{2M}{h} \cdot \frac{h^2}{4} = \frac{Mh}{2} ∣ f ( x ) − g ( x )∣ ≤ h h − u M u + h u M ( h − u ) = h 2 M u ( h − u ) ≤ h 2 M ⋅ 4 h 2 = 2 M h
したがって N ≥ M ( b − a ) / ( 2 ε ) N \geq M(b - a)/(2\varepsilon) N ≥ M ( b − a ) / ( 2 ε ) なら 誤差は ε \varepsilon ε 以下である。たとえば f = sin f = \sin f = sin を [ 0 , π ] [0, \pi] [ 0 , π ] で N = 10 N = 10 N = 10 等分すると 上界は π / 20 ≈ 0.157 \pi/20 \approx 0.157 π /20 ≈ 0.157 で、実際の 誤差は 約 0.0122 0.0122 0.0122 である。
問題 5.6 ★ ★ ★ (深さの 効果) T ( x ) = 2 ReLU ( x ) − 4 ReLU ( x − 1 / 2 ) T(x) = 2\operatorname{ReLU}(x) - 4\operatorname{ReLU}(x - 1/2) T ( x ) = 2 ReLU ( x ) − 4 ReLU ( x − 1/2 ) と する。(1) [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上で T T T は「x ≤ 1 / 2 x \leq 1/2 x ≤ 1/2 で 2 x 2x 2 x 、x ≥ 1 / 2 x \geq 1/2 x ≥ 1/2 で 2 − 2 x 2 - 2x 2 − 2 x 」であり、k k k 回の 合成 T ∘ k T^{\circ k} T ∘ k は [ 0 , 1 ] [0, 1] [ 0 , 1 ] を 2 k 2^k 2 k 等分した 各区間で 1 次式で、隣り合う 区間で 傾きが 異なる ことを 示せ。(2) T ∘ k T^{\circ k} T ∘ k は 幅 2、隠れ層 k k k 個の ReLU ネットワークで 表せる ことを 示せ。(3) 隠れ層 1 つ・隠れユニット N N N 個の ReLU ネットワーク g ( x ) = c 0 + ∑ i = 1 N c i ReLU ( w i x + b i ) g(x) = c_0 + \sum_{i=1}^{N}c_i\operatorname{ReLU}(w_ix + b_i) g ( x ) = c 0 + ∑ i = 1 N c i ReLU ( w i x + b i ) は R \mathbb{R} R を 高々 N + 1 N + 1 N + 1 個の 区間に 分けて 各区間で 1 次式である ことを 示し、 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上で T ∘ k T^{\circ k} T ∘ k に 等しい g g g には N ≥ 2 k − 1 N \geq 2^k - 1 N ≥ 2 k − 1 が 必要である ことを 結論せよ。
解答
(1) 前半は x ≤ 1 / 2 x \leq 1/2 x ≤ 1/2 で ReLU ( x − 1 / 2 ) = 0 \operatorname{ReLU}(x - 1/2) = 0 ReLU ( x − 1/2 ) = 0 である ことから 従う。 T T T は [ 0 , 1 / 2 ] [0, 1/2] [ 0 , 1/2 ] と [ 1 / 2 , 1 ] [1/2, 1] [ 1/2 , 1 ] を それぞれ [ 0 , 1 ] [0, 1] [ 0 , 1 ] に 1 次式で 全単射に 写す。「 T ∘ k T^{\circ k} T ∘ k は 長さ 2 − k 2^{-k} 2 − k の 2 k 2^k 2 k 個の 区間で 傾き ± 2 k \pm 2^k ± 2 k の 1 次式で、傾きの 符号は 交互」を 帰納法で 示す。 T ∘ ( k + 1 ) ( x ) T^{\circ(k+1)}(x) T ∘ ( k + 1 ) ( x ) は [ 0 , 1 / 2 ] [0, 1/2] [ 0 , 1/2 ] で T ∘ k ( 2 x ) T^{\circ k}(2x) T ∘ k ( 2 x ) 、[ 1 / 2 , 1 ] [1/2, 1] [ 1/2 , 1 ] で T ∘ k ( 2 − 2 x ) T^{\circ k}(2 - 2x) T ∘ k ( 2 − 2 x ) である。前者は T ∘ k T^{\circ k} T ∘ k の グラフを 横に 半分に 縮めた もので、長さ 2 − k − 1 2^{-k-1} 2 − k − 1 の 2 k 2^k 2 k 個の 区間で 傾き ± 2 k + 1 \pm 2^{k+1} ± 2 k + 1 (符号は 交互)、後者は それを x = 1 / 2 x = 1/2 x = 1/2 に ついて 折り返した ものである。 x = 1 / 2 x = 1/2 x = 1/2 の 両側の 区間は 互いの 鏡像なので 傾きの 符号が 逆で、全体でも 交互に なる。
(2) 第 1 隠れ層を h 1 = ReLU ( x ) h_1 = \operatorname{ReLU}(x) h 1 = ReLU ( x ) 、h 2 = ReLU ( x − 1 / 2 ) h_2 = \operatorname{ReLU}(x - 1/2) h 2 = ReLU ( x − 1/2 ) と すると T ( x ) = 2 h 1 − 4 h 2 T(x) = 2h_1 - 4h_2 T ( x ) = 2 h 1 − 4 h 2 は h h h の 1 次式なので、次の 層の 前活性を ( 2 h 1 − 4 h 2 , 2 h 1 − 4 h 2 − 1 / 2 ) (2h_1 - 4h_2, 2h_1 - 4h_2 - 1/2) ( 2 h 1 − 4 h 2 , 2 h 1 − 4 h 2 − 1/2 ) と すれば ReLU ( T ( x ) ) \operatorname{ReLU}(T(x)) ReLU ( T ( x )) 、ReLU ( T ( x ) − 1 / 2 ) \operatorname{ReLU}(T(x) - 1/2) ReLU ( T ( x ) − 1/2 ) が 得られる。これを k k k 回繰り返し、出力を 2 h 1 − 4 h 2 2h_1 - 4h_2 2 h 1 − 4 h 2 と すればよい。
(3) w i ≠ 0 w_i \neq 0 w i = 0 の ユニットは x = − b i / w i x = -b_i/w_i x = − b i / w i の 1 点でだけ折れ、w i = 0 w_i = 0 w i = 0 の ユニットは 定数である。高々 N N N 個の 折れ目で R \mathbb{R} R を 高々 N + 1 N + 1 N + 1 個の 区間に 分けると、各区間で g g g は 1 次式の 和なので 1 次式である。 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上で g = T ∘ k g = T^{\circ k} g = T ∘ k なら、(1) の 区間の 境目 2 k − 1 2^k - 1 2 k − 1 個では すべて 傾きが 変わるので、それらは すべて g g g の 折れ目であり、 N ≥ 2 k − 1 N \geq 2^k - 1 N ≥ 2 k − 1 。深さ k k k なら 隠れユニット 2 k 2k 2 k 個で 表せる 関数が、隠れ層 1 つでは 2 k − 1 2^k - 1 2 k − 1 個以上を 要する。