GAN初识
本文是李宏毅老师 GAN 课程第一节的相关笔记。视频地址:
前言
- 最基本的 GAN 模型的算法流程:
- 生成器与判别器的关系
AutoEncoder(没有判别器怎么生成图像)
auto encoder 目的在于,为生成器提供一个向量,该向量与输入图片相对应,并且用该向量的各个维度上的值,控制生成图片上的某些对应特征。如果使用规定编码,对应某张图片,这样在训练样本少的情况下,会出现过拟合,以至于将训练集中的向量与固定图片相对应。因此使用了 VAE 模型,该模型除了提供特征向量,还提供了在对应维度上的偏置项,讲该偏置项与某种分布相乘再与原来的向量相加,来打破固定向量对应固定图片的问题,增加泛化效果。
对应 NN Encoder 的优化,则是使用生成的 code 提供给生成器,使得生成的图像与输入的原图像越相似越好。
- 存在的问题
由于同一层神经元之前是相互独立的,这以为着生成的图像像素之间是相互独立的,如果要增强他们之间的相互性,那只能增加隐藏层。这也意味着使用 Auto Encoder 方式训练生成器,要与 GAN 方式训练生成器在同样效果上,前者需要更大的网络。
只用判别器怎么生成图像
对于判别器,要生成图像则是求解上式,但是含有 argmax 函数的式子如何求解呢?先回到判别器本身的作用,判别器对于输入的图像会给出分数,那么求解该式子则变为了寻找分数最高的输入 x。一种方法是使用穷举,给出所有可能的 x 进行输入,取分数最高的 x 作为结果。
但是别忘了,这里我们进行了假设,是已经有了一个很好的判别器,才有了后续,那么如何训练一个可用的判别器呢,请看接下来的介绍。
训练判别器
训练判别器的第一步就得考虑输入的数据问题,一般来说,输入数据我们只有真实数据,也就是目标数据,那么它就是正类。那负类数据从哪里来呢?
课程中提到了这种算法。起始阶段,负类样本可以是随机生成的,通过训练得到第一个模型 D1,使用 D1 模型生成图像作为新的负类,重新训练模型得到 D2,依次类推得到最终模型。
这里会有疑问,为什么不使用随机噪声样本作为负类呢?因为模型给出的是一个分数,如果使用随机噪声作为负类,那么模型可能会判断输入数据只要有一点点像非随机的,就给很高的分,但这样的结果一般不是我们想要的。因此采用了迭代替换负类样本的方式,训练模型。
如果数据是一维的,那么训练的过程就像上图这样。迭代训练的过程是在不断的纠正判别器给出的分数曲线。
生成器与判别器对比
两者进行结合
在没有生成器存在时,我们采用穷举的方式产生负样本,当有了生成器之后,我们使用生成器创建负样本。那么这样做有什么好处呢。
生成器的损失函数不再是像素与像素之间的距离了,而是通过判别器,在全局视角创建 loss。
本文作者 : HeoLis
原文链接 : https://ishero.net/GAN%E5%88%9D%E8%AF%86.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得