R1の最適化にL1ペナルティを追加すると、(ペナルティやL2がない場合と比較して)速度が大幅に低下するのはなぜですか?


8

私はBFGSのoptimの実装でいくつかの最適化を実行しています。目的関数は実際には単なる計算ではなく計算アルゴリズムです。L1ペナルティを追加すると、状況がかなり遅くなります。これはなぜでしょうか?物事を遅くするL1について何かありますか?glmnetでは、LASSOの実装はどのように高速なのでしょうか。

Googleのクイック検索により、「最適な目標と問題のパラメーターのL1ノルムを検出する」「lbfgs」というパッケージ呼び出しが見つかりました。「これらの最適化ルーチンの高速でメモリ効率の高い実装は、特に高次元の問題。」このような解決策を探すべきですか?


「目的関数は実際には数学ではなく計算アルゴリズムである」とはどういう意味ですか?
Cliff AB

具体的には、何を最適化していますか?LASSO回帰を推定していますか?
Sycoraxは2015

@CliffABつまり、「function(b)(Y-X * b)^ 2」のような数学に基づいて関数を最適化する代わりに、関数は(Y-X * bootstrap_estimate(b))^のような反復プロセスに基づいています2。つまり、勾配関数を提供できないと言っているのでしょう。
ゼロを数える

@ user777一種のグラフィカルモデルであり、私はバックプロパゲーションを通してフィッティングしています。違いは、グラフ構造がDAGであり、ニューラルネットワークで得られる構造化グラフではないことです。そのため、通常は逆伝播で行う行列乗算ではなく、グラフの操作として最適化を設定する必要がありました。
ゼロカウント

1
これは、同じパラメーターを使用してターゲット関数を2回評価すると、わずかに異なる結果が得られることを意味しますか(つまり、入力パラメーターが同じであっても、異なる反復でbootstrap_estimate(b)が異なる場合があります)?その場合、これははるかに困難な問題となり、L2ペナルティがあってもoptimのBFGSを使用すると、アルゴリズムが確率的エラーとピークにあると混同するため、途中で終了する可能性があります。私の推測では、これは当てはまりません。つまり、bootstrap_estimate(b)は、BFGSの実行ごとに(固定bの場合)一定です。
Cliff AB

回答:


8

L1ペナルティを追加すると物事が大幅に遅くなるのは、L2ペナルティが微分可能であるのに対し、L1ペナルティは微分可能ではない(つまり、絶対値)ためです。これは、関数の表面が滑らかではないことを意味し、標準の準ニュートン法はこの問題に多くの問題を抱えています。準ニュートン法を考える1つの方法は、関数の2次近似を行い、最初の提案がその近似の最大値になることを思い出してください。二次近似がターゲット関数にかなりよく一致する場合、提案は最大値(または世界の見方によっては最小値)に近いと予想されます。ただし、ターゲット関数が微分不可能である場合、この2次近似は非常に悪い可能性があります。

L1ペナルティにBFGSを実装するRパッケージを見つけたら、ぜひお試しください。一般に、BFGSは最適化のための非常に一般的なアルゴリズムです。一般的なアルゴリズムの場合と同様に、うまくいかない特別なケースがたくさんあります。問題に合わせて特別に調整されたアルゴリズムは、明らかに改善するはずです(パッケージが作者の主張と同じくらい優れていると仮定します:lbfgsについて聞いたことがありませんが、聞いたことのない素晴らしいことがたくさんあります。更新:I Rのlbfgsパッケージを使用しており、L-BFGSの実装は非常に優れています!私はまだ、OPが参照しているOWL-QNアルゴリズムを使用していません)。

うまくいかない場合は、Rの最適化を使用して「ネルダーミード」メソッドを試してみてください。最適化に派生物を使用しません。そのため、通常、スムーズな関数では遅くなりますが、スムーズな関数では安定します。


5

ペナルティを追加したときに問題が遅くなる理由はわかりません。それはおそらく(1)問題が何であるかに依存します。(2)コーディング方法。(3)使用している最適化方法。L1

私はあなたの質問に「暗黙の答え」があると思います:数値問題に対する最も効率的な解決策は、多くの場合テーラーメイドです。汎用アルゴリズムはまさにそれです:汎用。特定の問題がどのように提示されるか、そしてアナリストが知っているその特定の特性についての観察をもたらすことができるので、特定の問題に対する専門的な解決策はよりうまく機能する傾向があります。に関するあなたの特定の質問に対してglmnet、それはそれを非常に効率的にするいくつかの「トリック」を持っています-それが解決しようとしている特定の問題のために!詳細については、Journal of Statistical Software ペーパーを参照してください。

  1. すべてのモデル(弾性ネット、リッジ回帰、およびLASSOだけでなく)の最適化では、循環座標降下を使用します。これは、この問題を解決するためのかなり良い方法です。
  2. 係数は、値の範囲のパスに沿って計算されます。したがって、正則化パラメーター単一の値について応答曲面上をさまよっているのではなく、前の解からの係数推定を開始点として使用して、最大値から最小値に移動します。これは、が減少するにつれて、係数推定値が小さい値から大きい値に上昇するという事実を利用しています。標準の最適化ルーチンの素朴な実装の場合のように、ランダムに初期化された開始から同じ問題を何度も解決する必要はありません。λ λλλλ

そして、それはFORTRANでコード化されています。

L-BFGSは、制限されたメモリのBFGSアルゴリズムです。一部の問題については、標準のBFGSよりも効率的になるトリックがありますが、解決する問題が特定の問題に何らかの影響を与えているかどうかは明確ではありません。L-BFGSものオプションの1つoptimなので、追加のパッケージが必要になる理由がわかりません。

L1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.