LBFGS、Barzilai Borwein勾配降下法、非線形共役勾配法など、GPUに非常に多様な非線形ソルバーを実装しました。
このため、Dai&Yuanの非線形共役勾配が最も効率的です。一般に、非線形共役勾配の他のバージョンはより効率的かもしれませんが(CG-DESCENTなど)、実装するのが難しい場合もあります。
一般に、LBFGSは非常に堅実な選択肢であり、実際にメモリ不足に陥らない限り、おそらく開始するのに最適な場所です。
ただし、共役勾配とBFGSの両方で行検索が必要であり、fp32が問題になります。線探索に標準のウルフ条件を使用するのではなく、ここで提案する近似のウルフ条件を使用することをお勧めします。論文は少し複雑ですが、重要なのは式4.1です。基本的に、関数を計算できる精度を明示的に導入します。
GPUに関する考慮事項:
あなたには多くの小さな問題がありますが、それは私の大規模な問題のユースケースとは少し異なります。ブロック内のすべてのスレッドを使用するために関数と勾配の評価を並列化できる場合は、GPUブロックごとに1つの問題を実行することを検討してください(または、ワープ)。そのように、異なる問題が異なる反復回数を必要とする場合、それは問題ではありません。
これがオプションではない場合、LBFGSソルバーを使用します。関数が適切に動作している場合は、単純にステップサイズ1を使用して(行検索を回避して)、一定の反復回数ですべての問題を実行するだけで済みます。