概述
本文介绍Generative adversarial networks(生成对抗网络)和Adversarially Learned Inference(对抗学习推断器,跟GAN训练过程类似,ALI也是在每次迭代中同时更新生成器和判别器的参数)。
一、GAN
假设我们现在的数据集是手写体数字的数据集 minst, 生成模型的输入可以是二维高斯模型中一个随机的向量,生成模型的输出是一张伪造的 fake image,同时通过索引获取数据集中的真实手写数字图片 real image,然后将 fake image 和 real image 一同传给判别模型,由判别模型给出 real 还是 fake 的判别结果。
(一)前向传播阶段
1、模型输入
(1)随机产生一个随机向量作为生成模型的数据,然后经过生成模型后产生一个新的向量,作为 Fake Image,记作 D(z)。
(2)从数据集中随机选择一张图片,将图片转化成向量,作为 Real Image,记作 x。
2.模型输出
将由(1)或者(2)产生的输出,作为判别网络的输入,经过判别网络后输出值为一个0到1之间的数,用于表示输入图片为 Real Image的概率,real为1, fake为0 使用得到的概率值计算损失函数。
根据输入的图片类型是 Fake Image或 Real Image将判别模型的输入数据的label标记为0 或者1。即判别模型的输入类型为( xfake,0)或者(xreal,1)
(二)反向传播阶段
1、优化目标
min G max D V ( D , G ) = E x ∼ p data ( x ) [ log ( D ( x ) ) ] + E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min _{G} \max _{D} V(D, G)=E_{x \sim p_{\text {data }}(x)}[\log (D(x))]+E_{z \sim p_{z}(z)}[\log (1-D(G(z)))] GminDmaxV(D,G)=Ex∼pdata (x)[log(D(x))]+Ez∼pz(z)[log(1−D(G(z)))]
(1)优化 D(判别)
max
D
V
(
D
,
G
)
=
E
x
∼
p
data
(
x
)
[
log
(
D
(
x
)
)
]
+
E
z
∼
p
z
(
z
)
[
log
(
1
−
D
(
G
(
z
)
)
)
]
\max _{D} V(D, G)=E_{x \sim p_{\text {data}}(x)}[\log (D(x))]+E_{z \sim p_{z}(z)}[\log (1-D(G(z)))]
DmaxV(D,G)=Ex∼pdata(x)[log(D(x))]+Ez∼pz(z)[log(1−D(G(z)))]
优化 D 的公式的第一项,使得真样本 x 输入的时候,得到的结果越大越好,因为真样本的预测结果越接近1越好; 对于假样本G(z), 需要优化的是其结果越小越好, 也就是D(G(z)) 越小越好,因为它的标签为 0。但是第一项越大,第二项越小,就矛盾了,所以把第二项改为 1-D(G(z)),这样就是越大越好。
(2)优化G(生成)
min
G
V
(
D
,
G
)
=
E
z
∼
p
z
(
z
)
[
log
(
1
−
D
(
G
(
z
)
)
)
]
\min _{G} V(D, G)=E_{z \sim p_{z}(z)}[\log (1-D(G(z)))]
GminV(D,G)=Ez∼pz(z)[log(1−D(G(z)))]
把第一项直接去掉, 这时候只有假样本,但是这个时候希望假样本的标签是 1,所以是 D(G(z))越大越好,但是为了统一成 1- D(G(z))的形式, 那么只能是最小化 1-D(G(z)), 本质上没有区别, 只是为了形式的统一。
之后这两个优化模型可以合并起来写,就变成最开始的最大最小目标函数了。
2、损失函数
(1)判别模型的损失函数
−
(
(
1
−
y
)
log
(
1
−
D
(
G
(
z
)
)
)
+
y
log
D
(
x
)
)
-((1-y) \log (1-D(G(z)))+y \log D(x))
−((1−y)log(1−D(G(z)))+ylogD(x))
当输入是 real Iamge 数据时,我们只需要考虑第二部分,D(x)为判别模型的输出,表示输入 x 为 real 数据的概率,我们的目的是让判别模型的输出 D(x) 的输出尽量靠近 1。
当输入为 fake 数据时,我们只计算第一部分,G(z)是生成模型的输出,输出的是一张 Fake Image。我们要做的是让 D(G(z))的输出尽可能趋向于 0。这样才能表示判别模型是有区分力的。
(2)生成模型的损失函数
(
1
−
y
)
log
(
1
−
D
(
G
(
z
)
)
)
(1-y) \log (1-D(G(z)))
(1−y)log(1−D(G(z)))
我们希望 G(z)产生的数据尽可能和数据集中的数据分布一样。即最小化生成模型的误差,只将由 G (z)产生的误差传给生成模型。
但是针对判别模型的预测结果, 要对梯度变化的方向进行改变。 当判别模型认为 G (z) 输出为真实数据集和噪声数据的时候,梯度更新方向要进行改变。
(3)最终损失函数
(
1
−
y
)
log
(
1
−
D
(
G
(
z
)
)
)
(
2
∗
D
ˉ
(
G
(
z
)
)
−
1
)
(1-y) \log (1-D(G(z)))(2 * \bar{D}(G(z))-1)
(1−y)log(1−D(G(z)))(2∗Dˉ(G(z))−1)
其中
D
ˉ
\bar{D}
Dˉ表示判别模型的预测类别,对预测概率取整, 为 0 或者 1.用于更改梯度方向,阈值可以自己设置,或者正常的话就是 0.5。
二、ALI
The generation network maps samples from stochastic latent variables to the data space while the inference network maps training examples in data space to the space of latent variables.
(一)模型结构
如上图所示,ALI由一个编码器,一个解码器和一个判别器组成,判别器的输入为潜在变量和训练样本的联合样本,判别器需要判断一个联合样本是来自于编码器还是解码器。而编码器和解码器的训练目标则是尽可能的让判别器判断错误。所以ALI的目标是让编码器的联合分布接近解码器的联合分布。
1、生成网络G x (z) :将潜在变量的随机样本映射到数据空间;
2、推断网络G z (x) :将数据空间的训练样本映射到潜在变量空间;
3、判别网络D(x , z) :分辨联合样本(潜在变量和训练样本(x,z))是来自生成网络还是推断网络的。
ALI/BiGAN 的结构,由三个网络构成。其中一个是判别器,还有一个网络将噪声向量从隐空间映射到图像空间(解码器,以 G 表示),最后一个网络(编码器,以 E 表示)将真实图像从图像空间映射到隐空间。
(二)损失函数
the two following probability distributions over x and z:
(三)算法过程
参考资源:
1、https://blog.csdn.net/weixin_40680322/article/details/108561948
2https://blog.csdn.net/R1uNW1W/article/details/78399804utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.compare
3、https://blog.csdn.net/m0_37596280/article/details/80823060
4、论文
生成模型—生成对抗网络
Adversarially Learned Inference