loss
loss
Samples
緑の領域 のサンプルは実際のものである可能性が高く、 紫の領域 のものは偽である可能性が高いです。
不透明度は密度を符号化します: 濃い紫は小さな領域により多くのサンプルがあることを意味します。
このサンプルは生成器の損失を減少させるために 右上に移動する必要があります。
多くの機械学習システムは、何らかの複雑な入力(例えば画像など)を見て、シンプルな出力(「猫」などのラベル)を生成します。対照的に、生成モデルの目標はその逆のようなものです:少量の入力(おそらくいくつかのランダムな数値)を受け取り、リアルに見える顔の画像のような複雑な出力を生成することです。敵対的生成ネットワーク(GAN)は、特に効果的な生成モデルの一種で、ほんの数年前に導入されたものですが、機械学習コミュニティで強い関心の対象となっています。
なぜリアルな画像を生成するシステムや、その他の種類のデータのもっともらしいシミュレーションが欲しいのか疑問に思うかもしれません。本質的な知的挑戦に加えて、これは驚くほど便利なツールであることが判明しており、芸術からぼやけた画像の鮮明化まで幅広い応用があります。
機械がゼロからリアルな画像を「作成する」というアイデアは魔法のように思えるかもしれませんが、GANは曖昧で一見不可能に思える目標を現実に変えるために2つの重要なトリックを使用します。
最初のアイデアは、GANに新しいものではありませんが、ランダム性を要素として使用することです。基本的なレベルでは、これは理にかなっています:実行するたびに同じ顔を生成するシステムを構築しても、あまり面白くないでしょう。しかし同様に重要なのは、確率の観点から考えることで、画像生成の問題を自然な数学的枠組みに変換することができるということです。一様にランダムに画像を選ぶことは望ましくありません。なぜなら、それは単にノイズを生成するだけだからです。代わりに、どの画像が顔である可能性が高く、どの画像がそうでないかについて、システムに学習させたいのです。数学的には、これは画像上の確率分布をモデル化すること、つまり、どの画像が顔である可能性が高く、どの画像がそうでないかを教えてくれる関数を意味します。このタイプの問題 -高次元空間上の関数をモデル化すること- は、まさにニューラルネットワークが得意とする種類のものです。
GANを定義する大きな洞察は、このモデリング問題を一種のコンテストとして設定することです。これが名前の「敵対的」な部分の由来です。重要なアイデアは、1つではなく、2つの競合するネットワークを構築することです:生成器と識別器です。生成器はランダムな合成出力(例えば、顔の画像)を作成しようとし、一方で識別器はこれらを実際の出力(例えば、有名人のデータベース)から区別しようとします。2つのネットワークが対戦することで、両方がどんどん良くなっていき、最終的にリアルな出力を生成する生成器ネットワークが得られることが期待されます。
まとめると:敵対的生成ネットワークは、特別な分布からサンプルを選ぶことを学習するニューラルネットワークであり(名前の「生成」部分)、競争を設定することによってこれを行います(したがって「敵対的」)。
GANは複雑な代物であり、可視化には多くのことが起こっています。基本的なアイデアは以下の通りです。
まず、リアルな画像生成のような複雑なものを可視化しているわけではありません。代わりに、2次元でのみ点の分布を学習するGANを示しています。このような単純なものは実用には適しませんが、システムの仕組みを理解するには有効です。一つには、普通の2次元(x,y)空間での確率分布は、高解像度画像の空間での分布よりもはるかに可視化しやすいからです。
上部では、GANが学習する確率分布を選択できます。これをデータサンプルのセットとして可視化します。一つを選択すると、2つの場所に表示されます:左側のモデル概観グラフビューに小さいバージョン、そして右側の重層分布ビューに大きいバージョンです。
GANがリアルなサンプルを生成する仕組みをより良く理解できるよう、2つのビューを設計しました:
(1) モデル概観グラフはGANのアーキテクチャ、その主要コンポーネントとそれらの接続方法を示し、また各コンポーネントによって生成された結果を可視化します;
(2) 重層分布ビューは、モデル概観グラフのコンポーネントの可視化を重ね合わせ、モデルを分析する際にコンポーネントの出力をより簡単に比較できるようにします。
GANモデルの訓練を開始するには、ツールバーの再生ボタン(
)をクリックしてください。選択した分布からの実際のサンプルに加えて、モデルによって生成された偽のサンプルも表示されます。偽のサンプルの位置は、訓練が進行するにつれて継続的に更新されます。完璧なGANは、その分布が実際のサンプルの分布と区別がつかない偽のサンプルを作成します。そうなると、重層分布ビューで、2つの分布がきれいに重なり合うのを見ることができます。
GAN内の生成器と識別器が小さなコンテストを行い、互いに競合し、偽のサンプルを実際のサンプルにより類似するように反復的に更新していることを思い出してください。GAN Labは彼らの間の相互作用を可視化します。
生成器。 先ほど説明したように、生成器はランダムな入力を合成出力に変換する関数です。GAN Labでは、ランダムな入力は(x, y)値を持つ2Dサンプル(一様分布またはガウス分布から抽出)であり、出力も2Dサンプルですが、異なる位置にマッピングされ、これが偽のサンプルとなります。このマッピングを可視化する一つの方法は多様体[Olah, 2014]を使用することです。入力空間は一様な正方格子として表現されます。関数が入力空間の位置を新しい位置にマッピングするとき、出力を可視化すると、不規則な四角形で構成される格子全体が、元の規則的な格子の歪んだバージョンのように見えます。各(歪んだ)セルの面積(または密度)が変化し、密度を不透明度として符号化するため、不透明度が高いほど、より小さな空間により多くのサンプルがあることを意味します。非常に細かい粒度の多様体は、偽のサンプルの可視化とほぼ同じに見えます。この可視化は、生成器がその出力を実際のサンプルの分布に似せるためのマッピング関数を学習する様子を示しています。
識別器。 生成器が偽のサンプルを作成する際、二項分類器である識別器は、それらを実際のサンプルから区別しようとします。GAN Labは、その決定境界を2Dヒートマップとして可視化します(TensorFlow Playgroundに類似)。格子セルの背景色は、分類器の結果の信頼度値を符号化します。濃い緑は、その領域のサンプルが実際のものである可能性が高いことを意味し、濃い紫は、偽のものである可能性が高いことを意味します。GANが最適解に近づくにつれて、ヒートマップ全体がより灰色になり、識別器がもはや偽の例を実際のものから簡単に区別できなくなることを示します。
GANでは、その2つのネットワークが反復的に自身を更新する際に、互いに影響し合います。GAN Labの素晴らしい用途は、その可視化を使用して、生成器がますますリアルな偽のサンプルを生成するために自身を改善するよう段階的に更新する方法を学習することです。生成器は識別器を欺こうとすることでこれを行います。識別器が偽のサンプルを実際のものとして分類するとき、生成器の損失値は減少します(識別器にとっては悪いが、生成器にとっては良い)。GAN Labは、生成器がその成功を達成するような偽のサンプルに対する勾配を(ピンクの線として)可視化します。
この方法で、生成器は、さらにリアルなサンプルを生成するよう段階的に改善されます。偽のサンプルが更新されると、識別器はそれに応じて更新され、その決定境界を微調整し、自身を欺こうとする次のバッチの偽のサンプルを待ちます。この反復的更新プロセスは、識別器が実際のサンプルと偽のサンプルを区別できなくなるまで続きます。
GAN Labには、対話的実験をサポートする多くの優れた機能があります。
GAN Labの機能を簡単に見るために、以下の動画をチェックしてください。
GAN LabはTensorFlow.jsを使用しています。これはブラウザ内GPU加速深層学習ライブラリです。 モデル訓練から可視化まで、すべてがJavaScriptで実装されています。GAN Labを実行するには、Chromeのようなウェブブラウザが必要なだけです。 私たちの実装アプローチは、深層学習のための対話的ツールへの人々のアクセスを大幅に広げます。 ソースコードは GitHubで利用可能です。
GAN Labは Minsuk Kahng、 Nikhil Thorat、 Polo Chau、 Fernanda 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 からのフィードバックに感謝します。
詳細については、 私たちの研究論文をご確認ください: