スパース性の正則化: L1 正則化

多くの場合、スパース ベクトルには多くの次元が含まれます。特徴クロスを作成すると、ディメンションがさらに広がります。このような高次元の特徴ベクトルの場合、モデルのサイズが大きくなり、大量の RAM が必要になる可能性があります。

高次元のスパース ベクトルでは、可能な限り重みをちょうど 0 に下げることを推奨します。重みが 0 の場合、対応する特徴がモデルから削除されます。特徴をゼロにすることで RAM を節約し、モデルのノイズを低減できる可能性があります。

たとえば、住宅に関するデータセットがカリフォルニア州だけでなく世界全体をカバーしているとします。世界緯度を分単位でバケット化すると(1 度あたり 60 分)、スパース エンコードで約 10,000 ディメンション、分レベルのグローバル経度から約 20,000 ディメンションが得られます。この 2 つの特徴の特徴クロスは約 200,000,000 次元になります。20 万次元の多くは居住地域が限られている地域(海中など)を表しており、そのデータを使用して効果的に一般化するのは困難です。このような不要なディメンションを保存するために RAM のコストを支払うのはばかげています。したがって、無意味なディメンションの重みを正確に 0 にすることが望ましいでしょう。これにより、推論時にこれらのモデル係数のストレージ コストを支払うことを回避できます。

適切に選択した正則化項を追加することで、このアイデアをトレーニング時に行われる最適化問題にエンコードできる場合があります。

L2 正則化でこのタスクを達成できるか?残念ながらできません。 L2 正則化では重みを小さくすることを推奨しますが、厳密な 0.0 への強制はありません。

また、モデル内のゼロ以外の係数値にペナルティをかける正則化項を作成することもできます。この数を増やすことは、モデルのデータ適合能力が十分に高まった場合にのみ正当化されます。残念ながら、このカウントベースのアプローチは直感的に魅力的ですが、凸最適化の問題が非凸最適化の問題に変わります。そのため、L0 正則化と呼ばれるこの考え方は、実際に効果的に使用することはできません。

ただし、L0 の近似として機能する L1 正則化という正則化用語がありますが、凸型であるため効率的に計算できるという利点があります。そのため、L1 正則化を使用してモデル内の情報に欠ける係数の多くが正確に 0 になるようにすることで、推論時に RAM を節約できます。

L1 正則化と L2 正則化。

L2 と L1 では、重みに異なるペナルティが課されます。

  • L2weight2 にペナルティをかける。
  • L1 は |weight| にペナルティをかける。

したがって、L2 と L1 には、異なる導関数があります。

  • L2 の導関数は、2 * weight です。
  • L1 の導関数は k(定数。値は重みに依存しません)です。

L2 の導関数は、毎回重さの x% を取り除く力と考えることができます。Zeno が知っていたように、数十億回の x% を削除したとしても、減少した数がゼロになることはありません。(Zeno は、正確にゼロを生成する可能性がある浮動小数点精度の制限についてはあまり詳しくありませんでした)。いずれにしても、L2 は通常、重みを 0 にしません。

L1 の導関数は、毎回重さからなんらかの定数を引く力と考えることができます。ただし、絶対値のおかげで、L1 は 0 で不連続となり、0 をクロスする減算の結果が 0 になります。たとえば、減算によって重みが +0.1 から -0.2 に強制される場合、L1 は重みをちょうど 0 に設定します。Eureka、L1 さんは重みをゼロにしました。

すべての重みの絶対値にペナルティを適用する L1 正則化は、ワイドモデルで非常に効率的になります。

この説明は 1 次元モデルにあてはまります。

下の再生ボタン()をクリックして、L1 正則化と L2 正則化が重みのネットワークに与える影響を比較します。