GAN - glqglq/ml_dl_wiki GitHub Wiki
基本GAN
-
模型:由生成器generator和判别器disciminator组成,二者互相对抗(敌人)、学习(朋友),要求D走在G前面。
- generator是NN,输入向量(可是随机、可是有意义的)经过generator生成代表图像、句子的高维向量。输入的每个dimension代表生成器生成图像的某些特征。
- discriminator是NN,输入图像or句子经过discriminator生成数值,数值越高代表生成的越真实,其用于判断输入图像or句子是generator生成的还是真实的。
-
损失函数:交叉熵损失。
-
算法:
- 初始化生成器、判别器为G、D。
- 在每轮执行:
- 正向传播G:G输入随机向量生成输出o_G。
- 正向传播D:将o_G和真实图片输入D。
- 计算D损失:损失函数要求o_G的输出是0、真实图片的输出是1。
- 训练D:固定G,调节D。
- 计算G损失:损失函数要求o_G的输出是1。
- 训练G:固定D,调节G。
-
问题:
- generator为啥不自己学习?——因为输入向量难以生成。
- 为啥不用autoencoder来输入图像、中间生成向量、最后生成该图像?——其实这里的decoder就是generator,但是其面临的问题是training data数量有限,生成图片难以学习到像素点之间的关系。
- 为啥不用Variational autoencoder(exp(alpha)*e+m)?——
- discriminator为啥不自己做?——可以自己做,判别图片是否real能学习到像素点之间的关系。但是数据集只有real的图片,没有fake图片,很难找负例。
-
Metric:
-
Structured Learning:区别与回归、分类,其输出是sequence、matrix、graph、tree,可以视为one-shot/zero-shot learning。
-
应用:视频增强、文本生成、图像生成、超分、声音去噪
Conditional GAN:
- 模型:除了从normal distribution采样出来的输入z输入G,还增加一个确定的输入c;D输入除了G的输出x,还增加了一个确定的输入c。有两种架构:
- 损失函数:
- Loss1:判断输入x是否是真实的。
- Loss2:判断输入c和x是不是对应关系。
Stack GAN
- 两个GAN叠加,一次生成不好就两次
参考资料
- 李宏毅《GAN》 视频