「経験が浅いうちほど、ルールに頼った方がいい」を過学習の実験で確かめてみた
新卒で入った現場でよくある話だと思う。まだ2〜3件しか経験していないのに、そこから「このやり方が正しい」というルールを勝手に抽出して、次にもそのまま当てはめてしまう。これって機械学習の過学習と正則化の関係に近いのでは、と思い、実際にPythonで検証してみた。
次数を上げると、訓練誤差だけが下がり続ける
15点だけの訓練データに、次数の違う多項式をフィットさせてみる。

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

訓練誤差はきれいに下がり続けるのに、テスト誤差は次数3を底に、そこから桁が飛ぶように爆発していく。「手元の経験への当てはまりの良さ」と「次の現場で通用するか」は、まったく別の曲線を描く。
外部のルール(正則化)で縛ると何が起きるか
次数14のまま、Ridge回帰の正則化(係数を大きくしすぎない、という外部制約)をかけていくと、テスト誤差は500から0.287まで改善した。モデルの複雑さはそのままでも、「暴れるな」という制約だけで汎化性能が取り戻せる。

ただし正則化の強さと誤差の関係は、教科書で見るようなきれいなU字ではなく、小さな谷と山が混ざった非単調な曲線だった。「ちょうどいい縛りの強さ」は思ったより繊細だ。
経験が増えるほど、必要なルールは減っていく
一番面白かったのはここ。訓練データの数を10点から増やしながら、テスト誤差を最小にする正則化の強さを測ってみた。

データが10〜15点しかないうちは、最適な正則化は探索範囲の上限に張り付くほど強い。それがn=25で急落し、n=50を超えるとほぼ不要になる。経験が少ないうちは外部のルールに頼った方がよく、経験が増えるほどその制約は緩めていい、という関係が数値としてはっきり出た。
次数を1から14まで動かしたときにフィット曲線が壊れていくアニメーションや、次数×正則化の2次元ヒートマップなど、全ての実験結果はブログにまとめています。
▼全文はこちら
(ブログ記事URL: https://shake-blog.shakeworks.workers.dev/blog/overfitting-regularization-life-lesson/ )
