GAN の生成部分は、識別器からのフィードバックを組み込むことで、偽のデータの作成を学習します。ディスкриминエータが出力を「本物」として分類するように学習します。
ジェネレータのトレーニングでは、弁別子のトレーニングよりもジェネレータと弁別子の間の統合が緊密にする必要があります。生成器をトレーニングする GAN の部分には、次のものが含まれます。
- ランダム入力
- 生成ネットワーク。ランダムな入力をデータ インスタンスに変換します。
- 生成されたデータを分類する識別ネットワーク
- 判別子出力
- 生成損失。ディスкриминエータを欺けなかった場合に生成機にペナルティを科します。
図 1: 生成モデルのトレーニングでの誤差逆伝播。
ランダム入力
ニューラル ネットワークにはなんらかの入力が必要です。通常、分類や予測を行うインスタンスなど、何か処理を施すデータを入力します。では、まったく新しいデータ インスタンスを出力するネットワークの入力として何を使用すればよいでしょうか。
最も基本的な形式では、GAN はランダムなノイズを入力として受け取ります。生成されたノイズは、意味のある出力に変換されます。ノイズを導入することで、ターゲット分布のさまざまな場所からサンプリングし、GAN でさまざまなデータを生成できます。
ノイズの分布はあまり重要ではないことがテストで示されているため、均一分布など、サンプリングが容易なものを選択できます。便宜上、ノイズをサンプリングする空間は通常、出力空間の次元よりも小さい次元です。
弁別子を使用して生成ツールをトレーニングする
ニューラル ネットをトレーニングするには、出力の誤差や損失を減らすためにネットの重みを変更します。ただし、GAN では、生成者は影響を与えようとしている損失に直接接続されていません。ジェネレータは弁別子ネットワークにフィードされ、弁別子は影響を与えようとしている出力を生成します。ジェネレータ損失は、弁別子ネットワークが偽物として分類するサンプルを生成したジェネレータをペナルティにします。
この余分なネットワーク チャンクは、バックプロパゲーションに含める必要があります。バックプロパゲーションでは、重みが出力に与える影響(重みを変更した場合の出力の変化)を計算することで、各重みを適切な方向に調整します。ただし、生成機の重みの影響は、フィードされる識別子の重みの影響によって異なります。したがって、バックプロパゲーションの出発点は出力であり、ディスクリミネータを経由して生成ツールに戻ります。
同時に、ジェネレータのトレーニング中に弁別子が変更されないようにする必要があります。動くターゲットを狙うと、生成ツールにとって難しい問題がさらに難しくなります。
そのため、次の手順で生成モデルをトレーニングします。
- ランダムなノイズをサンプリングします。
- サンプリングされたランダム ノイズからジェネレータ出力を生成します。
- 生成機の出力の識別子「本物」または「偽物」の分類を取得します。
- ディスкриминエータ分類から損失を計算します。
- 弁別子と生成器の両方を介してバックプロパゲートして、勾配を取得します。
- 勾配を使用して、生成器の重みのみを変更します。
これは、ジェネレータ トレーニングの 1 回の反復処理です。次のセクションでは、生成者と識別子の両方のトレーニングを調整する方法について説明します。