みんなのAI
機械学習プレイグラウンド
読み込み中…

学ぶ

Ch.05

過学習防止と正則化

過去問を丸暗記して100点でも、数字を少し変えた別の用紙では0点になる学生を想像してください。AIも同じ過学習(overfitting)の罠に陥ります。trainでは完璧でも、見ないval/testでは性能が急落します。
前の章で最適化・学習を学んだなら、本章ではモデルが柔軟に汎化(generalization)できるよう助ける技法を学びます。L2正則化、Dropout、Early stopping、データ拡張を概念から実践まで段階的に扱います。
※注意: 他章のBatch Normalization(データのスケール調整)と本章のRegularization(過学習防止)は訳が同じ「正則化」でも役割は全く違います!
下の2×2図は四つの正則化が適用前→適用後にどう変えるか示します。
適用前適用後gap↑停止epochlossTrain / Val & Early Stop
適用前適用後train: p≈0.5 · scale 1/(1-p)inference: all onDropout
適用前適用後‖w‖ largeλ penalty ↓L2 Weight Decay
適用前適用後few pts → zigzagaug → smoothData Augmentation
各パネルは適用前(左)→適用後(右)。Train/Valはval上昇でearly stop、Dropoutは学習時off・推論時全活性、L2は重み縮小、拡張は境界を滑らかに。

暗記ではなく汎化 — 曲線・重み・ニューロン・データ

過学習を止め・抑え・多様に

過学習防止と正則化:暗記ではなく理解させる

1. 過学習とは?(練習問題は満点、本番は赤点)
概念: モデルがtrainのパターンだけでなく不要なノイズや細部まで丸暗記する現象です。新しいデータでは柔軟に対応できず性能が急落します。
直感的な比喩: 運転免許の技能試験で「2本目の木で右に曲がる」だけ暗記した人は、本番の道路では事故を起こします。原理ではなく状況を覚えたからです。
実践のコツ: train lossは下がるのにval lossが上がり始めたら過学習の兆候です。この差を汎化ギャップと呼び、縮めるのが本章の目標です。
2. L2正則化 / Weight decay — 重い荷物に罰金
概念: 重みが大きすぎると小さなノイズにも過敏になり過学習します。損失に重みの大きさに比例する罰則を足します。
核心式: Loss+λ2∥w∥2Loss + \frac{\lambda}{2}\|w\|^2Loss+2λ​∥w∥2
式の説明: 通常の誤差(Loss)の後に重み(www)の大きさ分の罰を足します。λ\lambdaλは罰金の強さ — 大きいほど重みを小さく保とうとします。
直感的な比喩: 航空機の手荷物重量制限 — 重いほど追加料金(罰)がかかり、必要最小限だけ持ちます。
実践のコツ: λ\lambdaλが大きすぎると過少適合に。valを見ながら少しずつ調整。
3. Dropout — ランダムにメンバーを外して練習
概念: 学習のたびに各ニューロンを確率 ppp で一時オフにします。特定ニューロンへの過依存を防ぎ、全体で特徴を学ばせます。
直感的な比喩: サッカー代表でエースをランダムに休ませ、チーム全体で得点できるように訓練するイメージです。
実践のコツ: pppは0.20.20.2〜0.50.50.5が多い。学習時は残り出力を1/(1−p)1/(1-p)1/(1−p)でスケール。推論時は全ニューロン100%使用 — オフにしないでください。
4. Early stopping & データ拡張 — 適度に止め、多様に見る
概念と比喩:
- Early stopping: レシピが30分でも焦げ臭ければオーブンを止めるように、valが改善しなければ学習を止め最良のモデルを保存します。
- データ拡張: 猫の写真を反転・回転・切り抜いても猫のまま。変形で学習量を増やす技法です。数学で数字だけ変えて練習するのと同じです。
実践のコツ: データが少ないときは拡張で多様性を増やすのが最優先。valをtrainに混ぜないでください。

正則化早見表

過学習ギャップ — trainは良いがval/testが悪いとき疑う。
やさしい説明: 練習(train)では満点なのに初見問題(val)で急に崩れる — 暗記のサイン。train loss↓・val loss↑なら特に過学習を疑います。
核心指標: train loss↓, val loss↑
記号 — 汎化ギャップ=trainとvalの性能差。大きい→暗記、小さくvalも良い→汎化良好。
数値例: train 99%, val 60% → 39%pギャップ。
比喩: 試験場の公式だけ暗記 — 同じコースは満点、新しい道路は赤点。
L2 / Weight decay — 大きい重みに罰。
やさしい説明: 重い「荷物」(重み)はノイズに過敏。損失に重いほど罰金を足し、軽いモデルに導きます。
核心式: L=Ldata+λ2∑iwi2L = L_{\text{data}} + \frac{\lambda}{2}\sum_i w_i^2L=Ldata​+2λ​∑i​wi2​
式の説明 — LdataL_{\text{data}}Ldata​は本来の誤差。λ\lambdaλは罰の強さ。wi2w_i^2wi2​は重みの二乗 — 大きい重みほど罰↑。
数値例: λ=2\lambda=2λ=2, w1=3w_1=3w1​=3, w2=4w_2=4w2​=4 → L2項=25。
比喩: 手荷物超過料金。
Dropout — 学習時にニューロンをランダムoff。
やさしい説明: 毎回違う選手を休ませ、一人(ニューロン)に頼らない。推論時は全員出場 — 学習時のようにoffにしない。
核心: 学習時 pppでoff · スケール 1/(1−p)1/(1-p)1/(1−p) · 推論時マスクなし
式の説明 — pppはoff率(0.2〜0.5)。1/(1−p)1/(1-p)1/(1−p)は残りを拡大して平均を合わせる補正。
数値例: p=0.5p=0.5p=0.5 → スケール2。
比喩: エースを休ませても得点できる代表チーム訓練。
Early stopping — valが改善しなければ停止。
やさしい説明: クッキーが焦げる前にオーブンを止めるように、val最良時点のモデルを保存。epochを無理に埋めない。
核心: 最良valでチェックポイント保存 · patience epoch改善なしで停止
式の説明 — patienceは「あとN回は様子を見る」 — 一時的悪化で早止めしない。
数値例: val最小がepoch 12 → その近くの重みをデプロイ。
比喩: ベストタイムだけ残してマラソンを止める。

なぜ重要か

1. 「井の中の蛙」モデルを見抜く
train 99%でもval/test 60%なら実務では無用です。本当の実力は汎化にあり、本章の技法はそれを高めます。
2. オッカムの剃刀:単純ほど安定
L2とDropoutは不要に複雑な規則を作らせません。正則化された単純なモデルは予測が安定し信頼しやすいです。
3. 実務AIの必須安全ベルト
train/val分割、early stopping、weight decayは選択ではなく必須。これなしで学習するのはブレーキなしの運転と同じです。

どう使うか

① 診断:過学習か?
実務でよくあるのは、trainでは精度が高くlossも下がるのに、valだけ成績が悪い場面です。練習問題は満点なのに模試で崩れる学生のような状態です。いきなりモデルを大きくしたりepochを増やす前に、過学習かどうかを先に確認します。
trainとvalのlossを同じグラフに描きます。trainは下がり続けるのにvalだけある時点から上がり始めたら、そこが汎化ギャップが開き始めた瞬間です。L2やDropoutで複雑さを抑え、early stoppingでvalが悪化する前に学習を止める設定を入れましょう。
② L2・Dropoutの調整
正則化を入れたら強さの調整が次の課題です。L2の罰金(λ\lambdaλ)は0.00010.00010.0001のように小さく始め、valを見ながら少しずつ上げます。最初から強すぎると過少適合になり、必要なパターンを学ぶ前に萎縮します。
Dropoutは学習時に20〜50%程度のニューロンをoffにして試します。推論・評価時は必ずoffにし、全ニューロンを使います。学習時と推論時で挙動が違うことを覚えておくと、よくあるミスを防げます。
③ 賢いEarly stopping
Early stoppingはvalが学習の終わりを決める仕組みです。毎epoch val lossを記録し、これまで最良だった時点の重みを保存します。valが改善しなければ学習を止め、最後のepochではなく最良valのモデルを使います。
patience(5〜20が多い)は「valが一時的に悪くても、すぐ止めずあと数epoch様子を見る」という意味です。曲線はぶらつくので、早すぎる停止を防ぎます。
④ データが王様
L2・Dropout・Early stoppingは有効ですが、過学習を最も確実に減らすのは良いデータを増やすことです。データが多様で十分なら、ノイズまで暗記する余地が減ります。
すぐにデータを増やせないなら、回転・切り抜き・反転などのデータ拡張で少し違うサンプルを作り、学習量を増やしましょう。同じ猫をいろんな角度から見たように、より広く汎化させます。実務では、派手な構造変更の前にデータ増量・多様化を先に検討する方が効くことが多いです。

まとめ

本章の要点は、モデルがtrainデータを丸暗記しないようにし、新しいデータにも対応できる汎化を高めることです。そのためにL2正則化、Dropout、early stopping、データ拡張の四つを学びました。
過学習が疑われるときは、まずtrainとvalの性能差を見ます。L2は重みが大きくなりすぎないよう罰を与え、Dropoutは学習時だけニューロンをランダムにoffにして特定経路への依存を減らします。推論時は全ニューロンをonにして評価します。Early stoppingはvalが改善しなくなったら学習を止め、最良だった時点のモデルを残します。
実務では、構造やハイパーパラメータを変える前にデータを増やす・拡張することを優先しましょう。λ\lambdaλ、dropout率、patienceなどは一度に一つだけ変え、valがどう動くか観察すると、何が効いたかはっきり分かります。

問題を解くための説明

本章の問題は過学習診断と正則化手法の選択の二本柱で整理すると解きやすくなります。過学習が疑われるときは、まず train と val(または test)の性能差を見ます。train の精度・損失は良いのに val だけ悪いなら、train データを丸暗記している可能性が高いです。このときはモデルを大きくするより、L2/weight decay、Dropout、early stopping、データ拡張を先に検討します。
train・val 両方悪い場合は過少適合です。モデルが小さすぎる、学習不足、正則化が強すぎることが多いです。モデルを大きくし、epoch を増やし、学習率を調整し、λ\lambdaλ や dropout 率を下げる方向を考えましょう。
L2 正則化・weight decayは損失に λ2∥w∥2\frac{\lambda}{2}\|w\|^22λ​∥w∥2 の罰を足し、重みの肥大化を防ぎます。Dropoutは学習時に一部ニューロンをランダムに off にし、特定経路への依存(co-adaptation)を減らします。ただし Dropout は学習時のみで、推論・評価時は全ニューロンを使います。Early stoppingは val が patience epoch 改善しなければ学習を止め、最良 val の重みを保存します。データ拡張は学習サンプルの多様性を増やし暗記を緩和します。
バッチ正規化(Batch Normalization) と過学習防止の正則化(L2・Dropout など) は混同しないでください。バッチ正規化は層ごとに活性化の平均・分散を整え学習を安定化し、L2・Dropout は過学習と大きな重みを抑える目的が異なります。設問に train–val ギャップ、patience、weight decay、dropout ppp、推論時などのキーワードがあれば本章の手がかりです。
定義問題では、指標の組み合わせが何を意味するかを先に考えます。「過学習で最も一般的なパターンは?」なら
① 両方悪い→過少適合、
③ 両方完璧→非現実的。② train 良・val/test 悪が典型なので答え2です。
「early stopping の最も適切な基準は?」→ train loss のみ(①)では暗記が続き、epoch 無限(③)は早期終了の目的に合いません。val loss や val 指標が改善しなくなったとき(②)が正しいので答え2です。
「過学習を診断するとき最初に見るべきものは?」→ GPU 使用率(①)や epoch 数(③)だけでは不十分。train–validation の性能差(②)が最も直接的です。→ 答え2

応用問題では数値と状況を先に読みます。「train 精度 99%, val 55%」なら過学習がほぼ確実です。モデルを大きくする(①)と val set 削除(③)は避け、正則化・early stopping・データ拡張(②)を先に試すのが妥当です。→ 答え2
「train loss は↓し続けるが val loss が epoch 20 から↑」→ early stopping で最良 val を保存(①)が適切です。学習率 10 倍(②)や dropout off で更に学習(③)は val 悪化を招きやすいです。→ 答え1
「L2 と dropout を入れても val が悪い」→ λ\lambdaλ を 100 倍にするより、データ拡張と patience 付き early stopping(①)が次の自然な一手です。→ 答え1

計算問題は式に数値を順に代入します。λ2(w12+w22)\frac{\lambda}{2}(w_1^2+w_2^2)2λ​(w12​+w22​) に λ=2\lambda=2λ=2, w1=3w_1=3w1​=3, w2=4w_2=4w2​=4 を入れると 22(9+16)=25\frac{2}{2}(9+16)=2522​(9+16)=25 です。→ 答え
②
真偽問題 — 「Dropout は推論時も同じ比率でニューロンを off にする」はよくある誤解です。Dropout のランダムマスクは学習時のみで、推論時は全ニューロンで評価します。→ 誤(0)
「Weight decay と L2 正則化は密接に関連する」→ 重み抑制が目的なので正(1) です。
「λ\lambdaλ を無条件に大きくすれば常に test 性能が良くなる」→ 大きすぎると過少適合になるので誤(0) です。

選択問題 — 「L2 が損失に足す項の形は?」→ Ldata+λ2∥w∥2L_{\text{data}}+\frac{\lambda}{2}\|w\|^2Ldata​+2λ​∥w∥2 の
①が標準形です。→ 答え1
「L2 と weight decay の関係は?」→ 実務ではほぼ同じ目的(重み抑制)なので L2 ≈ weight decay、答え2 です。

概念問題 — dropout p=0.5p=0.5p=0.5 のとき学習スケールは 1/(1−p)=21/(1-p)=21/(1−p)=2 です。→ 答え2
「patience=5」は val が 5 epoch 連続で改善しなければ学習中断を検討する意味で、モデルを即削除するわけではありません。→ 答え2
「バッチ正規化 vs 過学習防止正則化(L2・Dropout)」→ 後者は過学習・重み抑制、バッチ正規化は活性化スケールの正規化で目的が異なります。同一(①)や無関(③)は誤りです。→ 答え2
「weight decay の直接的効果は?」→ 重みの大きさを抑制(①)が本質です。

計算問題 — p=0.2p=0.2p=0.2 のときスケール 1/(1−0.2)=1.251/(1-0.2)=1.251/(1−0.2)=1.25。出力 100 なら 100×1.25=125100\times1.25=125100×1.25=125。→ 答え
②
λ=2\lambda=2λ=2, w1=1w_1=1w1​=1, w2=2w_2=2w2​=2 のとき λ2(w12+w22)=22(1+4)=5\frac{\lambda}{2}(w_1^2+w_2^2)=\frac{2}{2}(1+4)=52λ​(w12​+w22​)=22​(1+4)=5。→ 答え
②