はじめに
正規化と正則化は,機械学習の中で戸惑いそうなキーワードの一つではないでしょうか?
私自身,軽く「似たようなものでしょ?」って思ってた時に調べて「違うじゃん!」ってなった要素を備忘も兼ねてメモしておこうと思います.
正規化
英語ではNormalizationになる.似た言葉はScalingがある.通常,機械学習で使用する仮説関数$h_\Theta(x)$のパラメータ$\Theta$は複数ある.そして,学習データの情報もたくさんある.その中でも,スケールが異なるものがものが少なくない.
たとえば,機械学習で物件の価格を予測しようとしたら,土地の面積や部屋数,階数,駅からの距離などが特徴量(Feature)となるだろう.これらはすべて単位が異なり,取りうる値も異なる.
集めてきたデータをそのまま学習させようとすると,収束速度が遅く,なかなか最小値に近づいてくれない.これは,土地の面積が0~200平米,部屋数が0~5部屋としていたら,この2つから取りうる範囲というのが横長(縦長)になる.これを避けて,比較的同じ範囲を取れるような加工をする.つまり,土地の面積,部屋数を$0 \le x \le 1$になるようにする.この処理を正規化という.
正規化の方法の1つにMean Normalizationというのがある.これは,
x := \frac{x - average}{max-min}
という計算をする.
また数値の範囲は,$0 \le x \le 1$ が理想ではあるが,$-3 \le x \le 3$や$-1 \le x \le 3$ などでも安定してパラメータ$\Theta$の最適化ができるらしい.
正則化
英語ではRegularizationになる.
正則化という言葉の由来は,線形代数の正則行列(Regular Matrix)らしい.
機械学習に置ける正則化とは,過学習(Over-fitting)の回避が目的となっている.
回帰モデルのコスト関数$J(\Theta)$は以下のようになる.
J(\Theta) = \frac{1}{2m}\sum_{i=1}^{m}\|h_\theta(x^{(i)})-y^{(i)}\|^2
これは,単純に各学習データの計算結果と期待値の誤差の二乗の平均値である.
この式に,正則化を加えると,
J(\Theta) = \frac{1}{2m}\sum_{i=1}^{m}\|h_\theta(x^{(i)})-y^{(i)}\|^2 + \lambda\sum_{j=1}^{n}(\theta_j)^2
というようにパラメータ$\Theta$の二乗和を追加するのである.この項を正則化項と呼ぶ.こういうことをすると,$\Theta$の値がどれかに偏ったりすることを防ぎ,満遍なく$\Theta$に値があるように抑制させておくことが出来る.これが過学習を防ぐ働きにになる.
上式では,二乗和にしていたがそれ以外に絶対値を取る方法もある.
これ以外にも,正則化項は存在し,
\begin{align}
Lasso\ Regularization &: \sum_{j=1}^{n}|\theta_j| \\
Ridge\ Regularization &: \sum_{j=1}^{n}\theta_j^2 \\
\end{align}
LassoはLeast absolute shrinkage and selection operator の略で,L1正則化と言う.RidgeはL2正則化という.さらに,L0正則化は$max(\theta_j)$となり,LassoとRidgeの合わせ技などある.
まとめ
機械学習では様々なデータから学習をするため,データ間で値域のばらつきがあることによる学習速度の低下が起こりえる.これを回避するために,Mean Normalizationなどの正規化を行うことで改善が見込めるようになる.
また学習しすぎて,汎化能力がなくなる,ロバスト性に欠けるという状態を起こす過学習(Over-fitting)については正則化項の導入により,避けることが出来,汎化能力を維持することができる.