生成AI資格対策(生成AIパスポート+G検定)
正則化と汎化
学習データでは満点なのに、本番で落ちる
学習に使ったデータでの精度が上がり続けているのに、検証用のデータでは途中から精度が下がっていく。この状態が過学習です。モデルが学習データを言い当てることに寄りすぎて、まだ見たことのないデータへの強さ、すなわち汎化性能が損なわれています。機械学習が目指しているのは暗記ではなく、この汎化性能のほうです。
この食い違いは、学習データだけを見ていると気づけません。手元のデータを学習用と検証用に分けておき、両方の誤差の動きを並べて見る、という手順が前提になります。
逆に、モデルが単純すぎて学習データにすら十分合っていない状態を未学習と呼びます。過学習は複雑すぎる問題、未学習は単純すぎる問題であり、対処は正反対になります。過学習が起きやすいのは、データ量に対してパラメータが多すぎるとき、特徴量が多すぎるとき、そして学習を回しすぎたときです。
重みが大きくなることに、罰を与える
正則化は、損失関数に重みの大きさに応じた罰則の項を足すことで、重みが極端に大きくなるのを防ぐ手法です。重みが大きいということは、その特徴量のわずかな違いに予測が激しく反応するということで、それがデータのノイズまで拾う原因になります。罰則を足せば、モデルは精度を上げることと重みを小さく保つことの折り合いをつけながら学習します。
L1正則化は重みの絶対値の合計を罰則に使い、別名をラッソ回帰といいます。最大の特徴は、重みがちょうど0になる特徴量が現れることです。重みが0になった特徴量は予測に一切寄与しないので、不要な特徴量が自動的に切り捨てられます。この性質をスパース性と呼び、特徴量選択の効果があると言われます。この一点がこの分野の最頻出事項です。
L2正則化は重みの二乗の合計を罰則に使い、別名をリッジ回帰といいます。重みを一様に縮めますが、0そのものにはしません。すべての特徴量を少しずつ使う、なめらかなモデルになります。両方を混ぜた Elastic Net もあります。不要な特徴量を削りたいならL1、全体を穏やかにしたいならL2、と使い分けます。
ニューラルネットワークでは、別の手立ても使う
ドロップアウトは、学習の各ステップでノードをランダムに一定割合だけ無効化し、残ったノードだけで学習を進める手法です。毎回違う形のネットワークで学習することになるため、特定のノードに頼りきる状態を防ぎ、多数のモデルを平均したような効果が生まれます。無効化するのは学習時だけで、推論時は全ノードを使います。ここが引っかけどころです。
このほか、検証データの誤差が下がらなくなった時点で学習を打ち切る早期終了、画像であれば回転や反転などを加えて学習データを水増しするデータ拡張、層の間で出力の分布を整えて学習を安定させるバッチ正規化が、それぞれ過学習を抑える手立てとして名前で問われます。データ量そのものを増やすことが過学習への最も素直な対処である以上、データ拡張の効果は大きいと言えます。
試験ではこう問われる
- 「重みの一部がちょうど0になり、特徴量選択の効果がある正則化はどれか」はL1が答えです。L2との入れ替えが最頻出の誤答です
- 「ラッソ」「リッジ」という別名だけを出して、どちらがL1かを問う形も出ます。ラッソがL1、リッジがL2です
- 「ドロップアウトは推論時にもノードを無効化する」は誤りです。学習時だけです
- 「検証誤差が上がり始めたら学習を止める」は早期終了の言い換えで、正則化やドロップアウトと迷わせてきます
- 学習誤差と検証誤差の様子を言葉で示し、過学習か未学習かを判断させる問題が出ます。両方が高いなら未学習、学習側だけ低いなら過学習です
復習ミニクイズ
特徴量が非常に多いモデルで、重要でない特徴量の重みをちょうど0にして実質的な特徴量選択も同時に行いたい場合、適した手法はどれですか。