敵対的生成ネットワーク【GAN】とは何か
前回書いた高階客観性理論の記事 における「裁判官AI」を学部ゼミで発表したら、
先生に「このモデルはGANの拡張というより遺伝的アルゴリズムなんじゃないの?」というご指摘をいただいた。
この指摘の意味(何故、GANの拡張とは言えないのか)が捉えられなかったので、
GANの表面的なモデルだけでなく、その数学的な理論の裏付けも含めて勉強してみることにした。
1. 裁判官AIのモデル
裁判官AIとは、GANのモデルにおいて、識別器を2つに増やし、両者に対立概念を学習させることで、
生成器は「中立」を学習できるのではないかというものである。
2. GANの原典を読む
GANの原論文の式(1)を引用(※)する。
※表記方法を一部改変した。
生成器や識別器とは多層パーセプトロン(、つまりニューラルネットワークみたいなもの)で、(ここでは)人工知能の一種と考えてよい。
2-1. ミニマックス探索
式(1)の左辺は「を最大化させるがあって、さらにこのを最小化するがあるときの」ということである。
こういうのをミニマックス探索(minimax game)という。
wikipediaによれば「想定される最大の損害が最小になるように決断を行う戦略」のことで、囲碁などをコンピュータに思考させるアルゴリズムにも使われたりするようだ。
ではミニマックス探索が何故「GANの数式」となるのだろう。
識別器がを最大化し、生成器がを最小化することと、
GANが驚異的なまでに精巧な合成写真を生成できることの間にはいったいどのような関係があるのだろう。
この疑問を解く一つのカギとなるのが「ゼロサムゲーム」である。 [1]
ゼロサムゲームとは、二人でプレーするゲームで合って、相手のスコアと自分のスコアの和が常に0になるようなゲームのことだ。
自分のスコアが点だったとき、相手のスコアは確実に点なのである。
直感的に言い換えると、「自分がだけ得すること」と「相手がだけ損すること」は本質的に同じものであるというようなゲームのことである。
この考え方では、
の立場から見るととは「損」のことであり、
逆にの立場から見るととは「得」のことである。
図2-1-1. 識別器、生成器の選択、および価値関数
まず生成器の立場から見てみよう。
『識別器が損を最大化させてきたとき』、はその中でも最も損の小さい選択をする。
二重鍵括弧『』は、図2-1-2において赤枠で囲った部分に相当する。
図2-1-2. 識別器が価値関数を最大化するような選択をする様子
生成器は、赤枠の中から最小値を選ぶ。
つまり今回の場合は19となる。
このようにすることで、識別器と生成器は「フェアな勝負」を実現できる。
識別器は「個の数字からなるべく大きなものを1つ選ぶ」試行を回繰り返し、
この試行により得た個の数字を生成器に渡す。
そして生成器はその中からなるべく小さな数字を一つ選ぶ。
こうして個の数字の中から、大きすぎも小さすぎもしない数字を1個選ぶことができる。
これは僕の自己解釈も入っているが、とは識別器の「性能」を表している(※2)。
識別器の性能が高すぎれば生成器は学習機会を失い(「こんな感じだと騙せる」という経験が積めない)、精巧なフェイクは作れない。
しかし識別器の性能が低すぎても生成器は低レベルなフェイクで満足してしまう。やはり精巧なフェイクは作れない。
そこで「バランスの取れた」性能になってもらう必要があるのだが、単に識別器に手加減させるだけでは、フェイクの質はその手加減に依存してしまう。
だから手加減をさせるというよりは、「フェアな勝負」で両者本気で戦ってほしい。このような要請から、ミニマックス探索というアイデアが選ばれたのではないかと推測する。
※2: よく考えると、を性能と呼ぶより、「厳しさ」といった方が適切かもしれない。
『本物として扱うべきなのに、うっかりサンプルに含め忘れていた』ようなデータを確実に「フェイク」と言い切ってしまう識別器は、果たして本当に高性能なのだろうか。
言い換えれば、過学習の問題である。
2-2. ミニマックス探索の実装
式(1)の右辺について考えていこう。
まずというのは、がの分布に従う確率変数であるときの、式の期待値である。
したがって右辺第1項であるというのは「データの分布に従うベクトル」を識別器に入れたときの出力の期待値の対数である。
つまり、「本物のデータ」を識別器に入れたときの判定結果の期待値の対数である。
「本物」という判定を1で、「偽物」という判定を0で表す(※3)と、
である。
本物のデータに対して常に「本物」といえるようであれば減点なしだが、
逆に本物のデータを「偽物」とか言ってしまうような間違いが多ければ多いほど減点されていくというわけだ。
※3: このような「ラベル付け」はどうやら暗黙の了解のようで、論文では明示的に述べていはいなかった。
次に右辺第2項であるというのを考えよう。
まずはいったんはおいといてほしい。
生成器の出力したデータ、つまりフェイクデータを識別器に入れ、その判定結果を1から引き算したものに対して期待値を求め、その対数を求めている。
こうすると、識別器がフェイクに惑わされず「偽物」と判断したときより、減点は生じない。
逆に識別器がフェイクに騙され、「本物」と判断してしまったときはより、減点されてしまう。
ここでについて述べよう。
というのはノイズのことであり、生成器に入力するためのものである。
生成器は、ノイズの写像としてフェイクデータを生成するわけだ。
2-3. 潜在変数
では何故GANでは生成器にノイズを入力するのだろうか。
生成器は多層パーセプトロンなのだから、入力層の次元を0にし、専らバイアス成分を(最初の)隠れ層に渡せば入力一切無しでフェイクデータを作ることも可能なはずである。
この疑問に答えてくれる図が論文にあったので引用する。
黒の点線は本物データの分布、青の破線は識別器の境界線、緑の実線は生成器の作るフェイクデータの分布である。
識別器は、境界線と比較してデータと同じ側にあれば「本物」、違う側にあれば「偽物」と判定する。
また、からへの写像が図示されていて、の多く集まる部分ほどフェイクデータの分布が高くなる。
(同じことを表現しているので当然だ。)
(a)が初期状態とすると、(b)はが学習を行った時のものである。
図の場合、右側が部分的に正確に学習できている。
これに合わせて、が分布を再調整すると(c)のようになる。
これを繰り返すと、最終的に(d)のようになる。
「分布」という言葉からも分かる通り、本物データもフェイクデータも一つとは限らないのである。
本物データは複数あり、それらは何らかの意味での連続性をもってつながっているはずである。
その「つながり方をグラフで書くときに基準となる横軸」がやなのである。
そしての出力に「横軸的な広がり」を持たせる、つまり生成器に複数のフェイクデータを出力させるためには、何らかの入力が必要である。
そこで使われたのがノイズというわけである。