とある日の友人との会話
友人「GANの生成画像って本当に現実世界に存在しないの?」
私 「そうだよ。そもそも生成画像ってのは、ネットワークの構造からして~(略)」
友人「わかった。でも、学習画像と生成画像を全部見比べたわけじゃないんでしょ?本当に存在しないって確かめたの?」
私 「いや、そこまではしてないけど、、」
友人「確かめてみるべきだよね?」
私 「えっ、、いや、、その、、」
友人「確かめてみたいよね??(圧)」
私 「あっ、、う、、うん?」
友人「よし、やってみて!!」
sodaエンジニアの國田です!
冒頭の会話の通り、今回は難題を押し付けられてしまいました、、
確かに、GANの生成画像で顔画像なんかの例でみると、「なんとなく、この顔は学習画像には含まれていなかった気がするなぁ・・」というレベルでしか確認していません。
それをチェックするにも、何千枚、何万枚という学習に使った顔画像全て覚えていなくてはできないでしょうから、現実的ではないですよね・・。
これが顔画像でなく、既存のキャラクター画像(例えばポケモンとか)だったら少しは分かり易くなるのかな、とも思います・・。
とは言え、キャラクターの生成画像を見ながら「これは存在しないキャラだから、GANはきちんと存在しない画像を作り出しているでしょ?」という説明は万能ではないでしょう。
(キャラクターを全て把握していない方には分かりませんし、世の中には、ピカチュウと似たキャラクターも結構いますしね。)
でも、「存在する/しない」を直感的に理解できるものなんて、この世に存在するのでしょうか?
風景画像も抽象的過ぎてダメでしょうし、花や動物でもカテゴリーが広すぎて、生成物が現実に存在しないかなんて判断つきません。
あぁ、私の力では万人を説得させられるような説明はできないのでしょうか?
諦めかけたその時、突如電撃が走りました!
そうだ!あるじゃないか!日本人なら誰でも真贋判定ができると言えるものが・・!
さあ、実験を始めようか
日本人の誰もが真贋判定ができるもの・・それはズバリ、漢字です!
GANを使って漢字を生成させてしまえば、生成画像の中に知らない漢字があっても、すぐ目に付く筈。
ではでは、善は急げでやってみましょう!
今回、10,314字分の漢字画像(*1)を使い、StyleGAN2で学習させてみました。
以下がGANで生成した漢字です。見事に見たことない漢字だらけですよね?
もう少し詳細に見ていきましょう。独断と偏見で、生成した漢字を分類してみました!
①ありそうな漢字
実際に存在している漢字と殆ど似ているものもありますが、存在しそうで存在しない、でも言われてみればちょっとだけ存在しそうな漢字たちです。
②グレーゾーン
実際の漢字と比較すると線が1本多かったり、ちょっと飛び出していたり、妙な斜め線が入っていたりする漢字たちです。
③これは漢字じゃない
完全に主観ですが、「いやいや、こんな漢字ないでしょー」と思った漢字たちです。
考察と追加実験
今回使ったStyleGAN2というGANのモデルは、学習の際に「漢字とは、こういう特徴を持っているものだ」という、いわゆる「漢字の平均像」的なものを、習得してくれたと言えます。
(これを難しい言葉で言いますと「漢字の潜在空間を学習した」となります。)
モデルが漢字の平均像を理解したからこそ、「存在していそうで、実際には存在しない漢字」を生成することができたのですが、ではその「平均像」って一体何なのでしょうか?
それを確認するためにちょっとした実験を行ってみたいと思います。
実は、StyleGAN2には画像を生成する際に、この「平均像」からの距離を決めるパラメータが存在します。
それを少しずつ遠くにずらし、gif画像にして変化を辿ってみましょう!
以下が作成したgifです。
まず平均像からの距離を0に設定した文字を16個用意し、それぞれ異なる方向にパラメータを遠ざけてみました。
gifのスタート時に見えるのが、平均像からの距離を0に設定した文字です。
全てりっしん偏に「東」っぽい漢字になっていることが見てとれると思います。この文字こそが、まさしくGANが学習した平均像そのものと言えるでしょう。
さて、平均からパラメータをずらしていくことで、それぞれが様々な漢字へと変化していく姿が観察できます。最初は比較的シンプルな漢字が並びますが、徐々に複雑な形になったり、斜めの線が追加されたりと「漢字っぽさ」が無くなって、あり得ない漢字が量産されていくのが、なんとなく分かるかと思います。
ただ、平均から遠ざけた方向による違いか、gifループの最後の右下の文字(足偏に「童」)なんかは普通にありそうな漢字が混ざっていたりします笑
本件のGANの生成モデルが習得した平均像の中では「漢字っぽくない」ということなのでしょう。そういう意味では、このモデルでは「踵」とかも平均から外れた漢字と見做されるかも知れません。
以上、実験により、「GANは存在しない漢字を作り出していること」「平均像を学習し、それから遠ざけることで、漢字という概念から遠ざかっていっていること」がわかりました。
あなたも「GANは存在しない画像を作り出しているんだ!」と強く実感できたのではないでしょうか?
もし身の回りにGANに疑いを持つ不届き者がいたら、ぜひこの記事を紹介してあげてください。
おまけ
今回のGANの学習過程の生成画像が面白かったので、いくつか掲載しておきたいと思います。
生成器「適当に線引いておけば、識別器を騙せると思っていた時期が僕にもありました。」
ではまた!