生成式对抗网络(GAN)
把network当作gengrator,输入一个随机的z,希望输出是有几率的分布
generator(nn)
输入一个normal distribution ,输出一个image(长向量)
discriminator(nn)
输入一个image,输出一个图片的置信度
总的来说,discriminator扮演generator天敌的角色,不断筛选出符合ground truth的image,共同进化
Algorithm
- fix generator G, and update discriminator D
- fix discriminator D,and update generator G
styleGan、Progressive Gan、
theory behind GAN
G ∗ = arg min G D i v ( P G , P d a t a ) G^*=\arg\min_G Div(P_G,P_{data}) G∗=argGminDiv(PG,Pdata)
找一组 参数,使得距离divergence最小
objective function和discriminator有关
no pain, no GAN
tips for GAN
JS divergence
- in most cases, P G P_G PG and P d a t a P_{data} Pdata are not overlapped.
没有重叠的 P G P_G PG and P d a t a P_{data} Pdata算出来都是log2。
WGAN(Wasserstein GAN)
tips: BN
BN步骤主要分为4步:
1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用求得的均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。其中ε是为了避免除数为0时所使用的微小正数。
4.尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。
参考博客:WGAN基本原理及Pytorch实现WGAN_Keep_Trying_Go的博客-CSDN博客
- 彻底解决了GAN训练不稳定,超参数敏感的问题,不再需要小心平衡生成器和判别器的训练程度
- 基本解决了collapse mode(模型生成样本单一,多样性很差)的问题,确保了生成样本的多样性
- 训练过程中有一个向交叉熵、准确率这样的数值来指示训练的过程,数值越小代表训练越好
- 不需要精心设计网络架构,最简单的多层全连接即可
距离度量方式
- EM距离:
W ( P r , P g ) = inf γ ∈ ∏ ( P r , P g ) E ( x , y ) γ [ ∣ ∣ x − y ∣ ∣ ] W(P_r,P_g)=\inf_{\gamma\in\prod(P_r,P_g)}E_{(x,y) ~ \gamma}[||x-y||] W(Pr,Pg)=γ∈∏(Pr,Pg)infE(x,y) γ[∣∣x−y∣∣]
其中 ∏ ( P r , P g ) \prod(P_r,P_g) ∏(Pr,Pg)是分布p和q组合起来的所有可能的联合分布的集合。对于每个分布可能的联合分布 γ \gamma γ~ ∏ ( P r , P g ) \prod(P_r,P_g) ∏(Pr,Pg),计算距离||x-y||的期望 E ( x , y ) γ [ ∣ ∣ x − y ∣ ∣ ] E_{(x,y) ~ \gamma}[||x-y||] E(x,y) γ[∣∣x−y∣∣],其中(x,y)采样自联合分布 γ \gamma γ。不同联合分布 γ \gamma γ由不同的期望,这些期望中的下确界即定义为分布p和q的Wasserstein距离,其中的inf{·}表示集合的下确界。
lipschitz条件:K对于在实数集的子集的函数f,若存在常数K,使得 ∣ f ( a ) − f ( b ) ∣ ≤ K ∣ a − b ∣ |f(a)-f(b)|\leq K|a-b| ∣f(a)−f(b)∣≤K∣a−b∣, 则称f符合利普西茨条件,对于f最小的常数K称为f的利普西茨常数。若K<1,f称为收缩映射。
由于几乎不能遍历所有的联合分布去计算距离||x-y||的期望,所以直接计算W不可行,WGAN基于对偶性将上面计算距离转换为
W
(
P
r
,
P
g
)
=
1
K
sup
∣
∣
f
∣
∣
L
≤
K
E
x
∼
P
r
[
f
(
x
)
]
−
E
x
∼
P
θ
[
f
(
x
)
]
W(P_r,P_g)=\frac{1}{K}\sup_{||f||_L\leq K}E_{x\sim P_r}[f(x)]-E_{x\sim P_\theta}[f(x)]
W(Pr,Pg)=K1∣∣f∣∣L≤KsupEx∼Pr[f(x)]−Ex∼Pθ[f(x)]
于是在
D
θ
D_\theta
Dθ满足1-Lipschiz约束的条件下,上述式子变为
W
(
P
r
,
P
g
)
=
sup
∣
∣
D
θ
∣
∣
L
≤
1
E
x
∼
P
r
[
D
θ
(
x
)
]
−
E
x
∼
P
θ
[
D
θ
(
x
)
]
W(P_r,P_g)=\sup_{||D_\theta||_L\leq 1}E_{x\sim P_r}[D_\theta(x)]-E_{x\sim P_\theta}[D_\theta(x)]
W(Pr,Pg)=∣∣Dθ∣∣L≤1supEx∼Pr[Dθ(x)]−Ex∼Pθ[Dθ(x)]
所以求解W的问题转换为
max
E
x
∼
P
r
[
D
θ
(
x
)
]
−
E
x
∼
P
θ
[
D
θ
(
x
)
]
\max{E_{x\sim P_r}[D_\theta(x)]-E_{x\sim P_\theta}[D_\theta(x)]}
maxEx∼Pr[Dθ(x)]−Ex∼Pθ[Dθ(x)]
optimization objective
判别器优化目标:
L
o
s
s
(
G
,
D
)
=
max
D
E
x
r
∼
P
r
[
D
(
x
r
)
]
−
E
x
f
∼
P
g
[
D
(
x
f
)
]
Loss(G,D)=\max_D{E_{x_r\sim P_r}[D(x_r)]-E_{x_f\sim P_g}[D(x_f)]}
Loss(G,D)=DmaxExr∼Pr[D(xr)]−Exf∼Pg[D(xf)]
解释:判别器是尽可能的判别真实样本的概率值越大越好,判别生成器生成的样本越小越好,所以对于判别器是最大化上述目标。
生成器优化目标:
L
o
s
s
(
G
,
D
)
=
min
G
[
−
E
x
f
∼
P
g
[
D
(
x
f
)
]
]
反卷积
Loss(G,D)=\min_G{[-E_{x_f\sim P_g}[D(x_f)]]}反卷积
Loss(G,D)=Gmin[−Exf∼Pg[D(xf)]]反卷积
反卷积:
反卷积的作用是将原始图像扩大
反卷积与产痛卷积区别不大,主要有:
- padding的对应关系变了,反卷积的padding参数 p ′ = k − 1 − p p'=k-1-p p′=k−1−p,其中k是kernel_size,P为传统的padding值
- stride参数的含义不一样,在反卷积中stride表示在输入图像中间填充0(空洞卷积)
- 如果卷积和反卷积的参数一致,卷积会让AA尺寸变为BB尺寸,那么反卷积就会把BB尺寸变为AA尺寸