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

手元に合わせすぎる ── 過学習

無料14分

第1章で「規則を書く」ではなく「規則を当てる」を選びました。当てはめる力は強いほど良さそうに見えます。実際、強くするほど手元のデータでの成績は上がり続けます。そして、ある所から手元のデータでしか上がらなくなります。

この落差がこの章の主題です。先に言っておくと、原因はモデルの出来ではありません。下げている量と、本当に下げたい量が別物だということです。

(第1章で「第2章で扱う」と書いた損失の選び方——なぜ交差エントロピーなのか——は、確率の言葉が要るので第0部の第3章に移しました。この章はもう一方、当てはめを強くすると何が起きるかを扱います。)

1. 下げている量と、下げたい量

本当に下げたいのは、まだ見ていないデータでの誤差です。入力と正解の組が分布 D\mathcal{D} から来るとして

R(f)  =  E(x,y)∼D[ ℓ(f(x), y) ]R(f) \;=\; \mathbb{E}_{(x,y)\sim \mathcal{D}}\big[\,\ell(f(x),\, y)\,\big]
(1)

これを汎化誤差といいます。式(1)は期待値(第0部の第3章の式(3))で、D\mathcal{D} が分からない以上そのまま計算できません。

計算できるのは手元の nn 件での平均だけです。

R^(f)  =  1n∑i=1nℓ(f(xi), yi)\hat{R}(f) \;=\; \frac{1}{n}\sum_{i=1}^{n} \ell(f(x_i),\, y_i)
(2)

ff を固定して見れば、式(2)は式(1)の偏っていない推定です(第0部の第3章の式(5))。問題は、学習が ff を固定しないことです。R^\hat{R} を小さくするように ff を選んだ瞬間、R^\hat{R} はもう RR の公平な推定ではありません。 選ぶのに使った物差しで選んだ結果を測っている——これが過学習の正体で、この章の「よくある誤解」まで同じ話が続きます。

2. 実測 ── 次数を上げるとどうなるか

y=sin⁡(2πx)+εy = \sin(2\pi x) + \varepsilon(ε\varepsilon は標準偏差 σ=0.25\sigma = 0.25 のノイズ)から20件を取り、dd 次多項式を最小二乗で当てはめます。テストは同じ分布から4,000件。

次数 dd パラメータ数 訓練 RMSE テスト RMSE
1 2 0.5443 0.5165
3 4 0.1621 0.3211
5 6 0.1540 0.2947
9 10 0.1438 0.4457
15 16 0.1042 67.4518
19 20 0.0000 587889.3

訓練 RMSE は一度も上がりません。 容量を増やせば手元には必ずより良く合わせられるからです。いっぽうテストは d=5d=5 で底を打ち、そこから跳ね上がります。d=19d=19 では訓練誤差が厳密に0——20件を20個のパラメータで全部通した——のに、テストは6桁です。

テストの下限は σ=0.25\sigma = 0.25 です。yy 自体にノイズが乗っているので、本当の形 sin⁡(2πx)\sin(2\pi x) を完全に言い当てても 0.25 を下回れません。d=5d=5 の 0.2947 はその床の近くにいます(第0部の第4章で見た H(p)H(p) と同じ役回りです)。

FIG 1左が当てはめ、右がその次数での学習曲線(横軸=訓練の件数)。次数を上げると左の曲線が点を追いかけ始め、右で2本が離れる。n を右へ動かすと同じ次数のまま2本が近づく——過学習はモデルだけの性質ではない。横の破線 σ はどんなモデルでも下回れない床

図の数字は表と一致しません。 図はその場で自前の標本を引いているので、同じ dd と nn でも値が違います(たとえば d=9, n=20d=9,\ n=20 は、本文の表で 0.4457、図では 47.8 でした)。一致するのは形——訓練は下がり続ける、テストはU字、件数で2本が近づく——のほうです。この食い違い自体が1つの結果でもあります。パラメータ数が件数に近い辺りでは、標本が変わるだけでテスト誤差の桁が変わる。 安定していないものを1回測って比べてはいけない、という合図です。

3. 件数の側 ── 「過学習しやすいモデル」は無い

同じ d=9d = 9 のまま、訓練の件数だけを変えます。

件数 nn 訓練 RMSE テスト RMSE 差
10 0.0000 19246.5 桁違い
20 0.1438 0.4457 0.3019
50 0.2402 0.3462 0.1060
200 0.1939 0.2558 0.0619
1000 0.2464 0.2515 0.0052

モデルは1ミリも変えていません。 それでも n=10n = 10 では壊れ、n=1000n = 1000 では2本が 0.005 差まで寄り、どちらも床の 0.250.25 の近くにいます。

n=10n = 10 の行が極端なのは、パラメータ10個に対してデータが10件だからです。n≤d+1n \le d+1 では連立方程式として点を全部通る解が存在してしまう。通った点では誤差0、点と点の間では何の制約も受けないので暴れます。

「このモデルは過学習しやすい」という言い方は半分しか当たっていません。過学習はモデルと件数の関係で決まります。同じモデルが、件数次第で過学習にも容量不足にもなります。だから手当ての選択肢に「データを増やす」が常に入ります。

4. 症状の見分け方

訓練誤差とテスト誤差の2つを並べると、何をすべきかが決まります(n=20n = 20 での実測)。

訓練 テスト 症状 次の一手
d=1d=1 0.5443 0.5165 両方高い=容量不足 容量を上げる
d=5d=5 0.1540 0.2947 床の近くで揃う=釣り合い ここで止める
d=15d=15 0.1042 67.45 差が大きい=過学習 容量を下げる/件数を増やす/正則化

d=1d=1 の行では差が −0.0278-0.0278 ——テストのほうが低い(0.5165 < 0.5443)。符号が逆になること自体は標本のゆらぎで、別の標本では +0.06+0.06 程度にもなります。要点は符号ではなく、容量不足のときは差が小さいまま両方が高いことです。見るのは「差」ではなく「両方の高さ」で、床(σ\sigma)と比べます。差だけを見ていると、容量不足のモデルを「過学習していないから良い」と読んでしまいます。

5. 手当て

順番に効き目が落ちます。

  1. データを増やす。 第3節の表のとおり、最も確実です。効かないのは容量不足のときだけ。
  2. 容量を下げる。 次数・層・幅を減らす。効きますが、下げすぎると今度は容量不足になります。
  3. 正則化する。 重みの大きさに罰を足して、容量を連続的に絞ります。

J(w)  =  R^(w)  +  λ∥w∥2J(w) \;=\; \hat{R}(w) \;+\; \lambda \lVert w \rVert^2
(3)

d=15d = 15(第2節で壊れていた設定)のまま λ\lambda だけ動かすと、

λ\lambda 訓練 RMSE テスト RMSE
0 0.1042 67.4518
10−610^{-6} 0.1264 3.3946
10−410^{-4} 0.1415 0.7237
10−210^{-2} 0.1574 0.3071
10−110^{-1} 0.2160 0.3914
1 0.3849 0.3999
10 0.6174 0.6140

67.45→0.307167.45 \to 0.3071。 次数を下げずに、ほぼ d=5d=5 の成績(0.2947)まで戻りました。λ\lambda が大きすぎる行(1, 10)では訓練誤差まで上がっていて、これは容量不足の側へ行き過ぎた姿です。

式(3)は確率の言葉でも読めます。第0部の第3章の最尤推定に、重みの事前分布 w∼N(0,τ2I)w \sim \mathcal{N}(0, \tau^2 I) を足して事後確率を最大にすると(MAP推定)

−log⁡p(w∣data)  =  −log⁡p(data∣w)⏟最尤  +  ∥w∥22τ2  +  定数-\log p(w \mid \text{data}) \;=\; \underbrace{-\log p(\text{data} \mid w)}_{\text{最尤}} \;+\; \frac{\lVert w \rVert^2}{2\tau^2} \;+\; \text{定数}
(4)

L2正則化は「重みは0の近くにあるはず」という事前分布そのものでした。λ\lambda と τ\tau は λ=σ2/τ2\lambda = \sigma^2/\tau^2 で対応します(σ\sigma はノイズの大きさ)。信じている度合いが強い=τ\tau が小さいほど λ\lambda は大きい。

  1. 早期終了。 学習の途中で止めます。回数も容量の一種だからです。止める場所は検証データで決めます——その危うさが次節です。
  2. データ拡張・ドロップアウトなど。 第4章以降で扱います。

よくある誤解: 「検証データで選んだのだから、その数字が実力」

データを訓練・検証・テストの3つに分ける作法は広く知られています。ではなぜ2つでは足りないのか。式(2)の下で言ったことがそのまま効きます。選ぶのに使った物差しは、選んだ結果の公平な物差しではありません。

測ります。訓練30件で dd と λ\lambda の90通り(次数15 × λ\lambda 6通り)を当てはめ、検証データで一番良いものを選び、そのモデルを4,000件のテストで測る。これを300回くり返した平均です。

検証の件数 勝者の検証 RMSE 同じモデルのテスト RMSE 楽観の分 楽観だった割合
10 0.2380 0.5787 +0.3407 83.3%
20 0.2541 0.3543 +0.1002 72.3%
100 0.2670 0.2725 +0.0054 60.7%
1000 0.2697 0.2704 +0.0007 56.0%

検証10件のとき、勝者の検証の数字は実力より 0.34 良く見えています。検証件数を増やすと差は消えます。

これがただの偶然でないことは、選ぶのをやめれば差が消えることで確かめられます。同じ検証20件で、候補を選ばず d=5, λ=10−2d=5,\ \lambda=10^{-2} に決め打ちすると、差の平均は +0.0049+0.0049——ほぼ0です(上の表の同じ条件では +0.1002+0.1002)。差を作っているのは分け方ではなく選ぶ行為でした。

候補の数を増やすほど強く出ます(検証20件)。

候補の数 楽観の分
6 +0.0056
30 +0.0178
90 +0.1002

たくさん試すほど、検証の数字は信じられなくなる。 検証データは「選ぶため」に使い切っているので、実力の報告にはもう一つ、一度も選択に使っていないテストデータが要ります。これが3つに分ける理由です。

テストデータを見て方針を変えたら、その瞬間テストは検証に格下げされます。「テストで悪かったのでもう少し層を増やした」を何度かやれば、上の表と同じ楽観がテストにも乗ります。何回見たかが、その数字の信頼度を決めます。

演習

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

演習1. 訓練データが12件、d=11d = 11 の多項式を当てはめます。(a) パラメータは何個ですか。(b) 訓練誤差はどうなりますか。(c) それは良い知らせですか。

答えを見る

(a) 12個(d+1d+1)。

(b) ほぼ0になります。 12個の未知数に対して12本の式なので、12点すべてを通る多項式が(一般の配置なら)ちょうど1つ存在します。本文の表の d=19, n=20d=19,\ n=20 の行が実測で、訓練 RMSE は 0.0000 でした。

(c) 良い知らせではありません。 訓練誤差が0でも、点と点の間は何の制約も受けていません。同じ行のテスト RMSE は 587889.3587889.3 です。訓練誤差0は「よく学んだ」ではなく「測っていない所がある」の合図です。

演習2. 2つのモデルを nn 件で測りました。A=訓練 0.52/テスト 0.54、B=訓練 0.10/テスト 0.45。ノイズは σ=0.25\sigma = 0.25 とします。(a) それぞれの症状は。(b) それぞれに効く手当ては。(c) 「差が小さいほど良いモデル」は正しいですか。

答えを見る

(a) A は容量不足(差は 0.02 と小さいが、両方とも床の 0.25 の倍以上)。B は過学習(差 0.35)。

(b) A は容量を上げる(次数・層・幅)。データを増やしても下がりません——合わせきれていないのはデータ不足ではなく表現力不足だからです。B は件数を増やす/容量を下げる/正則化。

(c) 正しくありません。 A は差 0.02 で B の 0.35 より小さいのに、テストは 0.54 対 0.45 で B のほうが良い。差は過学習の症状であって、良さの指標ではありません。見るのはテスト誤差そのものと、床からの距離です。

演習3. 候補を90通り試し、検証20件で選びました。勝者の検証 RMSE は 0.25 でした。(a) この 0.25 を実力として報告してよいですか。(b) 実力はおおよそどの辺りだと見積もれますか。(c) 検証件数を増やすのと候補を減らすのと、どちらが効きますか。

答えを見る

(a) いけません。 選ぶのに使った数字です。本文の実測では、この条件(候補90・検証20)で平均 +0.1002+0.1002 の楽観が乗っていました。

(b) 0.35 前後。 0.25 に楽観の分 0.10 を足した値です。ただしこれは同じ条件で300回くり返した平均なので、1回の実験に当てはめた見積りでしかありません。確かめたいなら、一度も選択に使っていないテストデータで測ります。

(c) 両方効き、本文の表では検証件数のほうが強く効きました。 検証を10→1000件にすると楽観は +0.3407→+0.0007+0.3407 \to +0.0007。候補を90→6通りにすると +0.1002→+0.0056+0.1002 \to +0.0056。ただし候補を減らすのは探索の幅を捨てることなので、ふつうは検証データを増やす(または交差検証で使い回す)ほうが先です。

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

  • 二重降下(double descent)は扱っていません。 本文の表は dd を上げるとテスト誤差が上がり続ける範囲で止めています。パラメータ数が件数を大きく超えた先で再び下がる現象が報告されていますが、この章の設定(正則化なしの多項式)では見せられません。
  • 汎化の理論的な保証(VC次元・PAC学習・一様収束)には触れていません。この章は実測だけです。
  • 交差検証(データを kk 分割して使い回す)の手順は入れていません。検証データが少ないときの標準的な手当てで、「よくある誤解」の表の上の行に効きます。
  • 深層学習で実際に効いている正則化(バッチ正規化・データ拡張・ドロップアウト・最適化そのものが持つ暗黙の偏り)は第4章以降です。この章の L2 は、仕組みを最小の形で見るために選びました。
  • 本文の数値はすべて実際に計算して確かめています(次数・件数・λ\lambda の3つの表、症状の表、選択の楽観を300回くり返した平均と、選ばない場合の対照、候補数を変えた場合)。推定の方法は全部そろえてあります(xx を [−1,1][-1,1] に写した基底での最小二乗、テスト4,000件、同じ種)。

もっと詳しく

コメント

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