Noise2Noise解説

# Noise2Noiseの解説（ノイズが乗った画像だけでノイズ除去ネットワークを学習する方法）

ノイズ除去に関する論文[ Noise2Noise: Learning Image Restoration without Clean Data](https://arxiv.org/abs/1803.04189)について解説、要約を行おうと思います。
2018年の論文であり、インパクトも大きかった論文ですので、紹介記事を書くには古い気もしますが、Qiitaには実装に関する記事はありましたが、内容を解説する記事はありませんでしたので、備忘録として残しておきます。基本的にはだれでも読めるようにわかりやすさ重視で書いています。

## 概要

近年深層学習によって、破損した信号から正しい信号を復元するアプローチ（高解像度化、De-JEPG、カラー化...etc）は高い成果を上げています。しかし、これらのアプローチを行う場合、クリーンなデータと破損したデータを対応させたデータセットを用意する必要があります。これが例えば「カラー画像から白黒画像」、「高解像度画像から低解像度画像」のように単純な方法で変換できるものであれば容易にデータセットを用意することができまが、多くのタスクではそうではありません。仮にクリーンな画像を集めることを考えても、長時間の露光や被写体の静止といった条件をすべてのデータに対して満たし続けることがあります。ImageNetなどを見ても写真を撮る際のノイズが入っている画像は確認することができます。


### 定式化

この論文ではこうしたデータセットの問題点を解決するために、破損した信号のデータセットのみを与えられた状態から、その破損した信号から正しい信号を復号するためのネットワークを学習する方法について解説しています。

まず問題を定式化しておきます。次式は$ \hat{x}_i $ が破損した入力信号であり、画像であればノイズ画像。$y_i$がクリーンな出力、画像であればノイズ除去画像を示しています。

```math
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),y_i)
```

基本的にはパラメータ $ \theta $ を調整して$ \hat{x}_i $から$ y\_i$への変換を行う関数 $ f\_{\theta} $の学習を行いたいという、一般的なノイズ除去の問題設定です。この時破損入力$\hat{x}$はクリーンなターゲットに従って生成される確率変数である必要があります（$ \hat{x} \thicksim p(\hat{x}|y\_i) $）。


### 要点
論文の特徴的な要点は次の３つです

* ノイズ画像（破損した信号）のデータセットのみで、ノイズ画像からクリーン画像の変換を学習させる
* ノイズ画像とクリーン画像のデータセットを用いた場合とほぼ同等か、むしろやや良い結果を出すことができる
* ノイズ画像からノイズ画像への変換(Noise2Noise)の変換を学習することは、ノイズ画像からクリーン画像(Noise2Clearn)の変換を学習することに等しい


本当にできるのかという感じです。特に最後なんてお前の頭大丈夫と言いたくなります。しかし、論文のタイトルにもある通りノイズ画像からノイズ画像への変換(Noise to Noise)がこの論文のキーアイディアになっています。


## 理論的背景

まず、回帰モデル（リグレッサ）について考えていきます。またこの理論的背景解説の中ではモデルや分類はすべてリグレッサを想定し、分類モデル（クラシフィケーション）は考えないものとします。

したがって、非常に単純なリグレッションの具体例から考えていきます。

まず測定値の信頼できない室温のデータセットを仮定します{$ \{ y\_1,y_2,y_3 \} $}
つまり、室内のいくつかの地点で複数回の温度測定を行ったものだと考えればよいでしょう。ただし測り方が悪いのか、温度計自体が悪いのかはわかりませんが、真の室温と測定値の間には誤差が存在していると仮定します。

この時、未知の真の室温を推定するための、最も一般的な戦略は、何らかの損失関数に基づいて、測定値からの誤差を最小にすること＝最小の平均偏差を持つ、$z$を求めることです。

```math
\underset{z}{argmin} \mathbb{E}_y\{L(z, y)\}
```
これは例えば、L2損失(z-y)^2を最小化しようとした場合、zは単純算術平均となります。

```math
z = \mathbb{E}_y\{y\}.
```

これについては直感的にもわかりやすいと思います

また同様にしてL1損失を用いた場合、観測データセットの中央値が最適解として得られます。

ニューラルリグレッサによる訓練は上記の方法の一般化だと捉えることができます。
ここで入力とターゲットのペアによるトレーニングタスクについて定式化して考えると次のようになります。

```math
\underset{\theta}{argmin} \mathbb{E}_{(x,y)} \{ L(f_\theta(x),y) \}
```

これらの式は、よくあるDNNの式ですが、次の条件付確率に書き換えた式へと書き換えることができます。

```math
\underset{\theta}{argmin} \mathbb{E}_x \{\mathbb{E}_{y|x} \{ L(f_\theta(x),y) \}\}
```

これらの式からニューラルリグレッサが隠している重大な点が存在しています。

つまりリグレッサの学習は１：１対応したxからyへの変換を学習しているように思えるが、実際にはxに対応するyは複数存在しているため1:nのマッピングといえます。

これについては具体例を出すとわかりやすいのですが、高解像度化タスクであれば、入力の低解像度画像$x$に対し、（少なくとも人間がxより高解像度だと思える）出力の高解像度画像$y$は複数あるといえます。

同様に自動着色タスクにおいても、入力された白黒画像に対する、出力のカラー画像は複数あるといえます。

したがってニューラルリグレッサを用いた多くのタスクは点と点をつないでいるように見えますが、実際には点と領域をつなぐ学習をしていると考えられます。

これらの出力は先ほどの室温のデータセットで説明したように、L2損失において学習を行っていた場合、結果として出力はすべてのもっともらしい説明の平均を出力することを学習することになります。

結果として、NNの推論による出力に空間的なボケが含まれるのです。

このボケは多くのタスクにおいて研究者を悩ませています。例えば、高解像度画像やGANなどの生成結果はガウシアンフィルタのような平滑化が掛かったような画像が出力されるという問題点があり、研究者はこの改善に取り組んでいます。

しかしながら、このボケによる問題点は、今回の場合においては予期しない副産物を生み出しているといえます。

つまり、学習時のターゲットを一様な乱数（例えばガウシアンノイズやソルト＆ペッパー）で汚染したとしてもこの平均化能力によって、学習したネットワークはクリーンなターゲットで学習した結果と変わらない出力を行うのである。
したがって１の式と次の式において最適化した場合、得られる$f_\theta$は等価な関数であることが言えます。

```math
\underset{\theta}{argmin} \sum_i L(f_{\theta}(\hat{x}_i),\hat{y}_i)
```

この式では先ほど必要だったクリーンなターゲット$\hat{x}$が不要になっています。

この理論こそがNoise2Noiseにおいて最も重要であり、根幹的な理論であるといえます。

ひとまず理論の解説はここまでとし、次は実験フェーズに移ります。

## 実験

coming soon...