チコノフ(Tikhonov)正則化について

お久しぶりです。

最近プログラミングのための線形代数という本で線形代数のやり直しをしている。基底のイメージが掴みやすくて読んでいて楽しい

第二章の最後あたりにチコノフ正則化というものについて書いてあったので試してみることにした
コードはいつも通りここ(リンクを修正)

github.com

線形代数をやったことある人は以下の数式をよく見かけるはず
f:id:Owatank:20171212154859p:plain
(y,xはベクトル、Aは行列)

何をしているかというと(m,n)行列Aでn次元のベクトルxをm次元のベクトルyへと写像している
写像という言葉がイメージを掴みにくいけれど、m=3,n=2(m>n) に設定するとして

2次元空間で表されるベクトルxという平面を3次元空間に移す(写像する)とき、その空間でベクトルxはどのように表現されるかということ、であってるはず

f:id:Owatank:20171212160305p:plain

図で表すとこうなる。y=Axから元の2次元平面にある点xは写像した結果3次元空間ではyというベクトルで表される。図から写像した赤い平面以外の場所にある点(zとする)へと移れるxは存在しないことがわかる。こういう場合は単射というそうだ。

もちろん逆の場合m=2,n=3(m<n)も考えられる。3次元ベクトルで表されるxが2次元空間へ写像したときどう表現されるかということ。3次元情報を2次元情報で表すのは無理があるのでいくつか情報は削られてしまう。マリオがペーパーマリオになってしまう感じだ。

なので写像するときにはn次元からn次元への写像が基本的に嬉しい。n次元ベクトルxを回転したり引き延ばしたりする写像Aで写した時のn次元ベクトルyとか考えやすい。

n次元からn次元への写像において y = Ax とすると、yからxに戻すときは逆行列 inv_A を用いれば元に戻れる。 f:id:Owatank:20171212161825p:plain

このことから写像する行列Aには逆行列が存在しないといけないこともわかる。(行列Aは正則行列でなくてはならないということ)
逆行列が存在しないということはn次元空間を作るためのn本の基底が存在しない(n-1本だったりとか)ということで上の3次元情報を2次元情報で表現するといった状況になっていることになる。

世の中はひねくれているので正則行列ではあるけどほぼ逆行列に近い行列Aというのも存在する。
立方体をほぼ平面にするくらいぺちゃんこにしてしまう行列Aとかそんな感じ。このとき逆行列は元の立方体に戻す行列だからぺちゃんこな立方体を物凄く拡大して戻す逆行列 inv_A となる。

ここで元の立方体にノイズ(立方体の箱に黒い点のような落書きをしておくイメージ)を乗せて上のようなほぼ逆行列に近い行列Aでぺちゃんこにして、 inv_A で元に戻した時、ノイズも物凄く拡大されてしまう(黒い点のような落書きがかなり引き伸ばされたりしているイメージ)問題が発生すると本に書いてあった。

試してみることに
元の画像は以下のカニさん f:id:Owatank:20171212162928p:plain

画像を多少ぼかす行列Aを用意する
f:id:Owatank:20171212163027p:plain
単位行列の対角成分周りをぼやぼやした感じ(0.13とか0.6とか値を小さく)調整した。

y = Ax としたときのyの結果はこうなった
f:id:Owatank:20171212163245p:plain

全体的に暗くなった感じもあるけどちょっとぼやけてるのがわかる。
このyにノイズを乗せる(y+noise)
f:id:Owatank:20171212163402p:plain

Aの逆行列をかけて元に戻す( x = inv_A(y+noise) )

f:id:Owatank:20171212163815p:plain

かなりザリザリした結果になった。ノイズが引き伸ばされたのはわかる。
ちなみに逆行列自体はこんな感じだった
f:id:Owatank:20171212163911p:plain
なんかロマンチックだ

このノイズが引き伸ばされるのをなんとかしようというのがチコノフ正則化で、ざっくりいうと Ax と y+noise の距離(|| Ax - y ||)とか正則項を適用したりして、いい感じになるxを決めるぽかった。 数式で表すとこうなる
f:id:Owatank:20171212165419p:plain

右辺のyを除いた行列の結果は以下のようになった(α=0.03)
f:id:Owatank:20171212165921p:plain
逆行列 inv_A を表したものを太くした感じに見える

これをノイズありのyにかけるとこうなる
f:id:Owatank:20171212170052p:plain

ちょっとノイズが減ったのがわかる。でも完璧にとはいかなかった。αを0.5とかに変えたりすると元の画像xではなくどちらかというとぼかし行列を加えたyに近くなった。
この原因はなんだろう。逆問題あたりをもっと調べるとわかってくるのだろうか。