2011年3月14日月曜日

L1正則化で重みが0につぶれる理由

L1正則化、つまり正則化項としてL1-normを使うとパラメタの大部分が0につぶれてモデルがコンパクトになるよという話をよく聞くと思います。初めて聞くと、何で?と思われるかと思います。先日の岡野原握手会でもこの話題がさらっとでて、@hillbigさんはよく微分した形でこれを説明しています(「押すなよ押すなよー」)。私は目的関数の形で理解した方がわかりやすいと思っているので、それを紹介。

まず、正則化項の入っていない凸な目的関数を考えます。



普通パラメタベクトルは多次元なので、多次元の山みたいな形になりますが、ここでは1次元だと思いましょう。この時点で最適値は(頂点の位置)は3です。これに正則化項を足します。L2だとこんな形をしています、というか0を中心とする放物線です。



足しましょう。



足すと0に向かってシフトすることがわかるでしょう。L2正則化の式は原点中心の山なので、元の山(頂点がどこだかわからない)に足すと、必ず頂点は0に近づきます。ここで大事なのは、頂点の”値”ではなくて”位置”です。求めたいのは最小値をとる引数です。このとききれいな山になるのですが、滑らかな曲線に滑らかな曲線を足したんだから、滑らかな曲線ができるに決まってます(目的関数が滑らかな場合)。目的関数の頂点の位置にかかわらず0に近づく、しかし0にはならないことは明白です。これが、L2でパラメタの値が小さくなる、しかし0につぶれない理由です。

では、L1だったら? L1は下のような形をしています。尖ってます。



足したときの形というのは、0で折り曲がるのは(微分できない)確実ですが、元の目的関数の形に依存して以下の2種類が考えられます。ひとつは依然として0以外のところで最適値をとるケース。もう一方は0でぱきっと折れて、0が最適値になるケースです。



先ほど書いたとおり、本当の目的関数は多次元ですから、0になる次元とならない次元があります。この、0になる次元というのが、0につぶれる次元ということです。
ではどういう次元が0につぶれるのでしょう。正則化項を足した後の関数を微分すれば関数の傾きがわかります。0の前後で傾きの正負が変われば0につぶれることがわかります。正則化項の傾きは0の前後でそれぞれ一定ですので、結局目的関数の0の周辺での傾き(微分)の大小によって決定されると理解できそうです。

さて、この傾きが@hillbigさんのいうところの「0に向かって押す力」です。目的関数は自分の頂点(≠0)に向かってみんなで押していて、その力は頂点からの距離で変わります。一方、正則化項は一定の力で0に向かって押しています。両者の大きさの大小は場所によって違うということです。正則化項の押す力のほうが0近辺で強ければ、目的関数の押す力は負けてしまいますので0の前後で正則化項の力に負けて最適点は0になります。すると、先ほどのぱきっと折れた後者のグラフ、0で最適値をとるグラフになるわけですね。

0 件のコメント:

コメントを投稿