Edited at

Python×Keras×GANチュートリアル 人工知能でファッション生成(2)

More than 1 year has passed since last update.


コードの解説

(2)もお読み頂きありがとうございます。

 それでは、さっそく、コードの解説に移らせていただきたいと思います。まずはganの仕組みをしっかり理解する必要があります。原論文をきちんと読んだ上で、実装に即した形で説明したいと思います。


GANの実装の仕組み


基本の構成要素

 GANは、2つのニューラルネットワークでできています。

 generaterとdescriminaterです。面倒なので、g,dと呼びます。gは、ニセの画像を作り出すニューラルネットワークです。dは、gが作ったニセの画像と、本物の画像を識別するニューラルネットワークです。

 なので、gが偽造者、dが判別者などと呼ばれたりもします。

gとdをトレーニングしていくと、最終的には、本物っぽい画像を生み出すgが得られることになります。このgを使えば、以後、本物っぽい画像をいくらでも生成できることになります。


gとdの実装理念

 gは、ノイズの入力に対してニセ画像を出力するニューラルネットワークです。

 ノイズは、サイズが(n×1)で、各要素が標準正規分布から発生させた乱数になっているnumpyndarrayです。

 ニセ画像は、サイズが(row×columun×3)で、各要素は−1から1の範囲に収まるnumpyndarrayです。

  g(ノイズ)=ニセ画像

ですね。

 dは、画像の入力に対して本物かどうかを出力するニューラルネットワークです。

 画像は、ニセ画像または真の画像です。真の画像は、サイズがニセ画像と同じで、実際の写真等をndarrayに変換したものです。ただし、各要素は255で割り算して−1されているので、範囲は−1から1になります。出力は、0から1のスカラーで、ニセ画像に対しては0,真の画像に対しては1を出力するようにトレーニングされます。

 d(画像)=0〜1ですね


学習のやり方

 ここが、元の論文以外でなかなか説明されていない部分です。

 学習は2ステップの組み合わせになります。

 1ステップ目は、gのパラメタを固定してdのパラメタだけを鍛えます。つまり、真の画像の入力には1を、ニセ画像=g(ノイズ)の入力には1を返すように、dだけをトレーニングします。

 2ステップ目は、dのパラメタを固定してgのパラメタだけを鍛えます。この際、gとdを組み合わせたモデルを作って、トレーニングします。組み合わせたモデルは、

d(g(noise))

ですね。その出力が1になるようにgのパラメタだけを鍛えます。

 各エポックごとに、このステップ1と2を繰り返していくのです。これがポイントです。敵対的生成モデルとは言うものの、gとdを同時に鍛えるのではなく、交互に鍛えるんですね。ですから、実装がカンタンに済むのです。

 説明が長くなってしまったので、コードの解説は次回行いたいと思います。お読み頂き、ありがとうございました。