今 プログラミングのための線形代数 を読んでいるのですが, そこでチコノフ(Tikhonov)の正則化というのが紹介されていたので試してみました
チコノフの正則化とはどういうものかというと,
とある画像 があったとして,
画像をぼかす以下のような行列Aがあったとする.
それらで を行った場合, 画像はこのような形でボケた.
このボケた画像 を元に戻すには逆行列 を求めて, とすれば元画像 が得られる
綺麗に復元出来てますね.
しかし, ぼかした画像 に微小なノイズ が加わった 画像 を で復元しようとすると...
ありゃま...復元時にノイズが大きくなってしまいました...
チコノフ(Tikhonov)の正則化
方針
- と との食い違いを測る.
- 自体の もっともらしさ を測る. あるいは, 同じことだが, の 不自然さ を測る.
- 食い違い と 不自然さ の合計値が最小になるような を答える
では食い違いは0だが, 得られた画像 の不自然さがひどかった. 食い違い と 不自然さ のバランスを取ればもっと良い画像が手に入る
の長さ を用いて 食い違い を測る の長さ を用いて不自然さを測る
正の定数を何か設定して が最小になる を求めると, になっています. これがチコノフ(TIkhonov)の正則化.
的なことが本に書いてありました.
ではやってみましょう
元画像よりはノイズが減りましたね.
を変えると...
明るくなった(元のに近づいた)けど, ノイズが の時より大きくなってしまった
のときよりノイズは減りましたが, ボケた画像()に近くなってしまいました.
とまぁこんな感じです. 本当はもっと上手にぼかしたり復元したりできるかもだけど, そこまで試してないというのと, はてなブログでtex書くのがしんどくてそこまでする気力がありませんでした.
コードは全部Pythonで書いたんですけど, 別にそこまで見せる必要も無いですし, やみかさんの記事 にチコノフの正則化のコードと解説があるのでそっち見てください. 僕が書いたのと同じ感じです.
あと, 詳しい説明とか知りたい人はこれ見てください.
あと, 調べててわかったんですけど, チコノフの正則化って別名 L2正則化 っていうらしいですね. 一気に馴染みのある感じになりましたね. これが言いたかった.
そんで, wikipedia にこんなこと書いてありました.
1943年に Andrey Nikolayevich Tikhonov が、L2 正則化をより一般化した Tikhonov 正則化を逆問題に対する手法として発表した
逆問題に対するL2正則化がTikhonovの正則化なんすねぇ〜
と適当な感じで記事を書いてみたのですが, 間違ってるところとかあれば指摘してください. 結構喜びます.
それではまた. ばいばい.