二郎系GANは富山ブラックラーメンの夢を見るか
なぞのまえがき
タイトルの旧題は「パターンの外側にあるパターン もしくはスクリプトの外側にあるスクリプト」であった。ブログを書きつつ新しいタイトルが出てきたので、そっちに切り替えた。 更に前後半に分けるという長いポストになってしまった。
生成系ネットワークの面白さ
近年(といってももう2~3年前くらい)から注目されている深層学習の研究にGANというものがある。GANとは、Generative Adversarial Networkの頭文字をとったものであり、直訳すると「敵対的生成ネットワーク」である。「生成」というからには、なにか生成するのだろうというのが容易に推測されるが、この生成が生半可なレベルではない。近年の深層学習系の国際会議ではGANの投稿が多い。
注意:この投稿ではGANの詳しい説明はしません。というか、いろんなサイトがGANの説明していますからね。今更私が説明しても…(いや、説明しないとお前理解しているんか本当にということになりかねない・・・汗どうすればいいんだ汗とりあえず、GANのおすすめサイトを提示しますので許してください。)
この図をみてもわかるようにGANの亜種というかGANをベースにした研究は山程されている。(ちなみに図は以下のサイトからの引用である。ライナー?これライナーだよね・・・汗。頼むライナーであってくれ。)
そんなGANZOOにとんでもないものが現れた。昨年末、研究界隈突如に現れた最新のGAN「Style-GAN*1」が蓋を開けてみたらとんでもないGANであった。このStyle-GANでは生成方法に少しトリッキーな方法を利用している。GANはノイズ(だいたい正規乱数だったりするわけだが)から画像を生成するが、Style-GANではノイズに加えて、Styleと呼ばれる生成画像を制御する情報を加える。
このトリックにより、存在しそうであるが、全く新しい画像を生成することが可能になった。(GANそのものでも「ありそうであるが、全く新しい画像を生成することは可能であったが、このStyle-GANはその制御を細かくすることが可能である。)
Style-GANを使った様々な生成が試みられている。Twitterでは様々な生成が試みられている。
StyleGANのアニメキャラクター生成.すごい pic.twitter.com/ALd675mjLL
— Ryobot | りょぼっと (@_Ryobot) 2019年2月12日
約9万枚のラーメン二郎画像で StyleGAN を試しました。
— Kenji Doi (@knjcode) 2019年3月5日
公式の実装を使って、最大解像度を512x512pxに下げて学習しています。
まだ学習途中(50%ぐらい)ですが、以前のPGGANよりさらにリアルになっているように思います。#ラーメン二郎 #GAN pic.twitter.com/HWZzWIOn9a
これらの画像は「いままで存在したことがない」画像であり、新しい画像である。
このように生成をすることで、不足している学習データの水増しなどにも利用することもできる。近年の機械学習ではデータの量が重要視されており、いかんせんデータ不足で泣くこともある。そういうときに生成系の「今までのデータには存在したことがないけれども、データの分布上に存在する新しい存在を創る」という能力は貴重だろう。
また、GANは画像だけでなく音楽や文章の生成にも利用されている。
さてここで生成系、特にGANの説明を終えることとする。
GANがすごい、じゃあ何もいうことはないのか。いやそんなことはない。GAN生成の魅力はは「あり得たかもしれない画像を生成する」能力である。しかし、人工知能研究者はその「あり得たかも」しれないという点に敏感に反応しなければいけない。
「あり得たかもしれない」新しいデータ集合{Xi}
生成系で「あり得たかも」しれないデータは、学習するデータに存在するパターンの内側だろうか、それとも外側だろうか。学習データのパターンの内側、外側という言葉が出てきた。少し分かりづらいので、ある例えをしてみよう。
二郎系StyleGANは、あり得たかもしれない二郎系ラーメンを生成する。
一方、二郎系ラーメンの写真を眺めながらふと私達は思う。「そういえば富山ブラックラーメンなんてのもあったよな。汁がメッチャクチャ真っ黒いやつ。あれ美味しいのかね」
二郎系画像を眺めながら二郎系以外のラーメンの存在に思いをはせる。画像では決して見ることのできない富山ブラックラーメンを。
ここで確認したい。私達と機械は同じ「二郎系ラーメンのデータ」を食っているのだ。
GANはーーー二郎系ラーメンのデータを沢山食わせたGANはーーー二郎系っぽいラーメンを生成している。ところが人間は二郎系ラーメンから二郎系ラーメン以外を生成している。「あり得たかもしれない」の質が異なるのだ。
データの内側と外側。それは、食わせたデータに依存する。データの分布に存在するのが内側。存在しないのは外側になる。GANは食わせたデータの内側を旅するのだ。「あり得たかもしれない」新しいデータ集合は、データの内側ある未知なる空白地帯を旅して生成している。
内側にある未知なる空間を探索するGAN。GANの生成は学習データの内側である。学習データの内側…学習したデータと同じ分布になるように学習を行う生成系であるからこそ、我々に未知なる内側を見せてくれる*2。しかし、生成系ネットワークはその外側にある存在を映し出すことはできるのだろうか。
一方、私達はパターンの外側にあるパターンを認識することができる。それは二郎系ラーメンのことを想像しつつ同時に別のラーメンを想像することからも簡単にイメージができる。しかしそれはデータ内部には記述されていない。二郎系にラーメンに富山ブラックラーメンの要素はラーメンというコンセプト以外存在しないのだ。にもかかわらず、二郎系以外にも家系でも富山ブラックでもラーメンのパターンをいくつも思いつくのだ。
それは多分、我々はデータの内部の空間ではなく、データの外側にあるはずのパターンを探し続ける存在だからだ。それもどこまでも。しかし、おそらく秩序を持って(これは後述する)。
パターンの外側と内側の間で
生成系の話を少し特徴量空間で考えるために、トリッキーかもしれないが、単純な線形分類問題を考えてみよう。*3
適切な画像圧縮をすることができた結果、研究者は画像データを潜在空間に押し込めることができた。この潜在空間の情報を利用して、2つのクラス分類をしようとする。なんのことはない、このクラス-1とクラス1の間に線を引けば良い。単純な線形分類だ。(ニューラルネットワークだと、このへんの線の引き方を巡って一悶着している。 Adversarial exampleとかその一つだと思うし、これは今後扱いたいテーマだけど今回はそっと閉じておこう。)
このクラス1をMNIST*4データの7として、クラス-1をMNISTデータの3としておこう。なるほどデータの中心は、だれからみても7だし、片方は3であろう。ではここで、潜在空間から無理やり頑張って、我々の目に見える形でデータを復元しよう。潜在空間の変数からデータを復元するのだ。*5。
では、データ分布中心からどんどん端っこの方へ歩いていこうとしよう。潜在空間を散歩していくのだ。どんな画像が現れるだろうか。「7」のデータ分布の中心から歩いていこう。
線形分類上そこは、機械にとっては「クラス1」、「7」を指し示している。はじめの方は「7」が見て取れるだろう。どんどんデータ分布からはなれてみよう。すると、我々の潜在空間を通して生成された画像はもはや「7」には見えない。ぼやけてしまってなんの図形になるか認識できなくなっている。しかし、機械は言い張るのだ「ここは7の領域なのだ」。
一度線形分離で定めたクラスの分離領域以外には、境界が存在しない。いくらデータ分布から外れていようが、機械はそこで外側や内側を決めることができない。特徴量空間の端っこには学習したデータは存在しない。それなのに「外側」という認識ができないのだ。データの外側という概念がそもそも存在し得ないのだ。
生成系のシステムで同じように考えてみよう。
二郎系GANは二郎系のデータの内部では流暢だ。しかしGANはその特性上、学習したデータ分布がうまく決定できず、データの外側の画像をふと生成することがある。その瞬間、二郎系のデータから学習したにもかかわらず、全く意味のない画像を生成してしまう。富山ブラックラーメンや家系ラーメンは出てこない。ただそこにあるのは、ランダムノイズでラーメンかどうか我々には認識できない画像が生成される。*6
データの外。それは学習データとは全く関係がない、全く秩序を立てることができないノイズでしかない。機械にとってはデータの外側は意味を持たない、パターンも存在しない無秩序の存在でしかない。ラーメンは現れないのだ。
しかし人間は、おそらくパターンの外部にパターンを見出すことができる。もしくは感じることができる。私達は「8」や「2」を想像できるかもしれない、もしくは新しいなにかを思いつく領域である。それこそ富山ブラックであり家系ラーメンなのかもしれない。しかもしれは、意味のない画像ではなく、新しいラーメンを生成しているのだ。(もしかして創発なのかもしれない)
人間はデータの外側にあり得たかもしれないパターンを(もしくは秩序を)自分勝手に生み出しているのだ。それが真のデータと異なっていても、予想としてそれを想像したり妄想したりする。
この学習データのパターンの外側にあるパターンを生成する我々と、そうでない生成系。データの外側に着目すると、人間と人工知能の違いは明確になる。
後編では、更にそのデータの外側に目を向けて、どうすれば、人間と同じように人工知能がデータの向こう側を感じるようになるのかを考えていきたい。
なお、このポストは次の本から多大なる影響を受けている。
ご意見やご感想がありましたらコメントをぜひよろしくお願いします。また間違いの訂正もぜひよろしくお願いします。
2019/03/22 一部文章修正(GANの生成の問題点のあたりで変ないいまわしがあったため)
*1:
などの説明をどうぞ。また論文は
[1812.04948] A Style-Based Generator Architecture for Generative Adversarial Networks
こちらから。
*2:もし生成系が分布に依存しない新しい画像を生成してしまったら評価のしようが無い
*3:線形分類問題の図は以下のサイトから引用しました。https://datachemeng.com/lineardiscriminantanalysis/
*4:MNIST(Mixed National Institute of Standards and Technology database)とは、手書き数字画像60,000枚と、テスト画像10,000枚を集めた、画像データセット。https://udemy.benesse.co.jp/ai/mnist.html より。
*5:GANのことをギャンギャン言いながら、この生成方法はVAEではないか。VAEの生成についてはこちらから
*6:特に初期のGANでは、そういうことがあった。DCGANではなかなか生成されず、おそらくデータの分布の外側へ行ってしまったようなものが生成されてしまう。
画像は以下のサイトから引用しました