手元に合わせすぎる ── 過学習
第1章で「規則を書く」ではなく「規則を当てる」を選びました。当てはめる力は強いほど良さそうに見えます。実際、強くするほど手元のデータでの成績は上がり続けます。そして、ある所から手元のデータでしか上がらなくなります。
この落差がこの章の主題です。先に言っておくと、原因はモデルの出来ではありません。下げている量と、本当に下げたい量が別物だということです。
(第1章で「第2章で扱う」と書いた損失の選び方——なぜ交差エントロピーなのか——は、確率の言葉が要るので第0部の第3章に移しました。この章はもう一方、当てはめを強くすると何が起きるかを扱います。)
1. 下げている量と、下げたい量
本当に下げたいのは、まだ見ていないデータでの誤差です。入力と正解の組が分布 から来るとして
これを汎化誤差といいます。式(1)は期待値(第0部の第3章の式(3))で、 が分からない以上そのまま計算できません。
計算できるのは手元の 件での平均だけです。
を固定して見れば、式(2)は式(1)の偏っていない推定です(第0部の第3章の式(5))。問題は、学習が を固定しないことです。 を小さくするように を選んだ瞬間、 はもう の公平な推定ではありません。 選ぶのに使った物差しで選んだ結果を測っている——これが過学習の正体で、この章の「よくある誤解」まで同じ話が続きます。
2. 実測 ── 次数を上げるとどうなるか
( は標準偏差 のノイズ)から20件を取り、 次多項式を最小二乗で当てはめます。テストは同じ分布から4,000件。
| 次数 | パラメータ数 | 訓練 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 は一度も上がりません。 容量を増やせば手元には必ずより良く合わせられるからです。いっぽうテストは で底を打ち、そこから跳ね上がります。 では訓練誤差が厳密に0——20件を20個のパラメータで全部通した——のに、テストは6桁です。
テストの下限は です。 自体にノイズが乗っているので、本当の形 を完全に言い当てても 0.25 を下回れません。 の 0.2947 はその床の近くにいます(第0部の第4章で見た と同じ役回りです)。
図の数字は表と一致しません。 図はその場で自前の標本を引いているので、同じ と でも値が違います(たとえば は、本文の表で 0.4457、図では 47.8 でした)。一致するのは形——訓練は下がり続ける、テストはU字、件数で2本が近づく——のほうです。この食い違い自体が1つの結果でもあります。パラメータ数が件数に近い辺りでは、標本が変わるだけでテスト誤差の桁が変わる。 安定していないものを1回測って比べてはいけない、という合図です。
3. 件数の側 ── 「過学習しやすいモデル」は無い
同じ のまま、訓練の件数だけを変えます。
| 件数 | 訓練 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ミリも変えていません。 それでも では壊れ、 では2本が 0.005 差まで寄り、どちらも床の の近くにいます。
の行が極端なのは、パラメータ10個に対してデータが10件だからです。 では連立方程式として点を全部通る解が存在してしまう。通った点では誤差0、点と点の間では何の制約も受けないので暴れます。
4. 症状の見分け方
訓練誤差とテスト誤差の2つを並べると、何をすべきかが決まります( での実測)。
| 訓練 | テスト | 症状 | 次の一手 | |
|---|---|---|---|---|
| 0.5443 | 0.5165 | 両方高い=容量不足 | 容量を上げる | |
| 0.1540 | 0.2947 | 床の近くで揃う=釣り合い | ここで止める | |
| 0.1042 | 67.45 | 差が大きい=過学習 | 容量を下げる/件数を増やす/正則化 |
の行では差が ——テストのほうが低い(0.5165 < 0.5443)。符号が逆になること自体は標本のゆらぎで、別の標本では 程度にもなります。要点は符号ではなく、容量不足のときは差が小さいまま両方が高いことです。見るのは「差」ではなく「両方の高さ」で、床()と比べます。差だけを見ていると、容量不足のモデルを「過学習していないから良い」と読んでしまいます。
5. 手当て
順番に効き目が落ちます。
- データを増やす。 第3節の表のとおり、最も確実です。効かないのは容量不足のときだけ。
- 容量を下げる。 次数・層・幅を減らす。効きますが、下げすぎると今度は容量不足になります。
- 正則化する。 重みの大きさに罰を足して、容量を連続的に絞ります。
(第2節で壊れていた設定)のまま だけ動かすと、
| 訓練 RMSE | テスト RMSE | |
|---|---|---|
| 0 | 0.1042 | 67.4518 |
| 0.1264 | 3.3946 | |
| 0.1415 | 0.7237 | |
| 0.1574 | 0.3071 | |
| 0.2160 | 0.3914 | |
| 1 | 0.3849 | 0.3999 |
| 10 | 0.6174 | 0.6140 |
。 次数を下げずに、ほぼ の成績(0.2947)まで戻りました。 が大きすぎる行(1, 10)では訓練誤差まで上がっていて、これは容量不足の側へ行き過ぎた姿です。
式(3)は確率の言葉でも読めます。第0部の第3章の最尤推定に、重みの事前分布 を足して事後確率を最大にすると(MAP推定)
L2正則化は「重みは0の近くにあるはず」という事前分布そのものでした。 と は で対応します( はノイズの大きさ)。信じている度合いが強い= が小さいほど は大きい。
- 早期終了。 学習の途中で止めます。回数も容量の一種だからです。止める場所は検証データで決めます——その危うさが次節です。
- データ拡張・ドロップアウトなど。 第4章以降で扱います。
よくある誤解: 「検証データで選んだのだから、その数字が実力」
データを訓練・検証・テストの3つに分ける作法は広く知られています。ではなぜ2つでは足りないのか。式(2)の下で言ったことがそのまま効きます。選ぶのに使った物差しは、選んだ結果の公平な物差しではありません。
測ります。訓練30件で と の90通り(次数15 × 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件で、候補を選ばず に決め打ちすると、差の平均は ——ほぼ0です(上の表の同じ条件では )。差を作っているのは分け方ではなく選ぶ行為でした。
候補の数を増やすほど強く出ます(検証20件)。
| 候補の数 | 楽観の分 |
|---|---|
| 6 | +0.0056 |
| 30 | +0.0178 |
| 90 | +0.1002 |
たくさん試すほど、検証の数字は信じられなくなる。 検証データは「選ぶため」に使い切っているので、実力の報告にはもう一つ、一度も選択に使っていないテストデータが要ります。これが3つに分ける理由です。
演習
答えは閉じてあります。手を動かしてから開いてください。
演習1. 訓練データが12件、 の多項式を当てはめます。(a) パラメータは何個ですか。(b) 訓練誤差はどうなりますか。(c) それは良い知らせですか。
答えを見る
(a) 12個()。
(b) ほぼ0になります。 12個の未知数に対して12本の式なので、12点すべてを通る多項式が(一般の配置なら)ちょうど1つ存在します。本文の表の の行が実測で、訓練 RMSE は 0.0000 でした。
(c) 良い知らせではありません。 訓練誤差が0でも、点と点の間は何の制約も受けていません。同じ行のテスト RMSE は です。訓練誤差0は「よく学んだ」ではなく「測っていない所がある」の合図です。
演習2. 2つのモデルを 件で測りました。A=訓練 0.52/テスト 0.54、B=訓練 0.10/テスト 0.45。ノイズは とします。(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)で平均 の楽観が乗っていました。
(b) 0.35 前後。 0.25 に楽観の分 0.10 を足した値です。ただしこれは同じ条件で300回くり返した平均なので、1回の実験に当てはめた見積りでしかありません。確かめたいなら、一度も選択に使っていないテストデータで測ります。
(c) 両方効き、本文の表では検証件数のほうが強く効きました。 検証を10→1000件にすると楽観は 。候補を90→6通りにすると 。ただし候補を減らすのは探索の幅を捨てることなので、ふつうは検証データを増やす(または交差検証で使い回す)ほうが先です。
この章で言っていないこと
- 二重降下(double descent)は扱っていません。 本文の表は を上げるとテスト誤差が上がり続ける範囲で止めています。パラメータ数が件数を大きく超えた先で再び下がる現象が報告されていますが、この章の設定(正則化なしの多項式)では見せられません。
- 汎化の理論的な保証(VC次元・PAC学習・一様収束)には触れていません。この章は実測だけです。
- 交差検証(データを 分割して使い回す)の手順は入れていません。検証データが少ないときの標準的な手当てで、「よくある誤解」の表の上の行に効きます。
- 深層学習で実際に効いている正則化(バッチ正規化・データ拡張・ドロップアウト・最適化そのものが持つ暗黙の偏り)は第4章以降です。この章の L2 は、仕組みを最小の形で見るために選びました。
- 本文の数値はすべて実際に計算して確かめています(次数・件数・ の3つの表、症状の表、選択の楽観を300回くり返した平均と、選ばない場合の対照、候補数を変えた場合)。推定の方法は全部そろえてあります( を に写した基底での最小二乗、テスト4,000件、同じ種)。
コメント
コメントにはログインが必要です