ヌルヌルコンピューター

機械学習、ニューラルネットワーク、その他色々と書くつもりですが三日坊主なので続かないかもしれません。あとまだ学士も取ってないへなちょこなので書いてある情報は正確性に欠いているかもしれません。てか多分間違いがいっぱいあります。何かありましたらご指摘お願いいたします。https://github.com/hirokik0811

ニューラルネットワークを用いた画像生成について

前の記事でDCGANといったが、これはDeep Convolutional Generative Adversarial Network の略である。その大本であるGenerative Adversarial Network、GANというのが
https://arxiv.org/pdf/1406.2661.pdf
で2014年にGoodfellow et al.によって提唱され、これが現在ニューラルネットワークを用いた画像生成における一つのスタンダードになっている。
理論としては
$$
G(z): \mathbb R^n \rightarrow \mathbb R^m \\
D(x): \mathbb R^m \rightarrow \mathbb R
$$
 の二つのニューラルネットワークモデルを用いる。
ここでG(z) はgenerator, D(x)はdiscriminatorである。
zというのはn次元のrandom noise vectorであり、そのノイズを入力としてGはm次元のvectorを出力する。このvectorが生成された出力データにあたる。
ここでDの役割はこの出力データ、あるいは学習用データを入力とし、これらを識別することである。つまり与えられたデータが生成されたものであると判断した場合0、学習データであると判断した場合1を出力する。

さて、ではこの二つのモデルをどう学習させるかということであるが、GはD(G(z))=1となるように、対してDはD(G(z))=0となるように学習する。要はGの出力データを学習データに十分似せることが目的なので、Gはその出力データをDに学習データと勘違いさせるまでに学習する。対してDは生成されたデータと学習データを正確に識別できるように学習する。

たとえて言うなら、絵画の贋作を作る職人は、贋作をアホな客に売りつけるための技術を持ち、鑑定家は騙されぬように高い審美眼を持っている。すると職人はその鑑定家を騙そうとさらに腕を磨いてゆき、鑑定家はさらにその眼を極める。そのイタチごっこを繰り返せば、最終的には職人の作る贋作は本物と見分けがつかなくなるだろうという話だ。

数式で表現すると
$$
\min_G \max_D V(G, D) = \mathbb E(log D(x)) + \mathbb E(log(1-D(G(z)))
$$
となる。
二つのloss functions
$$
\mathbb E(log D(x))
$$
および
$$
\mathbb E(log(1-D(G(z)))
$$
は通常のニューラルネットワーク同様 back propagation によってGおよびDのweightを最適化することで最小化する。

こうして得られたGが、与えた学習データと似た画像を生成してくれる画像生成機となるわけだ。