行列の条件数、残差が小さくても解がずれるのはなぜか

浅い角度で重なる淡い帯と、離れた位置にある二つの琥珀色の球を描いた条件数の抽象アート

連立方程式を解いた後、答えを元の式へ戻すと、左右の差はごく小さい。それなら安心して使えるのでしょうか。式をどれほどよく満たすかを示す「残差」は大切な確認ですが、求めた解が本来の解に近いかは、もう一つの性質にも左右されます。

その手掛かりが行列の条件数です。入力のわずかな違いが、解の違いへどれくらい増幅され得るかを表します。二つの式だけの例で、残差と解の誤差が食い違う理由を見ていきます。

簡単にまとめると?

  • 残差は「答えを式へ戻したときのずれ」、解の誤差は「本来の答えからのずれ」です。同じ量ではありません。
  • 二つの式がほぼ同じ条件を課していると、小さな入力の変化で交点が大きく動きます。条件数が大きい系で起こる、敏感さの一例です。
  • 残差の尺度、条件数、入力の不確かさを合わせて見ます。計算の桁数を増やしても、測定値に含まれる不確かさ自体は減りません。

ほとんど同じ二つの式を解く

未知数をx₁、x₂として、次の連立方程式を考えます。係数と右辺は、ここでは表示した十進数を正確な値として扱います。

x₁+x₂=2
x₁+1.001x₂=2.001

下の式から上の式を引くと、0.001x₂=0.001。したがってx₂=1、x₁=1です。二つの式はほとんど同じですが、係数の差がゼロではないので、解は一つに決まります。

次に、二つ目の式の右辺だけを2.002へ変えます。引き算した後は0.001x₂=0.002となり、解はx₂=2、x₁=0へ移ります。右辺の変化は0.001なのに、解の各成分は1ずつ変わりました。小さな差を、さらに小さな係数0.001で割っていることが原因です。

第1式を固定し、第2式の右辺だけを変えた厳密計算
第2式の右辺 x₁ x₂
2.000 2 0
2.001(基準) 1 1
2.002 0 2

座標上では、それぞれの式は直線です。ほぼ平行な二本の直線では、片方を少しずらすだけで交点が遠くへ移ります。完全に平行になる場合と違って、解が一つ存在していても、入力に対する敏感さは残ります。

二つ目の式の右辺が2.000、2.001、2.002のとき、解がそれぞれ(2,0)、(1,1)、(0,2)へ移る独自計算の比較図
本文の2×2系を有理数で計算した独自図。各段で第2式の右辺と、対応する解を示す。バーはx₁・x₂の値で、直線の傾きや角度を描いたものではない。実測値やソルバーの性能試験ではない。

残差が0.001でも、解は1ずれている

今度は元の右辺2.001へ戻し、候補の答えとして(0,2)を代入してみます。第1式は0+2=2で一致します。一方、第2式の左辺は0+1.001×2=2.002です。右辺との差は−0.001。二つの式の残差を並べると(0,−0.001)になります。

行列A、解の候補x̂、右辺bを使えば、残差はr=b−Ax̂です。対して、元の正しい解x=(1,1)と候補x̂=(0,2)の差は(−1,1)。式の左右の差は小さくても、解そのものの差は小さくありません。[1]

大きさを比べるため、ここではベクトルの成分の絶対値のうち、最大のものを採用します。これを最大成分ノルム(∞ノルム)と呼びます。元の右辺の大きさは2.001なので、相対残差は0.001÷2.001≒0.00049975、約0.05%です。元の解の大きさは1、解の差の大きさも1なので、相対誤差は1、つまり100%になります。

候補(0,2)は、右辺を(2,2.002)に少し変更した問題なら、正確な答えです。このように「入力をどれだけ変えれば、この答えが正解になるか」を見るのが後退誤差の考え方です。「元の答えからどれだけ離れたか」を見る前進誤差とは、見る向きが違います。[2]

今回の相対残差は、Aを固定して右辺bだけの変更を許したときの相対的な後退誤差です。Aも変更できる定義では分母も変わります。数値ライブラリのBERRなど、別の定義による指標とそのまま同じ値だと扱わないことが大切です。[1]

条件数は「増幅され得る大きさ」を教える

正方行列Aが逆行列を持つとき、条件数はκ(A)=‖A‖‖A⁻¹‖で定義できます。使うノルムをそろえる必要があり、今回は∞ノルムです。行列では、各行の成分の絶対値を足し、その最大値を取ります。条件数は、特定の入力に実際に何倍の誤差が出たかを直接表す値ではなく、感度を評価するための上限の手掛かりです。[1][2]

今回のAの行の和は2と2.001なので、‖A‖∞=2.001です。逆行列の行は(1001,−1000)、(−1000,1000)となり、絶対値の和の最大は2001。したがって、κ∞(A)=2.001×2001=4004.001になります。

残差から解の差を求める関係は、x−x̂=A⁻¹rです。さらにb=Axを使って大きさを評価すると、今回のようにbとxがゼロでない場合には、次の上界が得られます。

解の相対誤差 ≦ 条件数 × 相対残差

この例では、右辺は4004.001×(0.001÷2.001)=2.001です。実際の相対誤差1は、その範囲に収まっています。上界2.001は「誤差が200.1%になる」という予測ではありません。この条件数と残差だけでは、小さな解の誤差を保証できない、という読み方になります。

式の違いが大きければ、同じ変更への反応も違う

比較として、第2式をx₁+2x₂=3へ変えます。第1式は同じx₁+x₂=2で、元の解も(1,1)です。第2式の右辺を同じ絶対量0.001だけ増やして3.001にすると、解は(0.999,1.001)。各成分の変化は0.001にとどまります。

この行列の∞ノルム条件数は9です。先ほどの4004.001より小さく、二つの式が異なる情報を与えていることが、解を決めやすくしています。ただし、ここでそろえたのは右辺の絶対的な変更量です。右辺自体の大きさが異なるため、相対的な変更率まで同じという比較ではありません。

また、条件数の数値は、選んだノルムや変数の単位、行・列の尺度にも影響されます。異なる単位を混ぜたままの値だけで問題の良し悪しを決めず、何を同じ大きさの変化とみなしているかを確認します。

計算結果を使う前に、何をそろえて見るか

まず、残差の定義と尺度を記録します。生の残差だけでなく、右辺に対する比なのか、Aと候補解の大きさも含めた比なのかを明確にします。同じ問題全体を小さな定数倍にしただけでも、生の残差は小さくなるためです。

次に、条件数またはその推定値を合わせて見ます。LAPACKの第三版ガイドでは、条件数の逆数をRCONDとして扱い、後退誤差や前進誤差の評価と区別しています。逆行列を説明のために書ける小例と、大きな行列でわざわざ逆行列全体を作って評価することは別です。利用する計算手法が、どのノルムや尺度で指標を返すかを確認します。[1]

最後に、入力の不確かさを結果へ結び付けます。今回の例で第2式の右辺が測定上±0.001の範囲にしか分からないなら、ほかを固定しても解は表の範囲で動きます。桁数を増やして計算の丸めを小さくしても、その測定の幅は消えません。より異なる条件の測定を追加できるか、入力の精度を改善できるか、必要な出力の許容幅を見直すか、という検討につながります。

残差が小さいことは有用な確認です。そのうえで、入力がどれくらい確かで、問題がその変化にどれくらい敏感なのかまで見ると、計算結果をどの精度で使えるかを判断しやすくなります。

参考資料

  1. [1] LAPACK Users’ Guide, Third Edition:Further Details: Error Bounds for Linear Equation Solving(1999年版)。残差、∞ノルム条件数、後退誤差と前進誤差、RCONDの説明。本文の2×2系と図は、独自に設定して厳密有理数で検算した例です。
  2. [2] MIT OpenCourseWare, 18.335 Introduction to Numerical Methods, Spring 2019:Week 2。Lecture 3の後退安定性、Lecture 4のノルム、Lecture 5の条件数を参照。最新ソフトウェアの性能評価として扱ったものではありません。