SVMにおける損失と正則化

 前に書いたSVMの記事で、「L1とかL2というのは間違えたときのペナルティをどう定義するかを意味しており」と書いていたが、L1とかL2って正則化項の話なんじゃないの、と疑問に思った。1ヶ月ほど時間をおいてのセルフツッコミである。確認しようとしてカーネル多変量解析を読むと、やはり正則化項についてはL1とL2の両方の説明が書いてあるが、損失に関しては普通のHinge Loss(=L1 Loss)しか書いてない。
 と言う訳で、ああ、間違えちゃったなぁ、と暗澹たる気持ちで"A dual coordinate descent method for large-scale linear SVM"を読み直してみたところ、やっぱりL1-SVMというのは損失が普通のHinge Lossで、L2-SVMというのはHinge Lossの2乗を損失とすると書いてあった。両方とも正則化項についてはL2正則化を使っていた。とりあえず、前の記事の説明は正しかった。よかったよかった。
 間違いでなかったのはよかったのだが、損失関数と正則化のそれぞれにL1とL2が考えられるのだとすると、これまで自分が考えていたのよりもバリエーションが広がることになる。という事で、その点について少し頭を整理してみた。
 SVMでは(というか大抵の機械学習アルゴリズムでは)最小化するべき目的関数が、「損失関数+正則化項」という形をしている。
 損失関数は、あるデータについて分類に失敗した場合に、その失敗具合に応じて与えるペナルティである。データ毎に損失関数の値が決まり、その和ができるだけ小さい方が嬉しい。SVMの場合、損失はmax(1 - y w・x, 0)という形を取る。yがラベル(+1 or -1)で、wが素性に対する重みベクトルで、xがあるデータにおける素性ベクトルである。SVMではw・xが0以上の場合に+1のラベルを付与する事を考えると、y w・xは分離超平面からの遠さ、分類における確信度を示している。1 - y w ・xはy w・xが1以上でなければ0より大きくなるという事を考えると、SVMは、正しく分類できていたとしても、ある程度の確信度を持って分類が行えていない場合、まだ不十分であるとしてペナルティを与えているのだと考えられる。L1損失SVMではこのmax(1 - y w・x, 0)が損失の値であり、L2損失SVMではL1損失を2乗したものが損失の値となる。ただし、これまで教科書でL2損失SVMは見た記憶がない。(単に覚えてないだけかもしれない。)
 正則化項は、モデルの複雑さを示す指標である。パラメータが高次元になってくると、適当にパラメータの値を操作すれば、学習データに対する損失は最終的には0にできる事が多い。しかし、学習データに対して過度に適応してしまうと、未知のデータに対する性能(これを汎化性能という)が逆に落ちてしまう。これを次元の呪いと呼び、この呪いを避けるために正則化項を付け加える。
 つまり、損失と正則化項の和を最少化するということは、できるだけ確信度を持って間違いを少なくするという項(損失)と、できるだけシンプルなモデルを採用するという項(正則化項)の和を最小化するということである。
 損失と正則化項のそれぞれに、L1とL2のどちらかを選ぶ自由度がある。実際に問題を解く上では、L1とL2の違いというのはかなり大きい。というのも、L1では微分不可能な点が出てくるので、L1を使ってしまうと微分を使う最適化手法(ニュートン法とか)をそのまま単純に適用する事が出来ないのである。L2の場合は全ての点で微分可能であるので、様々な最適化手法をそのまま用いることが出来る。
 また、正則化に関しては、微分可能がどうとかとは別の点からもL1とL2で違いがある。L2正則化の場合、リプリゼンター定理によって最適解がサンプル集合の重み付き線形和となることが保証されている。しかし、L1正則化の場合、その保証がないので、双対問題を解く場合、最適解が求まっているという保証がなくなってしまう。なんかよくわからん事になってしまったとき、理論的な保証のあるなしというのは非常に重要である。
 これだけだと、ニュートン法使えないわ最適解である保証がないわでL1にはあまりいいところが無さげに思えるが、L1正則化ではより解がスパースになる傾向があり、性能も実用的にはL2正則化と大差ないとの報告がある。性能が大差ないのであれば、メモリ使用量が節約できるL1正則化は、場合によっては非常に魅力的であると言える。
 まとめ。

  • 損失項と正則化項はそれぞれにL1とL2の選択肢がある。SVMの損失項に関しては、個人的にはL2損失はあまり見覚えがなかった。
  • L2は性能いいし最適化も既存の手法が使える。
  • L1は性能はL2と大差ないしメモリ使用量をうんと減らせるが最適化が難しい。

 という感じ。