教科書 › 第III部 深層学習:何の前提を足すか
CHAPTER 5

構造に前提を埋める ── 畳み込みと再帰

無料13分

第2章で、過学習の手当てとして「容量を下げる」を挙げました。ただし下げすぎれば今度は足りなくなる——両側から挟まれた、いかにも分の悪い話でした。

この章は第3の道です。容量をただ減らすのではなく、正しい方向にだけ減らす。そのために、データについて知っていることを構造そのものに埋め込みます。第1章で「第5章から、扱うデータの形に応じてどんな前提を構造に埋めるかが始まる」と書いたのは、ここのことです。

1. 全結合は「何も仮定しない」ことの代償を払っている

28×2828 \times 28 の画像を128個の特徴に写す全結合層は、重みが 784×128=100,352784 \times 128 = 100{,}352 個(+バイアス128)。

この層は画素の並び方を一切知りません。画像をバラバラに並べ替えてから学習しても、同じ精度に達します。並びに意味があるという情報が、構造のどこにも入っていないからです。

代償は2つ出ます。

  • パラメータが多い。 入力が 224×224224\times224 になると 6,422,6566{,}422{,}656 個(→128のまま)。
  • ずらした画像が別物になる。 猫が1画素右にいるだけで、入ってくる数の並びは全部違います。対応するには、ずれた例をデータで覚えるしかありません。

2. 畳み込み ── 3つの前提を同時に入れる

同じ重みの小さな窓を、全位置に滑らせます。1次元で書くと

yi  =  ∑jkj xi+j−my_i \;=\; \sum_{j} k_j \, x_{i+j-m}
(1)

ここで入っている前提は3つです。

  1. 局所性:遠く離れた画素は直接には関係しない(窓の外は見ない)
  2. 重み共有:同じ特徴は画像のどこにあっても同じ重みで検出する
  3. 平行移動の同等性:入力がずれれば、出力も同じだけずれる

f(shifts(x))  =  shifts(f(x))f\big(\mathrm{shift}_s(x)\big) \;=\; \mathrm{shift}_s\big(f(x)\big)
(2)

パラメータ数が変わります。

層 重み+バイアス
全結合 784→128784 \to 128 100,480
畳み込み 3×3×1→323\times3\times1 \to 32ch 320
畳み込み 5×5×1→325\times5\times1 \to 32ch 832

約314分の1。 しかも畳み込みの数は入力の大きさに依りません。224×224224\times224 でも 1024×10241024\times1024 でも 320 のままです(全結合は 6,422,6566{,}422{,}656、134,217,856134{,}217{,}856 と増えます)。

窓は小さくても、重ねれば届く範囲は広がります。3×33\times3 を LL 層重ねたときに1つの出力が見ている範囲(受容野)は 1+2L1 + 2L 画素。

層数 1 2 4 8
受容野(1辺) 3 5 9 17

1層ごとに両側へ1画素ずつ。 深さは、小さい窓のまま広い範囲を見るための仕掛けでもあります。

3. 「ずれても同じ」は、どこまで本当か

式(2)は本当に成り立つのか、2通りの順番で計算して比べます。A: ずらしてから通す/B: 通してからずらす。

FIG 1上が入力、下が同じ出力を2通りの順番で計算したもの。重なっていれば同等性が成り立っている。畳み込み(端を巻き戻す)ではどれだけずらしても重なる。全結合に切り替えると2本が離れる。端を「0で埋める」にすると、山が端をまたぐ回だけ崩れる

実測しました(長さ32・カーネル (0.25,0.5,−0.25)(0.25, 0.5, -0.25))。

ずらし量 山の位置 畳み込み(巻き戻し) 畳み込み(0で埋める) 全結合
1 11〜 0 0 0.8583
7 17〜 0 0 0.6100
18 28〜 0 0.1500 —
22 0〜 0 0.0750 —
25 3〜 0 0 —

(出力そのものの大きさは 0.5155 です。全結合の差 0.86 は「まったく別物」の意味。)

巻き戻しなら常に厳密に0、0で埋めると山が端をまたぐ回だけ崩れます。同等性は「畳み込みだから成り立つ」のではなく、端の扱いまで決めて初めて成り立つ性質でした。実際の画像モデルは0埋めが普通なので、端の近くでは同等性が崩れている——教科書の図が隠しがちな事実です。

構造に前提を埋めるとは、仮定を重みの数で払うことです。前提が当たっていれば、少ないパラメータで同じ仕事ができ、見ていないずれ方にも最初から対応できます。外れていれば、その前提は外せない間違いになります(画像を並べ替えた入力に畳み込みを当てても意味がありません)。

4. 系列 ── 時間の方向に重みを共有する

長さの変わる系列には、画像とは別の前提が要ります。どの時刻でも同じ規則が働く。これを重み共有で書くと

ht  =  φ(Wht−1+Uxt)h_t \;=\; \varphi\big(W h_{t-1} + U x_t\big)
(3)

WW は時刻によらず同じ1枚です。これで長さがいくつでも扱えます。

代わりに、第3章で見た積が時間の方向に現れます。

∂hT∂h1  =  ∏tW⊤diag(φ′(zt))\frac{\partial h_T}{\partial h_1} \;=\; \prod_{t} W^{\top} \mathrm{diag}\big(\varphi'(z_t)\big)
(4)

層を重ねたときと同じ形ですが、今度は同じ WW が TT 回掛かります。第0部の第1章の式(6)(Ak=PΛkP−1A^k = P\Lambda^k P^{-1})がそのまま効いて、固有値の TT 乗が出ます。

活性化を外した線形の場合に測ると、きれいに ρT\rho^T が出ます(ρ\rho は WW の最大固有値の絶対値)。

TT ρ=0.8\rho=0.8 ρ=1.0\rho=1.0 ρ=1.2\rho=1.2
10 8.2×10−28.2\times10^{-2} 0.761 4.71
50 4.9×10−64.9\times10^{-6} 0.345 3.1×1033.1\times10^{3}
100 7.2×10−117.2\times10^{-11} 0.354 2.9×1072.9\times10^{7}

1.2100=8.3×1071.2^{100} = 8.3\times10^{7} と同じ桁です。ρ<1\rho<1 なら消え、ρ>1\rho>1 なら爆発する——線形ならそのとおりです。

ところが tanh⁡\tanh を入れると変わります。

ρ\rho T=100T=100 での ∥\lVert勾配∥\rVert tanh⁡′\tanh' の平均
0.8 1.3×10−121.3\times10^{-12} 0.966
1.0 9.9×10−59.9\times10^{-5} 0.927
1.2 1.4×10−11.4\times10^{-1} 0.834
2.0 8.2×1048.2\times10^{4} 0.488

ρ=1.2\rho = 1.2 では爆発しません。 ρ\rho を上げると zz が大きくなり、tanh⁡′\tanh' が落ちて打ち消すからです。第3章の結論——効くのは(重みの大きさ)×(活性化の傾き)の積——が、ここでも同じ形で出ています。

5. ゲート ── 掛け算で「通す量」を決める

積が TT 回続くのが問題なら、積の中身を1に近づけられるようにすればよい。そのために、通す量そのものを学習します。

ct  =  ft∘ct−1  +  it∘gtc_t \;=\; f_t \circ c_{t-1} \;+\; i_t \circ g_t
(5)

ftf_t(忘却ゲート)と iti_t(入力ゲート)は0〜1の値で、∘\circ はアダマール積です(第0部の第1章で「アダマール積が主役になる場所」として挙げた2つめがこれ)。

この経路の勾配は

∂cT∂c1  =  ∏tft\frac{\partial c_T}{\partial c_1} \;=\; \prod_t f_t

WW が1回も出てきません。 重み行列の積ではなく、ゲートの値の積だけ。ftf_t が1に近ければ、TT が大きくても残ります。

ff T=20T=20 T=100T=100
0.90 0.122 2.7×10−52.7\times10^{-5}
0.95 0.358 5.9×10−35.9\times10^{-3}
0.99 0.818 0.366
1.00 1.000 1.000

素の RNN は ρ=1.0\rho=1.0 でも T=100T=100 で 9.9×10−59.9\times10^{-5} でした。f=0.99f = 0.99 なら 0.366——3千倍以上残っています。

$c_t = f\circ c_{t-1} + \cdots$ の形には見覚えがあるはずです。第0部の第2章の演習3で見た残差接続 $y = x + F(x)$ と同じ、足し算の経路です。掛け算だけで繋ぐと積が効いて消える。足し算の経路を1本通しておくと、そこは1倍で通る。LSTM も残差接続も、やっていることはこの一点です。

よくある誤解: 「畳み込みは画像用、再帰は系列用の道具である」

道具の名前ではなく、どの前提を埋めたかで見ると違う景色になります。

構造 埋めた前提 共有している軸
全結合 なし (共有しない)
畳み込み 近くだけが関係する/位置が変わっても同じ規則 空間
再帰 時刻が変わっても同じ規則 時間
注意機構 どこを見るかを入力ごとに決める (重みは共有、結び付きは可変)

畳み込みは1次元にすれば音声やテキストに使えますし(実際に使われています)、再帰は画像の走査にも使えます。選ぶ基準はデータの種類ではなく、その前提が当たっているかどうかです。

当たっていない前提を埋めると、容量を減らしたぶんがそのまま損になります。表形式のデータ(列の並びに意味がない)に畳み込みを当てるのが典型で、列を並べ替えたら別の答えが出るという、埋めたはずの前提と正反対の性質が出ます。

逆に、前提を外せば自由になるとも限りません。Vision Transformer は畳み込みの前提を外しましたが、その代わりに大量のデータが要ります。第2章の表のとおり、前提(=容量の制限)とデータ量は交換関係にあります。前提を外すなら、外した分をデータで払うことになります。

演習

答えは閉じてあります。手を動かしてから開いてください。

演習1. 入力 64×6464\times64 の画像を扱います。(a) 全結合で256個の特徴に写すときのパラメータ数。(b) 3×3×1→2563\times3\times1\to256ch の畳み込みでは。(c) 入力を 256×256256\times256 にしたとき、それぞれどうなりますか。

答えを見る

(a) 642×256+256=1,048,83264^2 \times 256 + 256 = 1{,}048{,}832 個。

(b) 9×256+256=2,5609 \times 256 + 256 = 2{,}560 個。 約410分の1です。

(c) 全結合は 2562×256+256=16,777,472256^2 \times 256 + 256 = 16{,}777{,}472 個(16倍)。畳み込みは 2,560 のまま。 畳み込みのパラメータ数は窓の大きさとチャネル数だけで決まり、入力の大きさに依りません。これは「同じ重みを全位置で使い回す」ことの直接の帰結です。

演習2. 3×33\times3 の畳み込みを重ねます。(a) 受容野を31画素にするには何層要りますか。(b) 5×55\times5 なら。(c) 大きい窓を1層使うのと、小さい窓を重ねるのと、パラメータ数はどちらが少ないですか(1チャネルとして)。

答えを見る

(a) 15層。 1+2L=311 + 2L = 31 より L=15L = 15。

(b) 受容野は 1+4L1 + 4L なので L=7.5L = 7.5 → 8層(1+32=331+32 = 33 画素で超える)。

(c) 小さい窓を重ねるほうが少ない。 受容野9画素をつくるのに、9×99\times9 を1層なら81個、3×33\times3 を4層なら 9×4=369\times4 = 36 個。しかも層の間に活性化が入るぶん、同じ受容野でより複雑な形が書けます。これが 3×33\times3 ばかり使われる理由です(ただし層が増えるので、第3章の積の問題は増えます)。

演習3. 長さ200の系列を素の RNN で扱います。WW の最大固有値の絶対値は 0.9 でした。(a) 勾配はおおよそ何倍になりますか(線形として)。(b) ゲートで f=0.995f = 0.995 を保てたら。(c) (b) が可能なのはなぜですか。

答えを見る

(a) 0.9199≈7×10−100.9^{199} \approx 7\times10^{-10}。 事実上ゼロで、系列の先頭は末尾の損失に影響できません。

(b) 0.995199≈0.370.995^{199} \approx 0.37。 3分の1強が残ります。

(c) 掛かるものが変わったから。 素の RNN では W⊤diag(φ′)W^{\top}\mathrm{diag}(\varphi') が掛かり、WW は系列全体で1枚しかないので、どの時刻にも同じ縮小率が強制されます。ゲートの経路は ftf_t だけが掛かり、ftf_t は時刻ごと・成分ごとに入力から決まるので、「ここは覚えておく(f≈1f\approx1)」「ここは忘れる(f≈0f\approx0)」を使い分けられます。保つべき所だけ1に近づけられるのが違いです。

この章で言っていないこと

  • LSTM/GRU の完全な式は書いていません。 本文の式(5)はセル状態の経路だけを取り出したもので、実際には出力ゲートや ft,it,gtf_t, i_t, g_t の作り方が付きます。記事側に譲りました。
  • プーリング・ストライド・ダイレーションは扱っていません。受容野の計算は stride 1 の場合だけです。プーリングは平行移動不変性(同等性ではない)を足す仕掛けで、別の話になります。
  • 注意機構は表で1行触れただけです。「どこを見るかを入力ごとに決める」構造で、第6章以降の主題になります。
  • RNN の実測は幅64・固定の初期値での1回の測定です。ρ\rho と tanh⁡′\tanh' の掛け合わせという形は変わりませんが、値は設定で変わります。
  • 本文の数値はすべて実際に計算して確かめています(パラメータ数、受容野、2通りの順番の差(巻き戻し/0埋め/全結合)、線形RNNの ρT\rho^T と 1.21001.2^{100} の一致、tanh⁡\tanh 入りでの勾配と tanh⁡′\tanh' の平均、ゲートの fTf^T)。

もっと詳しく

コメント

コメントにはログインが必要です