🎉

線形モデルの逆解析 ー チホノフ正則化

2021/05/26に公開

逆問題では観測誤差により逆過程で求めた解が大きくばらつく誤差鋭敏性が起きます。
誤差鋭敏性を抑える手法としてチホノフ正則化(Tikhonov regularization)の説明と実装方法を紹介します。

誤差鋭敏性については以下の記事で取り上げています。
https://zenn.dev/mamamajohn/articles/9b5929c30d239f
https://zenn.dev/mamamajohn/articles/915b439f9cdd55

チホノフ正則化

残差平方和に原因XのL2ノルム正則化項を加えたものを最小化して一般逆行列を得る方法です。
正則化項を加えることで誤差鋭敏性でX_{pred}が大きくなるのを抑えられます。

チホノフ正則化により特異値は\muから\mu(1+\frac{\alpha}{\mu})に大きくなります。
小さな特異値成分を大きくすることで誤差鋭敏性が抑えられますが、正則化パラメーターは他の特異値にも影響するので注意が必要です。

Min \space |Ax-b|^2 + \alpha |x|^2
A^†_\alpha = \sum_k^r \frac{\mu_k}{\mu^2_k + \alpha} v_k u_k^T
x_{\alpha} = A^{†}_{\alpha}b
# Arは低ランク近似済み
ur, sr, vhr = np.linalg.svd(Ar, full_matrices=False)
# alphaは正則化パラメータ
alpha_root = np.ones(sr.shape[0]) * alpha
# 正則化した特異値の逆数を計算
sr_root = sr/(np.power(sr, 2) + alpha_root)
# チホノフ正則化した一般逆行列
A_tikhonov = np.matmul(vhr.T, np.multiply(sr_root[..., np.newaxis], ur.T))

実はリッジ回帰と効果は同じです。
リッジ回帰では偏回帰係数を正則化項にするのに対して、チホノフ正則化では原因Xを正則化項にします。
どちらの手法を選んだとしても偏回帰係数が正則化されると解釈され同じ効果が予想されます。
しかしチホノフ正則化ではモロゾフの相反原理という強力な手法で正則化パラメータを一意に決めることができます。

モロゾフの相反原理

誤差鋭敏性が抑制され予測精度を落とさない適切な正則化パラメーター\alphaを事前に決める必要があります。
観測誤差を\deltaとすると|Ax_{\alpha}-b|=\deltaになるように正則化パラメーターを決めるとちょうど良くなります。
これをモロゾフ相反原理といいます。
残差を観測誤差にすることで観測誤差が出力空間に閉じ込められ、観測誤差を含む観測値の逆像も入力空間に閉じ込められることになり誤差鋭敏性を抑えることができます。

二分法でモロゾフの相反原理を満たす正則化パラメータを求めます。

# Aは偏回帰係数、srは特異値行列、vhrは右特異行列、urは左特異行列、b0は観測値、dは観測誤差
def f(x, A_, sr_, vhr_, ur_, b0_, d_):
    return np.linalg.norm((A_ @ np.matmul(vhr_.T, np.multiply(sr_/(np.power(sr_, 2) + np.ones(sr_.shape[0]* x))[..., np.newaxis], ur_.T))@b0_)-b0_) -d_
alpha = optimize.bisect(f_test, 0, 1000, args=(Ar, sr, vhr, ur, b0, d))

チホノフ正則化の可視化

逆問題の誤差鋭敏性についての観測値b1にガウスノイズ(観測誤差)を加えます。
チホノフ正則化で求めた解の分布を一般逆行列と比較しましょう。

n=100で解x1の分布を箱ヒゲ図にしました。
横軸はノイズの標準偏差です。
正則化パラメータは0.1にしています。

一般逆行列の解に対してチホノフ正則化解の分布は狭いことが一目瞭然です。
誤差鋭敏性が抑えられています。

まとめ

チホノフ正則化の説明と実装方法をまとめました。使い方としてはモロゾフ相反原理で正則化パラメータを事前に決めてSVDを用いた低ランク近似で粗調整をしてチホノフ正則化で微調整をするという流れです。
低ランク近似とチホノフ正則化をしても誤差鋭敏性は付き纏いますが、グリッドサーチに比べて計算量が圧倒的に小さいです。
制御では解を陽に求める方法がおすすめです。

Discussion