はじめに
機械学習を勉強していると、「正規化」 と 「正則化」 という似た名前の言葉が出てきます。
自分も最初に見たとき、
- 名前が似すぎていて違いがわからない
- そもそも何をしているのかわからない
- 正規化はまだわかるけど、正則化になると急に難しく感じる
という状態でした。
そこで今回は、G検定で混乱しやすい「正規化」と「正則化」の違いを、図解つきでできるだけわかりやすく整理してみます。
3行で結論
- 正規化:データの大きさを揃える話
- 正則化:モデルが複雑になりすぎるのを防ぐ話
- 名前は似ているけど、対象も目的もまったく違う
まずは全体像
| 項目 | 正規化 (Normalization) | 正則化 (Regularization) |
|---|---|---|
| 対象 | データ(入力値) | モデル(重み) |
| タイミング | 学習の前 | 学習の最中 |
| 目的 | 数値のスケールを揃える | 過学習を防ぐ |
| ざっくり言うと | データを整える | モデルを整える |
図で見るとこういう違い
ポイントはこうです。
- 正規化は、学習前のデータ前処理
- 正則化は、学習中のモデル制御
1. 正規化(Normalization)とは?
正規化とは、「データを使いやすいスケールに揃えること」 です。
なぜ必要なのか?
例えば、次の2つの特徴量があるとします。
- 身長:1.7 m
- 年収:5,000,000 円
このまま学習させると、AIは年収のような数字の大きい項目を重要だと勘違いしやすくなります。
本当は、
- 身長も大事かもしれない
- 年収も大事かもしれない
のに、桁数の差だけで不公平になってしまいます。
正規化のイメージ図
つまり、項目ごとに別々に 0〜1 に変換するということです。
ここでの疑問
これは、身長の最小値を0・最大値を1にして、年収も別で最小値を0・最大値を1にするということ?
はい、その通りです。
特徴量ごとに、それぞれ別々にスケールを揃えます。
数式で表すと
あるデータ $x$ を正規化した値 $x_{norm}$ は、次の式で表されます。
$$
x_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}}
$$
意味としては、
- 最小値 → 0
- 最大値 → 1
- その間を比率で割り当てる
ということです。
具体例
3人のデータを考えます。
変換前の生データ
- Aさん:身長 1.5m / 年収 300万円
- Bさん:身長 1.7m / 年収 500万円
- Cさん:身長 1.9m / 年収 800万円
項目ごとに正規化
- 身長:1.5 を 0、1.9 を 1
- 年収:300 を 0、800 を 1
変換後
- Aさん:身長 0.0 / 年収 0.0
- Bさん:身長 0.5 / 年収 0.4
- Cさん:身長 1.0 / 年収 1.0
※ Bさんの年収は以下の計算です。
$$
\frac{500 - 300}{800 - 300} = 0.4
$$
それって身長と年収を直接比較するってこと?
これは、Aさんの身長とBさんの年収を直接比べるという意味ではありません。
そうではなく、
AIが各項目をどれくらい重視するかを、公平に判断できるようになる
という意味です。
モデル内部のイメージ
AIは内部で、ざっくり次のような計算をしています。
$$
\text{予測結果} = (w_1 \times \text{身長}) + (w_2 \times \text{年収}) + \dots
$$
ここで、
- $w_1$:身長の重み
- $w_2$:年収の重み
です。
正規化しない場合の問題
このように、年収の値が大きすぎると、AIは年収ばかりを重視しやすくなります。
正規化すると
こうすることで、数字の桁ではなく、
本当に予測に効いているかで判断しやすくなります。
正規化の注意点
外れ値に弱い
もし1人だけ年収1億円の人が混ざっていると、
他の人たちの年収がかなり小さい値に押し込まれてしまいます。
つまり、外れ値があると使いづらくなることがあるという点に注意が必要です。
標準化との違い
似た言葉に 標準化(Standardization) があります。
- 正規化:最小値を0、最大値を1にすることが多い
- 標準化:平均を0、標準偏差を1にする
外れ値がある場合などは、標準化がよく使われることもあります。
2. 正則化(Regularization)とは?
正則化とは、「モデルの複雑さにペナルティを与えて、過学習を防ぐこと」 です。
過学習とは?
過学習とは、学習データに合わせすぎてしまい、未知のデータに弱くなる状態です。
たとえるなら、
- 練習問題だけを丸暗記して
- 本番で少し形が変わると解けない
という状態に近いです。
正則化のイメージ図
正則化でいう「複雑さ」とは何か?
正則化が抑えたいのは、モデルの「複雑さ」 です。
ここでいう複雑さとは、
学習データに合わせすぎて、モデルが必要以上に細かく反応してしまう状態のことです。
イメージでいうとこういうこと
例えば、本来は「だいたい右肩上がり」の傾向を学習したいのに、学習データの細かいバラつきまで全部拾おうとすると、モデルはグニャグニャした形になってしまいます。
グラフのイメージ
シンプルなモデル(汎化しやすい)
*
*
*
*
*________________
複雑すぎるモデル(過学習しやすい)
* *
* * *
* **
* *
*________________
シンプルなモデルは、データ全体の傾向をうまく捉えています。
一方で、複雑すぎるモデルは、たまたま混ざっているノイズやバラつきまで無理やり覚えてしまう状態です。
「数式で見ると何が起きているのか?
この「複雑さ」は、数学的には 重み(係数) が極端に大きくなることとして現れやすいです。
例えば:
-
シンプルな式
$$
y = 0.5x + 2
$$ -
複雑になりすぎたモデルのイメージ
$$
y = 100x^3 - 500x^2 + 10x + \dots
$$
後者のように、係数が大きくて式が複雑になると、少し入力が変わっただけでも予測結果が大きく揺れやすくなります。
つまり、「複雑さ」=「データに合わせすぎて敏感になりすぎた状態」 と考えるとわかりやすいです。
正則化は何をしているのか?
そこで正則化は、こうした複雑さにペナルティを与えます。
「そんなに細かいところまで合わせなくていいから、
もっとシンプルで安定したモデルにしてね」
という制約を加えるイメージです。
その結果、
- 過学習しにくくなる
- 未知のデータにも対応しやすくなる
という効果が期待できます。
代表的な正則化
L2正則化(リッジ回帰)
- 重みの2乗にペナルティをかける
- 重み全体をまんべんなく小さくする
イメージ
L1正則化(ラッソ回帰)
- 重みの絶対値にペナルティをかける
- 不要な特徴量の重みを 0 にしやすい
イメージ
「重み」は誰が決めるのか?
ここも混乱しやすいポイントです。
結論から言うと、
重み($w$)は人間が手動で決めるのではなく、モデルが学習の中で自動的に決めます。
重みが決まる流れ
この流れを何度も繰り返して、よりよい重みを見つけていきます。
人間が決めるのは何か?
人間が決めるのは、重みそのものではなく、学習のルールです。
これを ハイパーパラメータ といいます。
例えば正則化では、
- L1にするかL2にするか
- $\lambda$ をどれくらいにするか
を人間が決めます。
まとめ
| 項目 | 正規化 (Normalization) | 正則化 (Regularization) |
|---|---|---|
| 対象 | データ | モデル |
| タイミング | 学習前 | 学習中 |
| 目的 | スケールを揃える | 過学習を防ぐ |
| 代表的な話題 | 0〜1への変換、標準化との違い | L1正則化、L2正則化、重みの制御 |
- AIが学習で更新するもの → 重み(パラメータ)
- 人間が事前に設定するもの → ハイパーパラメータ
覚え方
- 正規化:定規を揃える
- 正則化:モデルの暴走を抑える
この2つでかなり整理しやすくなると思います。
おわりに
自分は最初、
「正規化」と「正則化」は名前が似ていてとにかく紛らわしい
と感じていました。
でも、
- 正規化はデータの話
- 正則化はモデルの話
と切り分けると、一気に整理しやすくなりました。
同じように混乱している方の参考になれば嬉しいです。
関連して次に押さえたい用語
- 標準化
- 損失関数
- 勾配降下法
- 過学習
- ハイパーパラメータ