GPUでの制約のない非線形最適化問題の解決


18

GPU(CUDA)で制約のない非線形最適化問題を解決しようとしています。

目的関数は滑らかな非線形関数であり、その勾配は分析的に計算するのに比較的安価であるため、数値近似に煩わされる必要はありません。

ほとんどの場合、さまざまな理由でfp32数学演算を使用してこの問題を解決したいので、どの非線形最適化方法が丸め誤差に対してより堅牢であり、パフォーマンスが優れていますか?(共役共役/準ニュートン/信頼領域など)、GPUでBFGSを試して良い結果を得た人はいますか

ところで、必要に応じてヘッセ行列は、私の場合は比較的小さい(通常は64x64未満)が、これらの小規模な最適化問題の数千を同時に解決する必要がある。


4
あなたの問題のサイズが小さいことを考えると、アルゴリズム(BFGSなど)の特定の選択が最も重要な課題になるとは思いません。代わりに、GPU <-> CPU通信のオーバーヘッドを最小化します。おそらくそれを行う最善の方法は、GPU上で問題の多くのインスタンスを並行して解決することです。すべてを一度にロードし、一度に解決し、結果を一度にダウンロードします。アルゴリズムについての具体的なアドバイスはありませんが、GPUは分岐よりもループの方が優れていると言えます。
マイケルグラント

1
@Michael C.Grant:まあ、私の場合、通信のオーバーヘッドは計算によって簡単に隠すことができるので、ボトルネックではありません。ここでは、メモリの限られたBFGSまたは標準のBFGSを使用する傾向がありますが、より良いアプローチ。
user0002128

CUDAでLBFGSを実装した人もいました。
BenC

回答:


8

LBFGS、Barzilai Borwein勾配降下法、非線形共役勾配法など、GPUに非常に多様な非線形ソルバーを実装しました。

このため、Dai&Yuanの非線形共役勾配が最も効率的です。一般に、非線形共役勾配の他のバージョンはより効率的かもしれませんが(CG-DESCENTなど)、実装するのが難しい場合もあります。

一般に、LBFGSは非常に堅実な選択肢であり、実際にメモリ不足に陥らない限り、おそらく開始するのに最適な場所です。

ただし、共役勾配とBFGSの両方で行検索が必要であり、fp32が問題になります。線探索に標準のウルフ条件を使用するのではなく、ここで提案する近似のウルフ条件を使用することをお勧めします。論文は少し複雑ですが、重要なのは式4.1です。基本的に、関数を計算できる精度を明示的に導入します。

GPUに関する考慮事項:

あなたには多くの小さな問題がありますが、それは私の大規模な問題のユースケースとは少し異なります。ブロック内のすべてのスレッドを使用するために関数と勾配の評価を並列化できる場合は、GPUブロックごとに1つの問題を実行することを検討してください(または、ワープ)。そのように、異なる問題が異なる反復回数を必要とする場合、それは問題ではありません。

これがオプションではない場合、LBFGSソルバーを使用します。関数が適切に動作している場合は、単純にステップサイズ1を使用して(行検索を回避して)、一定の反復回数ですべての問題を実行するだけで済みます。


0

Levenberg Marquardt(信頼領域バリアント)を使用することをお勧めします。これは、多くの実用的なアプリケーションで使用されており、非常に優れた速度対精度パフォーマンスを示しています。さらに、GPUにはいくつかのライブラリー(例:cuLM https://github.com/zitmen/cuLM)があり、試してみることができます。彼らが仕事をしていない場合、あなたが実装するためのリソースのトンがあります。LMの実装はまったく難しくありません。GPU通信の最小化にのみ注意する必要があります。簡単なアイデアを得るには:

http://on-demand.gputechconf.com/gtc/2012/presentations/S0231-Levenberg-Marquardt-Using-Block-Sparse-Matrices-on-CUDA.pdf


2
Levenberg-Marquartは、非線形最小二乗用です。私は彼/彼女が最小二乗について何も言及していないと思います。
カート

0

シミュレートされたアニーリング手順は、丸め誤差をより適切に処理できます(簡単に並列化できます)。

検索エリアの粗いグリッドと最初の「温度」パラメータから始めます

各ステップで、可能な解点を計算します(温度に反比例する確率で、非解点を受け入れることもできます)

次に、そのステップでのソリューションのみを保持し、次の反復でよりきめの細かいグリッドを提供する温度を上げます

温度<所定の限界/精度のしきい値までこれを行います

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