生成モデル「GAN」を簡単に紹介(夏季インターンシップ募集中)

 こんにちは!弊社は現在学生向けのインターンシップを募集してます。内容は最新の AI 技術を使って開発を行ってみよう!!といったものです。8/15 まで募集していますので学生の皆さまは奮って参加をお願いします!

gri.jp

 今回は、このインターンのテーマの一つである GAN (Generative Adversarial Networks: 敵対的生成ネットワーク)についてザックリ紹介します。

GAN でできること

 GAN は主に画像生成で有名になった生成モデルです。生成モデルは GAN の他にエンコーダーデコーダーを並べて変分ベイズ法によって誤差逆伝搬を可能にした VAE モデルがあります。しかし、VAE は損失に正則化項を加えたことにより、生成した画像がぼやけてしまうという欠点があります。一方で、GAN はシャープな画像が生成され、ディープラーニング界にブレイクスルーをもたらしました。
 そこから色々な派生が生まれて、ただ画像を生成するだけではなく、高解像度化・ドメイン変換・異常検知・画像再構築など多くのタスクをこなしてきました。例は以下の github になります。

github.com

GAN がやっていること

 GAN には生成器(Generator)と識別器(Discriminator)と呼ばれる二種類のモデルがあり、これらの二つのモデルが切磋琢磨しながら学習することで最終的に良質なデータを生み出す生成モデルになります。

Generator

f:id:gri-blog:20210726161452p:plain
Generator モデル
 Generator では一様ランダムに与えられたノイズを生成したいデータに変換します。ノイズは低次元のものを入れるので、アップサンプリングのニューラルネットワークになる場合が多いです。最終的にこのモデルを使用してデータを生成する形になります。

Discriminator

f:id:gri-blog:20210726161537p:plain
Discriminator モデル
 Discriminator ではデータが学習データであるか、Generator が生成したモデルであるかを判定します。モデルの構造は教師あり学習の分類で用いるようなニューラルネットワークと同じで、「本物か偽物か」を分けることになるので二値分類のモデルになります。

学習

Generator の学習

f:id:gri-blog:20210726170018p:plain
Generator の学習フロー
 Generator の目的は、学習データに限りなく似たデータを生成することです。そのために、ノイズから生成したデータが Discriminator によって「本物」と判定されるようにパラメータを最適化します。

Discriminator の学習

f:id:gri-blog:20210726165948p:plain
Discriminator の学習フロー
 Discriminator の目的は、本物と偽物を正しく判別することです。そのために、学習データは「本物」と判定されるように、Generator が生成したデータは「偽物」と判定するようにパラメータを最適化します。

収束条件

 一般的なディープラーニングでは損失が最小になるように最適化を行うため損失値が収束条件になったりしますが、 GAN では Discriminator の損失を Generator の学習では最大化するように、 Discriminator の学習では最小化するために学習を行うため収束条件としては使えません。では、どうなれば収束となるかというと、次の二つが挙げられます。

  • どのデータを入れても Discriminator が「本物」と判定する確率が 0.5 である
  • Generator が生成したデータが確かに学習に似ている

 同じようなことを言っているように見えますが、上の条件だけでは学習の途中である可能性があるので生成されたデータをしっかり見ることが大事です。

 そして、この状態になるまでには Discriminator の損失が振動する必要があります。この振動が起こっているときには Generator が Discriminator を騙すのに成功し、それを受けて Discriminator が Generator に騙されないようになることが繰り返されているので両モデルが成長している状態であるといえます。この関係が崩れてどちらかのモデルが強すぎてしまうと、学習が上手くいかなくなります(勾配消失やモード崩壊と言います)。このモデルの調整が難しく、この問題を解消するために色々な工夫がなされています(LSGAN, WGAN, α-GAN, etc...)。

 というわけで GAN の紹介でした。インターンのテーマは GAN に限らず他にも興味深いものもありますし、テーマの持ち込みも可ですので興味がある方は是非参加してみて下さい!

分析官 安井優平