“adversarial training is the coolest thing since sliced bread" – Yann LeCun
GAN 网络主要由生成器G 和 判别器D两大部分组成。
G 网络主要用于生成目标,D网络主要用于区分目标。通过二者之间的对抗,使得生成的目标越来越强大。
比如我(G)要做亿万富翁,我向一个导师(D)请教:
G:我要做亿万富翁
D:你学识不够
– 于是我开始疯狂学习知识
G:我要做亿万富翁
D:你投资能力不足
– 于是我开始疯狂学习投资
G:我要做亿万富翁
D:你人脉关系不行
– 于是我开始疯狂开拓人脉
…
于是我成为了亿万富翁。
模型实例分析:如何用随机噪声生成手写数字
我们现在有大量的手写数字数据集,但是呢我们想通过GAN生成类似的手写数字图片。
于是我们的网络结构大概如下:

有一个生成器G,输入一组向量,生成定义大小的图片;
有一个判别器D,判别G输出的图片的真伪,输入生成图片,输出判别标签。
对于生成器G网络,如果生成图片,可以通过最简单的全连接网络,或者反卷积网络生成。只要根据输入能生成特定大小的图片即可。
对于判别器D网络,采用正常的卷积网络即可,输出判别标签即可。
对于输入向量,我们希望输入向量携带输出图片的信息,比如输出数字标号,字迹潦草程度等。由于对输出的信息不做要求,只要求输出能最大程度骗过判别器即可。所以我们可以用满足一定分布的随机向量作为输入。
如果想知道哪些分布区间对应生成类别,我们可以对输入向量产生的输出进行分析,获取到哪些维度是用于控制数字编号等信息的即可以得到具体的输出。而在训练之前往往不会去规定它。
训练过程:
1、初始化G、D网络参数
2、从真实分布采样M个真实样本;随机分布中随机生成M个输入向量,通过G网络生成M个生成样本。
3、固定生成器G,训练判别器D,尽可能大地区分正确样本和生成的样本。
3、循环更新K次判别器D,再更新生成器G, 使得生成的样本尽可能地骗过判别器。循环k次的目的使得先有好的判别器D,再去做生成器,这样才能稳定准确判别真实样本和生成样本,所以下一次生成的目标才会更加向真实分布靠拢。
多次更新迭代之后,最终理想情况是使得判别器判别不出样本来自于生成器的输出还是真实的输出。亦即最终样本判别概率均为0.5。
训练分布示意图:图中的黑色虚线表示真实的样本的分布情况,蓝色虚线表示判别器判别概率的分布情况,绿色实线表示生成样本的分布。

LOSS:
最大化判别器 loss
最小化生成器 loss
判别器LOSS:
判别器就是一个分类器,用交叉熵loss进行判别。固定住生成器G,此时希望loss最大。
对于二分类:
当考虑生成器G的时候,我们希望此时loss最小。

思考:
1、为什么经过判别器,直接用生成样本和真实样本做差不好吗?
不好,经过判别器可以提取样本之间的深层特征进行比较,更能反映样本之间的本征特征差异而不是表层特征差异。

本文探讨了GAN(生成对抗网络)的工作原理,通过生成器与判别器的互动,模拟亿万富翁成长过程,解释了如何用随机噪声生成手写数字。讲解了网络结构、训练过程和loss函数,并揭示了对抗训练背后的深层特征提取技巧。

5029

被折叠的 条评论
为什么被折叠?



