GANのGeneratorはなぜ乱数入力に対して構造を学習できるのか?

質問

GANのGeneretorは乱数から画像を作る、と当たり前のように説明されていますが、ここが理解できません。

自分でコードを調べる前は、乱数は各学習ステップに関わらず、最初に設定した値を固定して使うと思っていたのですが、以下のコード(添付リンクから引用)では、乱数は各epochで毎回初期化しているようです。

例えば、画像が猫か犬か判定するモデルを作ろうとした時に、当然入力は学習データで固定されており、固定されているからこそ、重みを各epochで更新していくことができると思うのですが、GANでは入力に規則性がなく、各epochでも入力が変動するのにも関わらず、なぜ、規則的な画像を出力する方向で学習できるのでしょうか?

入力が乱数で毎回変わると、ネットワーク構造なんてできないのでは?という素朴な疑問です。

今さら聞けないGAN

Python

def train(self, epochs, batch_size=128, save_interval=50): # mnistデータの読み込み (X_train, _), (_, _) = mnist.load_data() # 値を-1 to 1に規格化 X_train = (X_train.astype(np.float32) - 127.5) / 127.5 X_train = np.expand_dims(X_train, axis=3) half_batch = int(batch_size / 2) for epoch in range(epochs): # --------------------- # Discriminatorの学習 # --------------------- # バッチサイズの半数をGeneratorから生成 noise = np.random.normal(0, 1, (half_batch, self.z_dim)) gen_imgs = self.generator.predict(noise) # 以下省略

コメントを投稿

0 コメント