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

規則を書くか、規則を当てるか

無料15分

人に「猫の見分け方を言葉で書いてください」と頼むと、だいたい詰まります。耳が三角、ひげがある、目が縦——どれも例外が出る。にもかかわらず、人は猫を一瞬で見分けます。規則を言葉にできないのに、判別はできる。 この落差が、この本の出発点です。

やり方は2つあります。規則を書くか、規則を当てるか。

書く側の限界は「つまみの数」で決まる

下の図で、まず自分で規則を書いてみてください。点は2種類あり、直線1本で分けます。つまみは2つ——線の角度と切片です。

FIG 1左右に2つの山がある点群。「手で書く」では角度と切片の2つのつまみで線を引く。「データから当てる」に切り替えると、つまみに触らずに同じ線を探し始める。点の数とばらつきも動かせる

図は 46.7% の線から始まります(わざと外した位置に置いてあります)。角度と切片を根気よく動かせば、93.3% まで行きます(この図の既定の点群で、2つのつまみを総当たりして測った上限です)。残りは2つの山が重なっている所で、直線1本ではどう引いても拾えません。

ここで大事なのは、合わせられたことではなく、つまみが2つで済んだ理由です。 点が平面の上にあり、特徴が2つ(横と縦)しかないからです。

特徴が dd 個なら、式に出てくる数は d+1d+1 個です。向きを決める重み w1,…,wdw_1,\dots,w_d が dd 個、位置を決める切片 bb が1つ。特徴が3つなら線は平面になって4個、784個——28×28の画素をそのまま並べただけの小さな画像——なら 785個 です。手で回す対象が785個あるとき、人間に残る戦略はありません。

ここで数が1つ余ることに気づいてください。この図は d=2d=2 なので数は3個(w1,w2,bw_1, w_2, b)あるのに、つまみは2つしかありません。ww と bb をまとめて2倍に伸ばしても、w⊤x+b=0w^{\top}x + b = 0 を満たす点の集まりは同じです。線は1ミリも動かない。だから動かす意味があるのは「向き」と「位置」の2つ分だけで、角度と切片というつまみは、その2つをそのまま触れる形に直したものです。

数は d+1d+1 個あるが、境界は dd 個分しか決めていない。余った1つ——伸ばす倍率——は境界を変えないかわりに、別のものを変えます。 何を変えるかは、この章の後半で測ります。

これが「規則を書く」の限界です。限界は賢さではなく、次元で決まります。

当てる側は、手順が次元で変わらない

同じ図で「データから当てる」に切り替えてください。つまみは動かせなくなり、代わりに線が勝手に動き出します。止まったところで 91.7%——手で総当たりした上限 93.3% のすぐ下です(どちらも同じ点群での実測)。つまみに一度も触らずに、手でできる最良の近くまで来ています。

やっていることは1行です。いまの線で点を判定し、間違え方の向きに線を少し動かす。これを繰り返す。

w←w−η⋅1m∑i=1m(σ(w⊤xi+b)−yi)xiw \leftarrow w - \eta \cdot \frac{1}{m}\sum_{i=1}^{m} \left(\sigma(w^{\top}x_i + b) - y_i\right) x_i
(1)

σ\sigma はロジスティック関数 σ(z)=1/(1+e−z)\sigma(z) = 1/(1+e^{-z})、yiy_i は正解(0か1)、η\eta は1回に動かす量です。式(1)の中身で注目すべきは (σ(⋅)−yi)(\sigma(\cdot) - y_i) の部分で、これは予測と正解の差です。差が0なら動かない。差が大きいほど大きく動く。

そして重要なのは、この式が xx の次元に依存していないことです。特徴が2個でも784個でも、書く式は同じ。for の回る回数が変わるだけです。図の中の「当てる」側も、まさにこの式を1回ずつ回しています。

手で書く側は次元とともに手に負えなくなり、当てる側は次元が増えても手順が変わらない。この非対称が、機械学習を選ぶ理由です。

式(1)はどこから来たのか

「間違え方の向きに動かす」と言い換えましたが、向きを手で決めたわけではありません。下げたい量を1つ決めれば、動かす向きは微分で一意に出ます。 式(1)はその微分です。元の量を見ていきます。

pi=σ(w⊤xi+b)p_i = \sigma(w^{\top}x_i + b) を「その点が yi=1y_i=1 である確率」と読むことにします。正解が1の点では pip_i を、0の点では 1−pi1-p_i を大きくしたい。両方まとめて1本で書くと pi yi(1−pi)1−yip_i^{\,y_i}(1-p_i)^{1-y_i} です(yiy_i が0か1なので、片方が必ず指数0=1になって消えます)。mm 個の点で同時に大きくしたいなら掛け算で、掛け算は対数を取れば足し算になり、「大きくしたい」は符号を反転すれば「小さくしたい」になります。

L(w,b)=−1m∑i=1m[ yilog⁡pi+(1−yi)log⁡(1−pi) ]L(w,b) = -\frac{1}{m}\sum_{i=1}^{m}\Big[\, y_i \log p_i + (1-y_i)\log(1-p_i) \,\Big]
(2)

これが交差エントロピー(対数損失)です。yi=1y_i=1 の点では −log⁡pi-\log p_i だけが残り、pip_i が1に近いほど0へ、0に近いほど際限なく大きくなります。当てた上に自信があれば小さく、外した上に自信があれば巨大という形です。正解率にはこの「外し方の重さ」がありません——当たりか外れかを1票ずつ数えるだけです。

あとは LL を ww で微分します。3段で終わります。

1段目。 ロジスティック関数の微分は自分自身で書けます。σ′(z)=σ(z)(1−σ(z))=p(1−p)\sigma'(z) = \sigma(z)\big(1-\sigma(z)\big) = p(1-p)。

2段目。 1点分の損失 ℓ=−[ylog⁡p+(1−y)log⁡(1−p)]\ell = -\big[y\log p + (1-y)\log(1-p)\big] を z=w⊤x+bz = w^{\top}x + b で微分します。合成関数なので ∂ℓ/∂z=(∂ℓ/∂p)⋅(∂p/∂z)\partial \ell/\partial z = (\partial \ell/\partial p)\cdot(\partial p/\partial z) で、それぞれは

∂ℓ∂p=−(yp−1−y1−p),∂p∂z=p(1−p)\frac{\partial \ell}{\partial p} = -\left(\frac{y}{p} - \frac{1-y}{1-p}\right), \qquad \frac{\partial p}{\partial z} = p(1-p)

です。掛けると p(1−p)p(1-p) が分母を払います。

∂ℓ∂z=−[ y(1−p)−(1−y)p ]=−[ y−yp−p+yp ]=p−y\frac{\partial \ell}{\partial z} = -\big[\, y(1-p) - (1-y)p \,\big] = -\big[\, y - yp - p + yp \,\big] = p - y

約分で p(1−p)p(1-p) が消えること自体が、この損失を選ぶ理由です。 残るのは p−yp - y——予測と正解の差そのもの。式(1)の括弧の中にいたものです。

3段目。 z=w⊤x+bz = w^{\top}x + b なので ∂z/∂w=x\partial z/\partial w = x、∂z/∂b=1\partial z/\partial b = 1。mm 点の平均に戻して

∂L∂w=1m∑i=1m(pi−yi) xi,∂L∂b=1m∑i=1m(pi−yi)\frac{\partial L}{\partial w} = \frac{1}{m}\sum_{i=1}^{m}(p_i - y_i)\,x_i, \qquad \frac{\partial L}{\partial b} = \frac{1}{m}\sum_{i=1}^{m}(p_i - y_i)
(3)

式(1)は w←w−η ∂L/∂ww \leftarrow w - \eta\,\partial L/\partial w と書き直せます。損失を下げる向きに一歩動く、それだけの式でした。(式(3)の勾配は、この章の図と同じ60点で数値微分と突き合わせて確かめました。差は最大 1.6×10−101.6\times10^{-10} です。)

「間違え方の向きに動かす」が式(1)になるまでに、人が決めたのは損失をどう置くかの1点だけです。向きは微分が決めます。この分担は層を重ねても変わりません——決める場所が増えないことが、第3章の内容です。

「深く」する理由は、まだ出てきていない

ここまでに出てきたのは直線1本です。直線で分けられない配置——たとえば一方が他方を囲んでいる形——では、角度をどう回しても勝てません。図の「ばらつき」を大きくすると、2つの山が混ざって正解率が落ちます。あれは線の引き方が悪いのではなく、直線という形が足りない状態です。

(なお「当てる」側が 93.3% に完全には届かないのは、腕が悪いからではありません。式(1)が下げているのは正解率ではなく対数損失で、両者は別の量です。次の節で実数を出します。)

そこで選択肢が2つに分かれます。

  1. 特徴を人が作る。 「中心からの距離」のような列を人の手で足してやれば、直線でも分けられるようになります。長らく主流だったやり方で、作る列の設計こそが腕の見せどころでした。
  2. 特徴も当てる。 入力から特徴を作る段を、分類の段と一緒に、同じ式で学習してしまう。

2つめが「深く」するということです。層を重ねるのは、層ごとに人が意味を決めるためではなく、特徴を作る仕事まで式(1)に任せるためです。この本の残り11章は、ほぼこの一点の展開です。

  • 第2章では、当てはめを強くすると手元のデータだけに合ってしまう問題(過学習)を扱います。
  • 第3章では、層を重ねたときに式(1)の「差」をどうやって下の層まで届けるかを見ます。連鎖律だけで片付きます。
  • 第4章では、η\eta の選び方と、過学習への手当てが同じ問いの裏表であることを見ます。
  • 第5章から、扱うデータの形に応じて「どんな前提を構造に埋めるか」が始まります。

よくある誤解: 「正解率が上がる=損失が下がる」

同じ向きに動くことが多いので同じものに見えますが、別の量です。この章の図でずれています。

ずれる出どころは、前に余らせた1つです。正解率は w⊤x+bw^{\top}x + b の符号しか見ないので、ww と bb を同じ正の倍率で伸ばしても1点も変わりません。いっぽう損失は p=σ(w⊤x+b)p = \sigma(w^{\top}x + b) の値を見るので、伸ばすほど pp は0か1に寄り、当たっている点では小さくなり、外している点では跳ね上がります。倍率は境界を変えずに損失だけを変える。 図の既定の60点で測った実数です。

正解率 対数損失
手で総当たりした最良の線(角度 −30°-30°・切片 0.080.08) 93.3%(56/60) 0.4838
同じ線を5.55倍に伸ばしただけ 93.3%(56/60) 0.2895
当てる側・240回(図が止まる所) 91.7%(55/60) 0.3420

1行目と2行目は同じ境界です。点の分け方は1点も変わらないのに、損失は0.4838と0.2895でほぼ倍違う。正解率は境界だけを見ており、損失は境界と自信の強さの両方を見ている——これが「別の量」の中身です。

逆向きにもずれます。240回のあいだに、損失が下がったのに正解率が下がった回が3回ありました。1回目→2回目で正解率 88.3%→81.7%・損失 0.6848→0.6775、25回目→26回目で 88.3%→86.7%・0.5547→0.5509、35回目→36回目で 86.7%→85.0%・0.5205→0.5175。式(1)は毎回きちんと損失を下げていて、それでも正解率は下がりうる。

だから「当てる」側が 91.7% で止まって手の 93.3% に届かないのは腕の問題ではありません。式(1)は自分の仕事(損失を下げる)をしているだけで、正解率の最大を目指していないからです。3行目の損失 0.3420 は1行目の 0.4838 より小さく、損失では当てる側のほうが良い。ただし2行目を見れば分かるように、手の境界も倍率を選べば 0.2895 まで下がります。つまり当てる側は240回では損失の底にも達していません——止める場所を決める話は第4章です。

これは「正解率を見るな」ではありません。2つとも見る。損失だけを見ていると、損失が下がったのに現場で使える率が落ちている状態(上の1回目→2回目)を見逃します。

演習

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

演習1. 1点分の損失 ℓ=−[ylog⁡σ(z)+(1−y)log⁡(1−σ(z))]\ell = -\big[y\log\sigma(z) + (1-y)\log(1-\sigma(z))\big] について、y=1y=1 の場合だけを使って ∂ℓ/∂z=σ(z)−1\partial\ell/\partial z = \sigma(z) - 1 を示してください。σ′(z)=σ(z)(1−σ(z))\sigma'(z) = \sigma(z)(1-\sigma(z)) は使ってよい。

答えを見る

y=1y=1 なら第2項の係数 1−y1-y が0になり、ℓ=−log⁡σ(z)\ell = -\log\sigma(z) だけが残ります。log⁡\log の微分と連鎖律で

∂ℓ∂z=−1σ(z)⋅σ′(z)=−σ(z)(1−σ(z))σ(z)=−(1−σ(z))=σ(z)−1\frac{\partial \ell}{\partial z} = -\frac{1}{\sigma(z)}\cdot\sigma'(z) = -\frac{\sigma(z)\big(1-\sigma(z)\big)}{\sigma(z)} = -\big(1-\sigma(z)\big) = \sigma(z) - 1

本文の p−yp - y に y=1y=1 を入れた σ(z)−1\sigma(z)-1 と一致します。y=0y=0 の側も3行で、ℓ=−log⁡(1−σ(z))\ell = -\log\big(1-\sigma(z)\big) から ∂ℓ/∂z=σ(z)\partial\ell/\partial z = \sigma(z) が出ます。yy が0でも1でも、σ\sigma の微分が分母を払って差だけが残るのが要点です。

演習2. 28×28 の画素をそのまま特徴に使うとします。(a) 式(1)が動かす数はいくつですか。(b) そのうち境界の形を決めているのは何個分ですか。(c) 残った1つは何を変えますか。

答えを見る

(a) 785個。 重み ww が 784784 個、切片 bb が1個で d+1d+1。

(b) 784個分。 ww と bb を同じ正の倍率 cc で伸ばしても c (w⊤x+b)=0c\,(w^{\top}x + b) = 0 の解は同じなので、境界は d+1d+1 個の数のうち1つ分を使っていません。自由度は d=784d = 784。

(c) 予測の自信の強さ。 伸ばすほど σ\sigma の出力が0か1に寄ります。境界が同じなので正解率は変わらず、損失だけが変わる。「よくある誤解」の表の1行目と2行目がこれです。

演習3. 3点とも正解が y=1y=1 だとします。モデルAの予測は p=(0.55, 0.55, 0.05)p=(0.55,\,0.55,\,0.05)、モデルBは p=(0.45, 0.45, 0.45)p=(0.45,\,0.45,\,0.45)。p>0.5p>0.5 を1と判定します。(a) それぞれの正解率。(b) それぞれの平均対数損失。(c) 「正解率が高いほうが損失も小さい」は成り立ちますか。

答えを見る

(a) A は2点が 0.55>0.50.55>0.5 で当たり=2/3=66.7%2/3 = 66.7\%。B は3点とも 0.45<0.50.45<0.5 で全外し=0/3=0%0/3 = 0\%。

(b) y=1y=1 なので1点分は −log⁡p-\log p です。−log⁡0.55=0.5978-\log 0.55 = 0.5978、−log⁡0.05=2.9957-\log 0.05 = 2.9957、−log⁡0.45=0.7985-\log 0.45 = 0.7985。

LA=0.5978+0.5978+2.99573=1.3971,LB=0.7985×33=0.7985L_A = \frac{0.5978 + 0.5978 + 2.9957}{3} = 1.3971, \qquad L_B = \frac{0.7985 \times 3}{3} = 0.7985

(c) 成り立ちません。 A は正解率が高いのに損失は約1.75倍大きい。差を作っているのは A の3点目で、外した上に自信があった(y=1y=1 なのに p=0.05p=0.05)ので1点で 2.99572.9957 を払っています。B は全部外していますが、どれも 0.450.45——「分からない」に近い場所にいるので1点あたり 0.79850.7985 で済む。損失は外し方の重さを数え、正解率は数えない。 外れを自信たっぷりに出すモデルは、正解率が高くても損失で罰されます。

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

  • 「深いほうが常に良い」とは言っていません。 層を増やすと学習が不安定になり、第4章で扱う手当てが必要になります。データが少なければ、人が特徴を作るほうが強い場面も残ります。
  • 式(1)は分類の最も単純な形(ロジスティック回帰)です。交差エントロピーは導出しましたが、なぜこの損失を選ぶのが良いのか(最尤推定との関係・他の置き方との比較)は第2章で扱います。
  • 「よくある誤解」の数字は、この章の図の既定の点群(60点・合成データ)での実測です。点の数やばらつきを変えれば値は変わります。変わらないのは正解率が倍率に鈍く、損失が倍率に敏感という性質のほうです。
  • 図の点は合成データです。実データの性質(欠損・偏り・分布の変化)は扱っていません。

もっと詳しく

この章は地図です。各論は記事側に揃っています。

コメント

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