Adversarial nets
- z:随机噪声
- :随机噪声 z 服从的概率分布(1维均匀分布.一维高斯分布...n维)
- G 是生成器:输入 z,输出假图像, 是多层感知机的权重参数
- D 是判别器:输入图像 x,输出标量(x是真实图像的概率,在0-1之间的标量),如果认为x比较真
生成标量为 1,认为 x 比较假,那么生成的标量接近于 0 - x 是真实数据的概率分布
- 是生成器生成的假图像服从的概率分布
- 就是在判别输入的 x 是来自真实分布还是来自于生成器生成的假图像分布
- :判别器认为假图是真图的概率
为什么要同时训练 去最小化函数呢?
当函数输出为1时,也就是当判别器认为假图是真图的概率为1时,使得整个最小,也就是生成器G想要达成的目的,欺骗了判别器D
生成对抗网络 G 和 D 都是两个多层感知器(全连接神经网络)
首先该公式有两项:
- 第一项:当输入图像满足原始数据分布,也就是说是真图像的时候,判别器输出的东西越大越好
- 第二项:当输入假数据时,输出越小越好,也就是D(G(z))越小越好,也就是判别器认为假图像是真图像的概率越小越好 min右边:给定生成器的前提下,使得判别器的目标函数最大化 min:给定判别器,找到一个使得右边这个式子最小化的生成器
在一会的伪代码中,训练 k 次判别器,训练 1 次生成器,训练判别器的内层循环(伪代码中有一个内层循环)他的计算代码过于高昂,在有限的数据集上会导致过拟合,所以这里采用交替训练,他两就能一步步进步(周伯通左右互搏),最终都能达到最优
下方Z代表噪声空间(假设是均匀分布,也可以假设服从高斯分布),生成器G为了将随机数变成假图像,X 指的是图像空间,每一个噪声都被生成器变成了图像空间的一个点,
有稀疏的部分也有密集的
- 绿色线:生成器生成图像分布
- 黑色线:真实图像分布
- 蓝色线:判别器预测当前这个图像空间的样本是真实数据的概率,理想情况下应该在真实图像分布哪里给出
高分,生成图像分布哪里给出低分 - 因为生成器的任务是让判别器犯错,你哪里给了高分,我就将图像生成在哪里,可以看到图(c) 相较于 图(b)往左移了
- 图(a)为初始图,图(b)为训练判别器,图(c)为训练生成器,图(d)为交替训练若干轮以后得到的分布,现在已经分辨不出来那个是真那个是假了,最后的结果为 分布完全重合,全局最优解的公式为 。
通过
Minibatch随机梯度下降来优化网络,训练 k 次判别器,训练 1 次生成器
- 训练 k 次判别器
- 一步就是一个 Minibatch,在第一个 for 中,生成器是固定的
- 采样 m 个噪声(随机数),生成 m 个假图像
- 采样 m 个真图像
- 用假图像和真图像去训练一个二分类模型,
第一个公式就是交叉熵损失函数,里面的公式和上面一样,上面是期望形式,现在是均值 - 此时要最大化这个函数,三角代表对这个函数求判别器网络中每个权重的梯度做优化更新
- 生成器固定,只需要训练判别器的权重
- 训练 1 次生成器
- 采样 m 个噪声(随机数),生成 m 个假图像 ,采样 m 个真图像
- 要最小化这个函数
- 判别器固定,只需要训练生成器的权重
- 这里为什么只有一项?因为第一项是一个常数,枯叶蝶改变不了外物,枯叶蝶只能改变自己的样貌(为了让判别器真假难分)
- 生成器不是直接拟合原始数据的分布,而是为了愚弄判别器,间接拟合分布
期望的定义:
公式(4)代表:
- 给定判别器D训练生成器G
- 让判别器认为假图像更真
- 最小化生成器价值函数 。
- 表示当前这个判别器D已经是最优的了
当且仅当,最优的判别器,把代入上式(4)可以得出,那么可以得到式(5)
,KL散度一定大于等于0
积分是对连续变量,求和是对离散变量
本文参考了同济子豪兄、李沐老师的教学视频