📘

逆問題と誤差鋭敏性について

2021/04/30に公開

結果から原因を予測する問題を逆問題と言います。
逆問題では順問題とは異なり問題が非適切になっていることが大半で、安定した解が得られません。
非適切性が原因で生じる誤差鋭敏性という現象について説明します。

逆問題とは?

モデルの出力から入力を推定する問題のことです。
逆問題ではモデルに組み込まれていない観測値に含まれる未知量が原因で非適切な問題となることが多いです。
出力から入力を求める過程を逆過程と言い、逆問題を解く方法を逆解析と言います。

逆問題の適切性

逆問題は以下の3つの適切性を満たさないとき安定した解が得られません。

  1. 解の存在性
  2. 解の一意性
  3. 解の安定性

1 と 2 は条件を満たしている、あるいは満たしていなくても問題にならないことが多いです。
3 が満たされていないとき、誤差鋭敏性という現象が生じて解が安定しなくなります。
観測値にはノイズが含まれていますのでほとんどの逆問題で発生します。

誤差鋭敏性とは?

観測誤差が含まれる観測値で逆解析をすると解が大きく変動する現象のことをいいます。
これは特異値が小さな特異ベクトルで生じます。特異値の詳細はwikiを参照してください。

誤差鋭敏性のメカニズムは以下の通りです。
偏回帰係数を A として r 番目の特異ベクトルの特異値が小さな値だったとします。観測誤差が含まれた観測値を A の逆行列に入力すると観測誤差の r 番目の特異ベクトル成分と特異値の逆数が掛け合わされて解が大きく変動します。

では特異値が小さいときに誤差鋭敏性が起きるのか確認してみましょう。

... # 観測値b1から0.1ずつずらした観測値をb2として解の変動を確認します。
>>> A = np.array([[7.1, 5.9], [7.7, 6.5]])
>>> b1 = np.array([3.6, 3.8])
>>> b2 = np.array([3.5, 3.9])
>>> np.linalg.inv(A) @ b1
array([1.3611111, -1.0277778])
>>> np.linalg.inv(A) @ b2
array([-0.3611111, 1.0277778])
... # 観測値が0.1しかずれていないにもかかわらず解が大きく変動しています。

A を特異値分解すると特異値が小さいのが分かります。

>>> u, s, vh = np.linalg.svd(A)
>>> s
array([13.66591, 0.052686])

誤差鋭敏性の大きさは特異値の最大値と最小値の比の条件数で決まります。
条件数が大きいときは誤差鋭敏性が大きい悪条件になります。

>>> s[0]/s[1]
259.385034

r 番目の特異ベクトルを削除する低ランク近似あるいは特異値を正則化項で大きくするチホノフ正則化によって誤差鋭敏性は適切化されます。

誤差鋭敏性の可視化

b1にガウスノイズを加えて逆解析をしてみましょう。

# iはノイズスケール
noise = np.random.normal(loc=0, scale=i, size=(100, 2))
b1 = b1 + noise
x = b1 @ np.linalg.pinv(A)
x1 = x[:, 0]

n=100でx1を箱ヒゲ図でx1の分布を表示します。
横軸はノイズの標準偏差で観測誤差にあたります。

ノイズのスケールに対してx1のばらつきはとても大きいです。
誤差鋭敏性を可視化できました。

まとめ

逆過程で解を陽に求めると誤差鋭敏性が生じます。
誤差鋭敏性は特異値の小さな特異ベクトルで生じその大きさは条件数で決まります。
悪条件になっている場合低ランク近似あるいはチホノフ正則化で適切化する必要があります。

適切化手法は別の記事に書きます。

Discussion