この記事何?
正則化について自分なりにまとめる。
はじめに
機械学習をかじったことがある人なら、正則化(regularization)という言葉について「聞いたことがある!」という人は多いだろう。ただ、この概念、個人的にあんまりピンとこないなという思いを持っていた。
なんか知らんけどとりあえず入れとくと上手いこと仕事してくれる便利なやつ、そんな感覚を持っていた。
そんな折、下記の本を読んだ。(厳密には読んでいる最中)
カーネル多変量解析―非線形データ解析の新しい展開 (シリーズ確率と情報の科学)
この本の中に、タイトルの「正則化: 鋭すぎる刃物を鈍らせて使う」という章がある。この章名をみた時、目から鱗が落ちるとでも表現すべき体験をした。
そんな自分の体験を新鮮なうちに少しメモしておきたい。(いや、ここ読んだの数ヶ月前なんですが...新鮮とは一体...)
正則化って...
まず、そもそも正則化ってなんなのか。とりあえず過学習を抑えるための手法だという説明を受けることが多いと思う。
一般的にパラメータの次元(数)が増えると、関数の表現力が上がりすぎて汎化性能が落ちる。これを次元の呪いやら過学習やら呼んだりする。つまり、パラメータの次元は必要最小限に抑える方がいいのだ。
計算時間を考えてみても、これはその通りであるということは理解できると思う。
次元の呪いって...
そういえば、正則化について考えてみる前によく考えてみると、次元の呪いという言葉もいまいちよくわからない。次元が増えると計算時間が爆発的に増えるとか、過学習しやすくなるとかそういう話はわかる。
しかし、よく次元の呪いの話について話すときにされる超球の話、これの意義がよくわからん。ちょっと調べてみた。
高次元の球では、ほとんどの部分が球の表面付近に分布する
この説明で、なるほどとなるやつがいるのか?...いるんだろうな、自分の無能さが悲しくなる。まあそれはともかくとして、ここら辺のリンクを読んでみた。
次元の呪いとは結局何なのか?
次元の呪い、あるいは「サクサクメロンパン問題」
次元が増えれば表面積も増えるのだから、体積と半径が固定なら、そりゃ表面に体積が集中してくという話はわかる。なるほど、面白い現象かもしれない。
で?結局この超球の話をして、次元の呪いについて何を言いたいのか?
この問いに関して、僕は明確な答えを持っていない。高次元では非直感的なことが起こるんだよという話をしたかっただけなのかもしれない。よくわからん。
でも多分そうなのだろう。
つまり、少し話が脱線してしまったようだ。
今回の話で次元の呪いというときに、この超球の話を思い出す必要はなさそうだ。気になって調べてみて無駄に時間を使った。
結局、次元の呪いとは一つの現象のことだけを指すのではなく、
- 超球の表面に体積のほとんどが集まることとか
- 計算時間が爆発的に増えるとか
- 過学習しやすくなるとか
その他いろいろ、次元が増えたことで起きる面倒くさいこと・不思議なことをまとめて次元の呪いなどと仰々しい名前で読んでいるっぽい。
今は、次元が増えると計算時間が爆発的に増えるとか、過学習しやすくなるとかの問題があるということにだけ注目することにしよう。
正則化について立ち戻る
正則化とは、過学習を抑えるための手法だというところはいいだろう。
では、どうやってそれを達成しているのか考えていこう。
自分の持ってる直感的な理解としてはノイズを付け加えることで、過学習を抑えロバスト性を上げる。というのが一番近い。まさに「鋭すぎる刃物を鈍らせて使う」だ。
じゃあ、正則化項はなんでもいいのかというとそうではない。できれば、過学習したときにそれを咎める仕事をしてくれるものを考えたい。
一般的に、機械学習は正解ラベルと予測ラベルの誤差を最小化することを目的とするということは知っていると思う。
よく使われる最小二乗法の式でいうと
$$
C(x) = \frac{1}{n}\sum_{i=0}^n(y_{i} - f(x_i) )^2
$$
これを最小化する。ここで、$C(x)$はCost functionの意味、$y_{i}$は実際の値、$f(x_i)$は予測値とする。
この式の後ろに正則化項をつけることで正則化する。
正則化項にも種類があるが、メジャーなL1正則化はL1ノルムに係数$\lambda$をかけた項と言われる。
式にすると
$$
\lambda \sum_{i=0}^{n}|w_{i} |
$$
となる。
この式はなんなのかというと、$\lambda$はハイパラメータで自分で調整する定数、$w_{i}$は予測値を出すときに勾配降下法で調整される重みである。勾配降下法については、機械学習をかじってれば、知ってる気がするのであまり説明しないが、微分してその傾きをみることで最適解を見つける手法だ。
で、この正則化項について話を戻すと、この$\lambda$を各重みのノルム(絶対値)にかけているということになる。
すると何が起きるかというと、$\lambda$が大きければ大きいほど、小さくしたいはずのコスト関数の値が大きくなる。大きくなると困るので、これをなんとかしようと重みが小さくなる方向に学習が進んでいく。
この重みが小さくなると何が嬉しいのかと、始まりの最小二乗法に立ち返って考えてみる。この式では、重みが大きいほど各変数(特徴量)の値が大きくなる、つまり過学習する方向に働く。L1正則化はこれを抑制しているのだ。
結論
まとめると、最小二乗法のようなコスト関数に正則化項を付け加えることで、各変数に対する重みが大きくなりすぎてオーバーフィットするのを防ぐための正則化の仕組みを説明した。
この正則化がどうしてうまくいくのかを、自分のできる限りで直感的に説明したつもりだ。
どうだろうか、「鋭すぎる刃物を鈍らせて使う」という言葉がしっくりきたのではないだろうか。(こない場合は僕の説明が下手なだけなので、カーネル多変量解析―非線形データ解析の新しい展開 (シリーズ確率と情報の科学)を買おう。すごくいい本なので(いつか読み終わったらレビューみたいなのも書きたい))