对抗生成网络原理
(1)生成模型
构建o和s的联合分布p(s,o) = p(s) *p(o|s)
(2)判别模型
构建o和s的条件分布p(s|o)
原理:利用判别模型效果,不断提高生成模型效果!逐步递进的过程不可或缺,而不是一开始就无敌!
其实就是通过不断求误差下界中的上界的方式,来获取更好的效果(就是莫欺少年穷嘛)!
生成器的目标:生成一个仿真数据
判别器的目标:判别一个数据是否真实
最终目标:得到一个好的生成器。
生成器的损失要大,你一开始不能太强,只能逐步增强,识别器要足够好,因为它会监督生成器的进步!
深度卷积对抗生成网络(DCGAN)
构建一个对抗网络
step 1:定义目标
从随即向量生成真实图像
step 2:定义生成器和判别器的输入输出
step 3:定义生成器和判别器的结构
生成器
输入:随机向量(一个数值,需要进行反卷积放大feature map)
输出:图像
反卷积:相当于一种上采样,池化层和卷积相当于一种下采样
模型结构:
Pooling层用convolutional层替代:我需要放大feature map而不是缩小
D上使用卷积层,都使用LeakyReLU预防神经元死掉
G上使用反卷积层,除了输出层使用tanh外(类似sigmoid函数)其他都用Relu(速度快)
图像翻译(Pix2Pix)
目标:以输入图为条件,生成内容相似但风格不同的新图!
要求和前提:图像必须配对
决策器:对生成器生成的新图和lable图是否配对
生成器:对输入的图,经过卷积和反卷积(全卷机网络),最后生成新图
生成器的模型:
优化策略:进行一次卷积的过程,你反卷积还需要另外在计算一次吗?不就是对称的嘛
无配对图像翻译(CycleGAN)
目标:从无配对的图像中学到风格的变换 !
模型怎样构建,并且怎样来构建损失函数来学习,使用循环一致性损失(L1) 来处理非成对数据的问题~~~~
建立模型:一对图像(x,y),两个生成器,两个判别器
损失函数:两个一致性损失
判别器损失:
生成器损失:
损失和:
生成器和损失器的优化:
为甚麽一致性损失(L1)会有效,因为添加约束降低了搜索空间!
多领域图像翻译(StarGAN)
之前模型只能处理,一对图像(x->y)的问题,但是如果有多任务(x==>y1,y2,y3),比如:更换图像头发的颜色,年龄等.......
那么原模型的组合比较多,而且模型之间没有信息共享,效率很差!
解决思想:从模型和损失函数入手,生成器添加目标领域信息,判别器需要判别领域类别!在对损失函数进行重建!
文本生成图像(Text2Img)
模型结构:
生成器:
输入:随机向量+文本编码(反卷积+卷积,构建全卷积网络,生成新图,文本编码:LSTM(对句子进行编码))
输出:图像
判别器:
输入:生成的图像+文本编码(直接CNN即可) 输出:图像文本是否匹配+图像是否合理(真实)
技巧:先将图像是否合理训练出来,在训练图像文本是否匹配!