見出し画像

「経験が浅いうちほど、ルールに頼った方がいい」を過学習の実験で確かめてみた

新卒で入った現場でよくある話だと思う。まだ2〜3件しか経験していないのに、そこから「このやり方が正しい」というルールを勝手に抽出して、次にもそのまま当てはめてしまう。これって機械学習の過学習正則化の関係に近いのでは、と思い、実際にPythonで検証してみた。

次数を上げると、訓練誤差だけが下がり続ける

15点だけの訓練データに、次数の違う多項式をフィットさせてみる。

同じ15点のデータに対する次数1(過小適合)・4(ちょうど良い)・14(過学習)のフィットを並べた3枚のグラフ。

次数14のモデルは15点の訓練データをほぼ完璧になぞる。でもそれは「たまたま見た15点」への最適化でしかなく、点と点の間では曲線が暴れ回っている。

次数を上げるほど訓練誤差(青)は下がり続けるが、テスト誤差(橙)は次数3を底にしたU字を描いたあと、次数5あたりから指数関数的に爆発していく折れ線グラフ

訓練誤差はきれいに下がり続けるのに、テスト誤差は次数3を底に、そこから桁が飛ぶように爆発していく。「手元の経験への当てはまりの良さ」と「次の現場で通用するか」は、まったく別の曲線を描く。

外部のルール(正則化)で縛ると何が起きるか

次数14のまま、Ridge回帰の正則化(係数を大きくしすぎない、という外部制約)をかけていくと、テスト誤差は500から0.287まで改善した。モデルの複雑さはそのままでも、「暴れるな」という制約だけで汎化性能が取り戻せる。

正則化の強さalphaに対する訓練誤差(青)とテスト誤差(橙)。テスト誤差はalpha≈8.4で最小になるが、単調なU字ではなく途中に小さな谷と山が混ざっている

ただし正則化の強さと誤差の関係は、教科書で見るようなきれいなU字ではなく、小さな谷と山が混ざった非単調な曲線だった。「ちょうどいい縛りの強さ」は思ったより繊細だ。

経験が増えるほど、必要なルールは減っていく

一番面白かったのはここ。訓練データの数を10点から増やしながら、テスト誤差を最小にする正則化の強さを測ってみた。

訓練データ数に対する最良の正則化強さの折れ線グラフ。n=10,15では探索上限の1000に張り付き、n=25で急落、n=50以降はほぼ横ばい

データが10〜15点しかないうちは、最適な正則化は探索範囲の上限に張り付くほど強い。それがn=25で急落し、n=50を超えるとほぼ不要になる。経験が少ないうちは外部のルールに頼った方がよく、経験が増えるほどその制約は緩めていい、という関係が数値としてはっきり出た。

次数を1から14まで動かしたときにフィット曲線が壊れていくアニメーションや、次数×正則化の2次元ヒートマップなど、全ての実験結果はブログにまとめています。

▼全文はこちら
(ブログ記事URL: https://shake-blog.shakeworks.workers.dev/blog/overfitting-regularization-life-lesson/ )

いいなと思ったら応援しよう!