Skip to main content
QUICK REVIEW

[論文レビュー] Tsnnls: A solver for large sparse least squares problems with non-negative variables

Jason Cantarella, Michael Piatek|ArXiv.org|Aug 13, 2004
Matrix Theory and Algorithms参考文献 6被引用数 31
ひとこと要約

tsnnls は、大規模なスパースな非負の最小二乗(NNLS)問題を解くための、ブロックピボット法の freely available で高性能な C 実装である。スパース行列では、Matlab に基づく実装(Matstoms の snnls など)を最大 10 倍速くし、MATLAB の lsqnonneg と同等の精度を達成している。これは、最適化されたスパースなコレスキー分解と LSQR を用いて、非制約付きの解法を効率的に行っているためである。

ABSTRACT

The solution of large, sparse constrained least-squares problems is a staple in scientific and engineering applications. However, currently available codes for such problems are proprietary or based on MATLAB. We announce a freely available C implementation of the fast block pivoting algorithm of Portugal, Judice, and Vicente. Our version is several times faster than Matstoms' MATLAB implementation of the same algorithm. Further, our code matches the accuracy of MATLAB's built-in lsqnonneg function.

研究の動機と目的

  • 大規模なスパースな非負の最小二乗(NNLS)問題を解くための、フリーで高性能なソルバーが不足しているという問題に対処すること。
  • MATLAB やプロプライエタリライブラリのオーバーヘッドを回避するための、軽量でポータブルな C 実装を開発すること。
  • 既存の MATLAB に基づく実装(例:snnls)よりも優れたパフォーマンスを達成しながら、数値的精度を維持すること。
  • スパース問題における数値的退化を回避するため、機械精度以下(≤10⁻¹²)の変数をゼロに設定すること。

提案手法

  • カーラシュ=クーン=タッカー(KKT)条件を用いて、NNLS 問題を線形補完性問題(LCP)として定式化する。
  • 非可解な変数を活性集合と非活性集合の間で繰り返し入れ替える、修正されたブロック主軸ピボット法を適用する。
  • 非制約付き部分問題を効率的に解くために、$A^T A$ のスパースなコレスキー分解を用いる。
  • 非制約付き最小二乗部分問題を解く際、MATLAB の backslash よりも高速な LSQR を代替手段として採用する。
  • ピボット更新の過程で重複する行列乗算を回避するためのキャッシュを実装する。
  • 数値的安定化戦略として、解における変数が $10^{-12}$ 以下である場合にゼロに設定することで、退化ケースにおけるサイクルを防止する。

実験結果

リサーチクエスチョン

  • RQ1ブロックピボット法のフリーで C ベースの実装である tsnnls は、MATLAB に基づく実装よりも速度と拡張性に優れているか?
  • RQ2tsnnls のパフォーマンスは、大規模なスパースおよび密行列において snnls や MATLAB の lsqnonneg と比べてどの程度か?
  • RQ3アルゴリズムの非制約付き部分問題を解く際、LSQR を使用する場合と MATLAB の backslash を使用する場合のパフォーマンス差は何か?
  • RQ4$10^{-12}$ のしきい値戦略は、退化した問題における数値的サイクルを防止するのにどの程度有効か?
  • RQ5tsnnls は、ピボット数にほとんど差がないにもかかわらず、スパース行列では顕著に高速化しているが、その理由は何か?

主な発見

  • 密度 0.01 のスパース行列では、tsnnls は snnls より最大 10 倍速く、スパarsity が増すにつれて比例定数が減少する。
  • 密行列では、tsnnls は、重複する行列乗算を排除する最適化されたキャッシュのおかげで、snnls より数倍速い。
  • tsnnls では最終的な非制約付き解法ステップが総実行時間の 5% にすぎない(LSQR を使用)が、snnls では MATLAB の backslash を使用しているため、ほぼ 50% を占める。
  • tsnnls は、MATLAB の組み込み関数 lsqnonneg と同等の精度を達成しており、これははるかに遅く、大規模問題には不適切である。
  • 500×490 の密行列では、lsqnonneg は 100 秒以上かかったが、tsnnls と snnls はいずれも 1 秒未満で完了した。
  • tsnnls がスパース問題で顕著なパフォーマンス向上を示す主な理由は、ピボット数の差ではなく、LSQR の効率的な使用にある。ピボット数は密度にかかわらず安定していた。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。