我一直在阅读有关 GAN 的文章,虽然我已经看到了几个出色的实现示例,但在很多情况下,我并不清楚为什么选择这些模式的描述。
在非常高的层次上, GAN 中鉴别器的目的是建立一个可用于训练生成器的损失函数。
IE。给定生成器的随机输入,鉴别器应该能够返回结果是“真实”图像的概率。
如果鉴别器是完美的,则概率将始终为零,并且损失函数将没有梯度。
因此,您迭代:
- 生成随机样本
- 从生成器生成输出
- 使用鉴别器评估输出
- 训练发电机
- 通过对来自真实分布的样本和生成器的输出进行训练来更新鉴别器以使其更准确。
问题是我不明白的,是上面的第 5 点。
为什么要使用生成器的输出?
我完全理解您需要迭代鉴别器的准确性。
首先,它需要以非零值响应生成器的有效随机输出,慢慢地它需要收敛到正确分类“真实”或“假”图像。
为了实现这一点,我们迭代,用来自真实分布的图像训练生成器,推动它接受“真实”图像。
...以及来自生成器的图像;但我不明白为什么。
实际上,您有一组真实图像(例如 5000 张人脸图片),它们代表您希望 GAN 收敛的潜在空间中的样本(例如,所有人脸图片)。
所以论点是:
随着生成器被迭代训练越来越接近从潜在空间生成图像,鉴别器被迭代训练以从潜在空间识别,就好像它的样本量比你开始的 5000 个(或其他)样本图像大得多一样.
...好吧,但这很愚蠢。
DNN的重点在于,给定一个样本,您可以训练它从样本所代表的潜在空间中识别图像。
我从未见过第一步是“用额外的程序生成的假样本来增加你的样本”的 DNN;这样做的唯一原因是您只能识别输入集中的样本,即。您的网络过度拟合。
所以,作为一个具体的例子,为什么你不能在 ('real' * epoch/iterations + 'noise' * 1 - epoch/iterations) 的样本上增量训练鉴别器,其中 'noise' 只是一个随机输入向量。
然后,您的鉴别器将必然会收敛于识别真实图像,并为生成器提供有意义的梯度。
与此相比,提供发电机的输出有什么好处?