从零开始深度学习0617——李宏毅 GAN
李宏毅 GAN
GAN是一种无监督学习方法的模型
G与D 交错迭代训练
可以看做是一个大的NN 前面几层hidden layer 是G 后面几层hidden layer 是D
训练时,每次固定G 训练D,固定D训练G
先训练判别器 再训练生成器 循环往复
如下两步:
通过随机的vector 生成了一组图像,从database中也拿到一组图像 ,送到D中,这时固定住G,就是根据这两组图像去训练D,使得GT 得到更高的分数,fake 得到低的分数
固定上步训练的D ,然后训练G , 去生成不同的images 使得在D 中分数提升
因为如果不固定的话,想要分数提升,只需要改变D中 最后一层的Weights就好了,不管前面生成的images好还是不好 最后都会分数提升,所以一定需要 循环迭代训练
GAN 中 sample 相当于 CNN中 batchsize
算法的伪代码描述
从database中采样m个images examples
随机使用m个服从高斯分布或者其他distribution的noise 随机噪声 z 去生成图像
训练的判别器 是需要让真的越大 假的越小
所以原始paper中 的loss function 是采取梯度上升的方式
为了方便 可以加个符号 梯度下降的方法去优化
+号 是因为前面V 没有写负号
如果负号就是 梯度下降 正号就是梯度上升
区别于分类与回归任务
GAN是一种结构化学习任务
回归任务是输出一个数值
分类任务是输出一个one-hot 编码的向量 表示一类
结构化学习或预测输出 可能是一个序列,一个矩阵,一个图,一个树 等等
输出序列的情况
输出矩阵的情况
自底向上Generator + 自顶向下Discriminator
Auto-Encoder
如果输入AE生成的a向量 到 G中,可能会产生往左偏的1
输入AE生成的b向量 到 G中,可能会产生往右偏的1
但是如果下面的形式 0.5*a + 0.5*b 会产生什么 不一定会输出直的1 也可能会输出none
所以出现了VAE (Variational Auto-Encoder) 变分编码器
VAE解释与GAN的区别
https://blog.csdn.net/weixin_40955254/article/details/82315224
利用VAE,只需要使用有限的数据输入,我们就可以通过隐形参数的调节,获得几乎无限的数量。
有人也许会问了,你为什么可以生成从来没有出现过的图片。这里就要介绍一下VAE中的编码器,对于每个隐性参数他不会去只生成固定的一个数,而是会产生一个置信值得分布区间,这是一种连续的表达方式,通过采样,我们就可以获得许多从来没有见过的数据了。
AE与 VAE 不同
{m1,m2,m3, ….} 是encoder出来的向量
{σ1,σ2,σ3,…..} 是上述图中encoder出来的latent attributes 就是隐空间latent space的分布 ???????????
然后latent attributes与服从某种分类 比如高斯分布的 随机噪声z 相乘然后叠加到{ m } 上,产生{c1,c2,c3…..} ,拿到decoder解码,根据有noise的code 产生输出
D 判别器训练
Discriminator 做生成
G 与 D 的优缺点
Probs 优点 Cons 缺点
Generator 生成简单,但是不容易考虑components与components之间的关系
举个例子就是,只考虑pixel 与 pixel ,概括就是,只学到了表象没有学到大局
但是Driscrimmator 容易学到大局,但是生成千难万难