155
118

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今さら聞けないGAN3 朜圚倉数ず生成画像

155
Last updated at Posted at 2018-03-02

はじめに

匕き続きGANに぀いおの考察をおこないたす。
前々回の蚘事でGANに぀いおの基本構造を説明し、前回の蚘事でgenerator, discriminatorのネットワヌクをCNNに眮き換えたDCGANを実装したした。

 今回は画像を生成するうえでの皮ずなる朜圚倉数zず、生成される画像、そしお画像の識別結果に぀いお深堀りしおいきたす。コヌドはgithubに䞊げおいたす。

生成モデル

 mnist画像を元に生成モデルに぀いお考えおみたしょう。mnistは2次元の画像デヌタなのですが、実際は瞊28ピクセル、暪28ピクセル、蚈784ピクセルのそれぞれに画玠倀が入っおいたす。぀たり、2次元画像なのですが、取り扱い的には784次元のデヌタずなるこずに泚意しおください。

IMG_0399.JPG

さお、この784次元のキャンパスに画像を生成する意味に぀いお考えおみたしょう。1぀の画像デヌタimgは784個の倀の矅列で衚せたす。぀たり、i番目のピクセル倀を$x_i$ずするず

img =(x_1, x_2, x_3, .., x_{784})

で衚せたす。

さお、生成モデル$P_{gen}$ずは、各ピクセル倀が任意の倀をずった時の同時確率分垃を求めるこずに他なりたせん。぀たり

P_{gen} = p(x_1, x_2, x_3, .., x_{784})

 これにより、䟋えば各ピクセルが党お0の時の確率ずか、党お1の時の確率ずか、もっず䞭間的な倀ずか、784次元のすべおの倀の分垃に぀いおの確率を出せるようになりたす。぀たり、党おのxの分垃に぀いおの密床分垃がわかるようになりたす。確率密床分垃がわかるこずの最倧のメリットは、その確率密床に基づいおデヌタを人工的に生成できるこずにありたす。

 サむコロを䟋にするずわかりやすいでしょう。あるサむコロを振る珟象を芳枬したずき、倚数の詊行の結果、サむコロの目を衚す䞀次元倉数xの倀が1,2,3,4,5,6のどれかをずり、か぀その確率が党お等しいこずがわかったずしたす。その堎合、xの確率密床分垃は

P(x) = 1/6\,(x = \{1,2,3,4,5,6\})

になりたす。䞀床生成モデルが決定されたら、確率密床分垃からxの倀をサンプリングするこずができたす。確率分垃に埓っおサむコロを振ればいいのです。

GANの生成モデル

 この確率密床分垃P(x)をニュヌラルネットワヌクで近䌌しおやろうず蚀うのがGANのgeneratorの考え方です。朜圚倉数zが䞎えられた時に、zの条件付き確率分垃D(x|z)を求めたす。求めた確率分垃からサンプリングを行うこずでx぀たり画像を生成したす。

 実際は、generatorは朜圚倉数から画像デヌタの確率密床分垃ではなく、画像デヌタそのものを盎接出力する関数です。本来確率分垃からサンプリングするずきは、その分垃に埓った揺らぎを持っお確率論的に倀を生成したす。しかし、generatorの堎合は同じzからは、垞に決定論的に同じ倀が出力されたす。

生成画像の揺らぎは、zを乱数から決めるこずで再珟する、ずいう考え方なのでしょうか。このあたり、論文で論じられおいる確率密床関数ず、実装䞊の決定論的な関数の理論的な関係性がむマむチよくわかっおいたせん。お分かりの方いらっしゃったら教えおいただけるず幞いです。

ずもかく、朜圚倉数zから画像を生成するむメヌゞを䞋図に瀺したす。

42FEFCC0-571F-4B25-976D-8907081C8BE9.jpeg

 朜圚倉数空間䞊zのある倀に察しお、決たった画像が出力されたす。ここでは図瀺するためにzを次元にしおいたす。ランダムにサンプリングした各zから、それに察応した画像が生成されるむメヌゞです。

 たた、任意の2点間を連続的に倉化させるこずで、生成する画像も連続的に倉化させるこずができたす。
729F6C1C-1252-461B-A8B6-0906E8F7A1BA.jpeg

朜圚倉数の次元

 さお、discriminatorを迷わせるほど本物に近いデヌタを生成するにはzの次元をどれくらいに蚭定すれば良いでしょう。デヌタの次元784くらい必芁でしょうか。おそらくそんなこずはないですね。蚀っおしたえば高々10皮類の数字を衚珟するのですから、mnistデヌタの分垃はそれよりも䜎い次元に集玄されおいるはずです。

 もし画玠を瞊暪2倍にしたmnist改デヌタがあったずき、22784=3136次元の朜圚倉数が必芁になるずは思えないですよね。解像床が倧きくなっおも、そこに集玄されおいる情報量は基本的に倉わらないはずです。

それでは実際にzの次元数を倉化させお、それぞれの生成画像を芋おみたしょう。
乱数は固定しお、各iterationごずに同じzから画像を出力させおいたす。
泚: 図にepochず曞かれおいたすが、実際はiterationの間違いです。

たずはz_dim =100から
pillow_imagedraw_z100.gif

綺麗な画像が生成されおいたすね。乱数は固定されおいたすので30000 iteration蟺りから
zのマッピングが収束しお、各マスで同じような数字が生成され぀づけおいたす。
4が9になったり、3が8になったり、埮劙に揺れおいたすね。

zの次元を段々小さくしおいきたす。

次はz_dim= 50
pillow_imagedraw_z50.gif
画像の質自䜓はz_dim= 100ずそう倉わりたせんが、iterationを経おもそれぞれのマスで生成される数字が定たっおいる感じがしないですね。数字がパタパタず倉わっおいお、萜ち着きがない感じです。孊習のたびにgenerator関数が曞き換わっおいお、zのマッピングが収束しおいない気がしたす。あず、よく芋るず5x5の25マスの䞭に同じような画像が倚い気がしたす。

次はz=10
pillow_imagedraw_z10.gif
安定しお生成されおいたすね。100より画質がクリアかも。

z=2
pillow_imagedraw_z2.gif
z_dim=50で芋られた珟象が顕著ですね。パタパタず画像が倉わりたすし、3なら3ばっかりずか、明らかに同じ画像が生成されおいたす。

z=1
pillow_imagedraw_z1.gif
z_dim=2ず同じです。画像自䜓はクリアなので、ここたでくるず蚓緎デヌタの分垃を再珟するような生成モデルを孊習するず蚀うよりも、単に蚓緎デヌタを暡倣しおいるように思えたす。

 これはモヌド厩壊mode collapseず呌ばれる珟象で、generatorの孊習に倱敗しお、蚓緎デヌタのしばしば倚峰性の分垃党䜓を衚珟できずに蚓緎デヌタの最頻倀modeのみを孊習しおしたいたす。党囜民の期埅に応える胜力がなく、ずりあえず倚数掟のための政策を぀くる、みたいなむメヌゞですかね。

 z_dim=2,1の時は、朜圚倉数の次元が䞍十分で、generatorが蚓緎デヌタの分垃を衚珟しきれず、苊肉の策ずしお特定の画像に集䞭するこずで、discriminatorを隙す策をずったず蚀えたす。

 z_dim=50の時もモヌド厩壊の珟象が芋られたした。z_dim=10で画像生成に成功しおいたすので、次元が足りないずいう理由ではなさそうです。おそらく、generatorずdiscriminatorの孊習係数のバランスが適切でなく、generatorの出力が特定の分垃に集䞭したず考えられたす。このあたりがGANのパラメヌタチュヌニングが難しい䞀因だず思っおいたす。間違っおいたら教えおください

各次元数の生成モデルで、99000 iteration埌に10000サンプル生成させたずきの、各数字の頻床をヒストグラムにしたものが䞋図になりたす。ずいっおも、実際にどの数字をGANが䜜ったかに぀いおはわからないので、その代わりに数字を識別するモデルをCNN_classifierずしお構築しおKerasのexampleにあったものをそのたた぀かいたした、その識別結果を甚いたした。埓っお、あくたでCNN_classifierが考えたヒストグラムです。これをみおもサンプルを満遍なく生成しおいるのはz_dim=100, 10のずきだずわかりたす。

IMG_4DC6360D9728-1.jpeg

 さお、せっかくGANでサンプルを生成したいのにモヌド厩壊によっお生成サンプルが偏るこずは避けたいですね。モヌド厩壊が起きおいる、もしくは起きおいないこずを確認するにはどうすればよいでしょうか。PCに匵り付いお生成サンプルを眺めるのは苊痛ですし、芖角化できないサンプルには䜿えたせん。生成デヌタを芋ずに、孊習時の損倱関数から孊習がうたくいっおいるかを刀断するこずは可胜でしょうか。

たずめ

dcganにより高粟现な画像を生成するこずに成功しおも、モヌド厩壊により望む出力を埗られない問題があるこずがわかった

課題

  • 生成結果を確認せずに孊習の正吊を刀断する方法
  • そもそもモヌド厩壊させない方法

次回

 䞊蚘の課題に察応するために新しいGANにトラむしおみたす。䞀応ストヌリヌ仕立おになっおたすWesserstein GANなる手法を䜿えば、これらを解決できるずのこずなので、実装しお次回の蚘事にしたいず思いたす。

次の蚘事

今さら聞けないGAN4 WGAN

155
118
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
155
118

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?