李宏毅老师讲解的Generative Adversarial Network
Review: Auto-encoder -> VAE ->GAN
auto-encoder的学习结果中的decoder可以拿出来,喂一个code可以生成一个image
VAE更进一步引入了噪声,学习目标仍然是希望input 和output尽可能的接近,但不能单纯最小化两者之间的差异,因为这样学出来的结果肯定是噪声的权重为0,因此对优化目标reconstruction error做了一些改进
VAE存在的问题是:VAE并不是真的尝试去生成real图像;如左下和右下的图像和input图像其实都只差了一个像素点,但从人的角度看显然左下是realistic的图像而右下则是fake的图像,但在VAE的视角中两者与input图像间的差距是一样的
GAN概述
GAN中Generator与VAE中decoder的架构和做的事情是一样的,只是训练时的训练方法不一样
训练过程:
- How to learn Discriminator: 先随机初始化一个Generator,通过Generator生成一组假的images标为0,从data base选出一组real images标为1,把这两组都喂给Discriminator让它学习如何鉴别fake image和real image
- How to learn Generator: 更新Generatorv1的参数获得Generatorv2,要使Generatorv2生成的fake image 能骗过Discriminatorv1(即让Discriminatorv1的输出尽可能接近1);注意此时Discriminatorv1是fixed的
课程中提及的"GAN-二次元人物头像合成"的pratice的链接
Source of images: GAN学习指南:从原理入门到制作生成Demo
DCGAN: https://github.com/carpedm20/DCGAN-tensorflow
The basic idea of GAN
极大似然估计
- 数据集其实本身对应一个真实数据分布 P d a t a ( x ) P_{data}(x ) Pdata(x),但是我们没法形式化的写出来,不妨假设真实分布可表示为 P G ( x ; θ ) P_G(x;\theta) PG(x;θ), θ \theta θ是我们控制数据分布表示的变量;因此学习的目标是找到一个 θ \theta θ使两个两个分布尽可能的接近,但因为真实数据分布 P d a t a ( x ) P_{data}(x ) Pdata(x)未知,所以通过计算“从数据集中抽取一组sample { x 1 , x 2 , . . . x m x^1,x^2,...x^m x1,x2,...xm}(可以看作是从真实数据分布 P d a t a ( x ) P_{data}(x ) Pdata(x)中采样获得的样本),似然就是从 P G ( x