敵対的生成ネットワーク (GAN)

敵対的生成ネットワーク (Generative adversarial networks、GAN) は、合成画像を生成するために使用するディープニューラルネットワークの一種です。このアーキテクチャは、ジェネレーターとディスクリミネーターという 2 つのディープニューラルネットワークで構成されており、これらは互いに競い合って動作します (そのため「敵対的」と呼ばれます)。ジェネレーターは新しいデータインスタンスを生成し、ディスクリミネーターはデータの信頼性を評価して、データの各インスタンスが学習データセットから生じた「本物」か、ジェネレーターから生じた「偽物」かを判断します。

ディスクリミネーターが偽物であると判断できなくなるほど本物に近い合成データをジェネレーターが作成できるようになるまで、ジェネレーターとディスクリミネーターを敵対的に学習させます。学習が正常に完了すると、ジェネレーターによって生成されたデータを使って新しい合成データを作成し、他のディープニューラルネットワークへの入力として使用することができます。

GAN は、顔の合成画像、特定のスタイルの新しい歌、特殊なジャンルのテキストなど、あらゆるデータ型の新しいインスタンスの生成を学習できるという点で高い汎用性があります。

GAN の学習

紙幣の合成画像の作成例を用いて、GAN アーキテクチャの具体的な部分と機能を見ていきましょう。

  1. ノイズがジェネレーターに入力されます。ジェネレーターがまだ十分に学習されていないため、出力は最初のうちはノイズのように見えます。
  1. 学習データとジェネレーターの出力をディスクリミネーターに送り、本物の画像と偽物の画像を識別するために並行して学習を行います。開始時は、ディスクリミネーターの出力はあまり正確ではありませんが、ネットワークのこの部分も、学習を続けると時間の経過とともに精度が向上していきます。
  1. フィードバック: ディスクリミネーターの出力は、ジェネレーターとディスクリミネーターにフィードバックすることができます。ジェネレーターとディスクリミネーターは、この情報を使用してパラメーターを更新し、精度の向上を試みることができます。

ディスクリミネーターの目的は,真のデータセットからインスタンスを表示したときに,本物の画像を認識することです。この間、ジェネレーターは新しい合成画像を作成し、それをディスクリミネーターに渡します。ジェネレーターが作成する画像は偽物ですが、本物と識別されることを目指して画像が作成されます。ジェネレーターの目標は、合格となる画像を生成すること、つまり捕まらずに嘘をつき通すことです。ディスクリミネーターの目標は、ジェネレーターから届く画像を偽物であると識別することです。

MATLAB® および Deep Learning Toolbox™ では、自動微分、カスタム学習ループ、および重み共有を使用して GAN ネットワーク アーキテクチャを構築できます。

敵対的生成ネットワークの用途

手書き文字の生成: 画像の例と同様に、GAN を使用して合成データを作成します。これを、正確なディープラーニングモデルの学習を行うためにより多くのデータ例を必要とする、より小さなデータセットの補完に使用することができます。一例に、手書き文字の検出があります。手書き文字用にディープニューラルネットワークの学習を行うには、何千もの学習データのサンプルが必要ですが、このデータを手動で収集するには時間がかかります。

 

GAN を使用した合成手書き文字生成。

シーン生成: 元の GAN はラベルが存在することを前提としていないのに対し、条件付き GAN はラベルを活用する特定の種類の GANです。条件付き GAN は、シーン生成など、情報に対してある一定の秩序が必要な場面で使用できます。自動運転のシーン生成を例にご説明します。道路や歩道は、建物や空より下に位置している必要があります。この例で作成した合成画像のうち、道路の位置に接していないものは、ただちに偽物と判断され、自動運転アプリケーションでは使用不能となります。

条件付き GAN を使用した画像対画像変換 (pix2pix)。

オーディオと音声への応用: GAN は、テキストから音声への合成、音声変換、音声強調などにも使用されています。GAN は、単に既存の信号を増強するだけでなく、新しいサンプルを生成することができるため、従来のオーディオや音声用の実装と比べて大きな利点があります。GAN が音声合成に使われる一例としては、ドラムサウンドの合成版を作成することが挙げられます。音声合成のための敵対的生成ネットワーク (GAN) の学習

注: GAN は、様々な用途の新しい合成データの生成で威力を発揮しますが、多くの故障モードが発生する可能性があるため、正確な結果を得るのが困難なことがよくあります。MATLAB を使用すれば、GAN の学習の進捗状況を監視し、一般的な故障モードを特定することができます。