ブラウザで敵対的生成ネットワーク(GAN)を体験しよう!
Loading...
It may take a few tens of seconds.

GANとは何か?

多くの機械学習システムは、何らかの複雑な入力(例えば画像など)を見て、シンプルな出力(「猫」などのラベル)を生成します。対照的に、生成モデルの目標はその逆のようなものです:少量の入力(おそらくいくつかのランダムな数値)を受け取り、リアルに見える顔の画像のような複雑な出力を生成することです。敵対的生成ネットワーク(GAN)は、特に効果的な生成モデルの一種で、ほんの数年前に導入されたものですが、機械学習コミュニティで強い関心の対象となっています。

なぜリアルな画像を生成するシステムや、その他の種類のデータのもっともらしいシミュレーションが欲しいのか疑問に思うかもしれません。本質的な知的挑戦に加えて、これは驚くほど便利なツールであることが判明しており、芸術からぼやけた画像の鮮明化まで幅広い応用があります。

GANはどのように動作するのか?

機械がゼロからリアルな画像を「作成する」というアイデアは魔法のように思えるかもしれませんが、GANは曖昧で一見不可能に思える目標を現実に変えるために2つの重要なトリックを使用します。

最初のアイデアは、GANに新しいものではありませんが、ランダム性を要素として使用することです。基本的なレベルでは、これは理にかなっています:実行するたびに同じ顔を生成するシステムを構築しても、あまり面白くないでしょう。しかし同様に重要なのは、確率の観点から考えることで、画像生成の問題を自然な数学的枠組みに変換することができるということです。一様にランダムに画像を選ぶことは望ましくありません。なぜなら、それは単にノイズを生成するだけだからです。代わりに、どの画像が顔である可能性が高く、どの画像がそうでないかについて、システムに学習させたいのです。数学的には、これは画像上の確率分布をモデル化すること、つまり、どの画像が顔である可能性が高く、どの画像がそうでないかを教えてくれる関数を意味します。このタイプの問題 -高次元空間上の関数をモデル化すること- は、まさにニューラルネットワークが得意とする種類のものです。

GANを定義する大きな洞察は、このモデリング問題を一種のコンテストとして設定することです。これが名前の「敵対的」な部分の由来です。重要なアイデアは、1つではなく、2つの競合するネットワークを構築することです:生成器識別器です。生成器はランダムな合成出力(例えば、顔の画像)を作成しようとし、一方で識別器はこれらを実際の出力(例えば、有名人のデータベース)から区別しようとします。2つのネットワークが対戦することで、両方がどんどん良くなっていき、最終的にリアルな出力を生成する生成器ネットワークが得られることが期待されます。

まとめると:敵対的生成ネットワークは、特別な分布からサンプルを選ぶことを学習するニューラルネットワークであり(名前の「生成」部分)、競争を設定することによってこれを行います(したがって「敵対的」)。

可視化では何が起こっているのか?

GANは複雑な代物であり、可視化には多くのことが起こっています。基本的なアイデアは以下の通りです。

まず、リアルな画像生成のような複雑なものを可視化しているわけではありません。代わりに、2次元でのみ点の分布を学習するGANを示しています。このような単純なものは実用には適しませんが、システムの仕組みを理解するには有効です。一つには、普通の2次元(x,y)空間での確率分布は、高解像度画像の空間での分布よりもはるかに可視化しやすいからです。

データ分布を選択してください。

上部では、GANが学習する確率分布を選択できます。これをデータサンプルのセットとして可視化します。一つを選択すると、2つの場所に表示されます:左側のモデル概観グラフビューに小さいバージョン、そして右側の重層分布ビューに大きいバージョンです。

図1. 選択されたデータ分布は2つの場所に示されています。

GANがリアルなサンプルを生成する仕組みをより良く理解できるよう、2つのビューを設計しました:
(1) モデル概観グラフはGANのアーキテクチャ、その主要コンポーネントとそれらの接続方法を示し、また各コンポーネントによって生成された結果を可視化します;
(2) 重層分布ビューは、モデル概観グラフのコンポーネントの可視化を重ね合わせ、モデルを分析する際にコンポーネントの出力をより簡単に比較できるようにします。

訓練を開始しましょう。

GANモデルの訓練を開始するには、ツールバーの再生ボタン()をクリックしてください。選択した分布からの実際のサンプルに加えて、モデルによって生成された偽のサンプルも表示されます。偽のサンプルの位置は、訓練が進行するにつれて継続的に更新されます。完璧なGANは、その分布が実際のサンプルの分布と区別がつかない偽のサンプルを作成します。そうなると、重層分布ビューで、2つの分布がきれいに重なり合うのを見ることができます。

図2. 偽のサンプルの位置は訓練が進行するにつれて継続的に更新されます。そして、実際のサンプルと偽のサンプルの分布がきれいに重なり合います。

生成器と識別器の可視化。

GAN内の生成器識別器が小さなコンテストを行い、互いに競合し、偽のサンプル実際のサンプルにより類似するように反復的に更新していることを思い出してください。GAN Labは彼らの間の相互作用を可視化します。

生成器。 先ほど説明したように、生成器はランダムな入力を合成出力に変換する関数です。GAN Labでは、ランダムな入力は(x, y)値を持つ2Dサンプル(一様分布またはガウス分布から抽出)であり、出力も2Dサンプルですが、異なる位置にマッピングされ、これが偽のサンプルとなります。このマッピングを可視化する一つの方法は多様体[Olah, 2014]を使用することです。入力空間は一様な正方格子として表現されます。関数が入力空間の位置を新しい位置にマッピングするとき、出力を可視化すると、不規則な四角形で構成される格子全体が、元の規則的な格子の歪んだバージョンのように見えます。各(歪んだ)セルの面積(または密度)が変化し、密度を不透明度として符号化するため、不透明度が高いほど、より小さな空間により多くのサンプルがあることを意味します。非常に細かい粒度の多様体は、偽のサンプルの可視化とほぼ同じに見えます。この可視化は、生成器がその出力を実際のサンプルの分布に似せるためのマッピング関数を学習する様子を示しています。

図3. 生成器のデータ変換は多様体として可視化され、入力ノイズ(最も左)を偽のサンプル(最も右)に変換します。

識別器。 生成器が偽のサンプルを作成する際、二項分類器である識別器は、それらを実際のサンプルから区別しようとします。GAN Labは、その決定境界を2Dヒートマップとして可視化します(TensorFlow Playgroundに類似)。格子セルの背景色は、分類器の結果の信頼度値を符号化します。濃い緑は、その領域のサンプルが実際のものである可能性が高いことを意味し、濃い紫は、偽のものである可能性が高いことを意味します。GANが最適解に近づくにつれて、ヒートマップ全体がより灰色になり、識別器がもはや偽の例を実際のものから簡単に区別できなくなることを示します。

図4. 識別器の性能は2Dヒートマップを通して解釈できます。ここでは、ほとんどの実際のサンプルが分類表面の緑の領域にあり(偽のサンプルは紫の領域にある)ため、識別器は良好に機能しています。

生成器と識別器間の相互作用の理解。

GANでは、その2つのネットワークが反復的に自身を更新する際に、互いに影響し合います。GAN Labの素晴らしい用途は、その可視化を使用して、生成器がますますリアルな偽のサンプルを生成するために自身を改善するよう段階的に更新する方法を学習することです。生成器は識別器を欺こうとすることでこれを行います。識別器が偽のサンプル実際のものとして分類するとき、生成器の損失値は減少します(識別器にとっては悪いが、生成器にとっては良い)。GAN Labは、生成器がその成功を達成するような偽のサンプルに対する勾配を(ピンクの線として)可視化します。

図5. 偽のサンプルの移動方向は、それらのサンプルの現在の位置と識別器の現在の分類表面(背景色によって可視化)に基づく生成器の勾配(ピンクの線)によって示されます。

この方法で、生成器は、さらにリアルなサンプルを生成するよう段階的に改善されます。偽のサンプルが更新されると、識別器はそれに応じて更新され、その決定境界を微調整し、自身を欺こうとする次のバッチの偽のサンプルを待ちます。この反復的更新プロセスは、識別器が実際のサンプルと偽のサンプルを区別できなくなるまで続きます。

対話的機能で遊ぶ。

GAN Labには、対話的実験をサポートする多くの優れた機能があります。

対話的ハイパーパラメータ調整
編集アイコン()をクリックして個別のハイパーパラメータを表示し、訓練中にリアルタイムで編集してください。
ユーザー定義データ分布
私たちが選択した分布が気に入らない場合は、データ分布リストの最後にあるアイコン()をクリックして、独自の分布を描くことができます。
スローモーションモード
アニメーションを見失いましたか?スローモーションアイコン()をクリックしてスローモードに入ることで、速度を落とすことができます。 この動画をチェック
手動ステップバイステップ実行
より細かく制御したい場合は、アイコン()をクリックして、個々の反復ステップを手動で段階的に訓練することができます。 この動画をチェック

GAN Labの機能を簡単に見るために、以下の動画をチェックしてください。

どのように実装されているのか?

GAN LabはTensorFlow.jsを使用しています。これはブラウザ内GPU加速深層学習ライブラリです。 モデル訓練から可視化まで、すべてがJavaScriptで実装されています。GAN Labを実行するには、Chromeのようなウェブブラウザが必要なだけです。 私たちの実装アプローチは、深層学習のための対話的ツールへの人々のアクセスを大幅に広げます。 ソースコードは GitHubで利用可能です。

誰がGAN Labを開発したのか?

GAN Labは Minsuk KahngNikhil ThoratPolo ChauFernanda Viégas、および Martin Wattenbergによって作成されました。 これは、Georgia TechとGoogle Brain/PAIR間の研究協力の結果でした。 また、Shan CarterとDaniel Smilkov、 Google Big Pictureチーム Google People + AI Research (PAIR)、および Georgia Tech Visualization Lab からのフィードバックに感謝します。

詳細については、 私たちの研究論文をご確認ください:

Minsuk Kahng, Nikhil Thorat, Polo Chau, Fernanda Viégas, and Martin Wattenberg. "GAN Lab: 対話的視覚実験を用いた複雑な深層生成モデルの理解" IEEE Transactions on Visualization and Computer Graphics, 25(1) (VAST 2018), Jan. 2019.