半监督生成式对抗网络学习笔记
1. GAN训练收敛Tricks
1.1 特征匹配(Feature matching)
∣
∣
E
x
~
p
d
a
t
a
f
?
(
x
)
?
E
z
~
p
z
(
z
)
f
?
(
G
(
z
)
∣
∣
2
2
(1)
||\mathbb{E}_{\boldsymbol{x}\sim p_{data}}\boldsymbol{\operatorname{f}}(\boldsymbol{x})-\mathbb{E}_{\boldsymbol{z}\sim {p_{\boldsymbol{z}}}(\boldsymbol{z})}\boldsymbol{\operatorname{f}}(G(\boldsymbol{z})||_2^2\tag{1}
∣∣Ex~pdata??f(x)?Ez~pz?(z)?f(G(z)∣∣22?(1)
f
?
(
x
)
\operatorname{f}(\boldsymbol{x})
f(x)表示判别器中间层特征输出。式
(
1
)
(1)
(1)的优化目标在于使真实样本的特征与生成样本的特征尽可能相匹配。
1.2 小批量判别(Minibatch discrimination)
GAN难以训练,容易发生崩溃(collapse)问题,这时生成器发生退化收敛至单个样本点,而判别器梯度会指向相似方向,这样就无法继续训练了。为了防止发生崩溃问题,在训练过程中需要同时结合多个样本点。小批量判别的训练策略如下:首先提取判别器输入
x
i
\boldsymbol{x}_i
xi?的中间层特征向量
f
?
(
x
i
)
∈
R
A
\boldsymbol{\operatorname{f}}(\boldsymbol{x}_i)\in\mathbb{R}^A
f(xi?)∈RA,然后利用转换张量
T
∈
R
A
×
B
×
C
T\in\mathbb{R}^{A\times B\times C}
T∈RA×B×C乘以特征向量得到距离矩阵
M
i
∈
R
B
×
C
M_i\in\mathbb{R}^{B\times C}
Mi?∈RB×C,定义每个输入
x
i
\boldsymbol{x}_i
xi?的
o
(
x
i
)
o(\boldsymbol{x}_i)
o(xi?)如下:
c
b
(
x
i
,
x
j
)
=
e
x
p
(
?
∣
∣
M
i
,
b
?
M
j
,
b
∣
∣
L
1
)
∈
R
o
(
x
i
)
b
=
∑
j
=
1
n
c
b
(
x
i
,
x
j
)
∈
R
o
(
x
i
)
=
[
o
(
x
i
)
1
,
o
(
x
i
)
2
,
…
,
o
(
x
i
)
B
]
∈
R
B
o
(
X
)
∈
R
n
×
B
(2)
\begin{aligned}&c_b(\boldsymbol{x}_i,\boldsymbol{x}_j)=exp(-||M_{i,b}-M_{j,b}||_{L_1})\in\mathbb{R}\\&o(\boldsymbol{x}_i)_b=\sum_{j=1}^{n}c_b(\boldsymbol{x}_i,\boldsymbol{x}_j)\in\mathbb{R}\\&o(\boldsymbol{x}_i)=[o(\boldsymbol{x}_i)_1,o(\boldsymbol{x}_i)_2,\ldots,o(\boldsymbol{x}_i)_B]\in\mathbb{R}^B\\&o(\mathbf{X})\in\mathbb{R}^{n\times B}\end{aligned} \tag{2}
?cb?(xi?,xj?)=exp(?∣∣Mi,b??Mj,b?∣∣L1??)∈Ro(xi?)b?=j=1∑n?cb?(xi?,xj?)∈Ro(xi?)=[o(xi?)1?,o(xi?)2?,…,o(xi?)B?]∈RBo(X)∈Rn×B?(2)
最后连接
o
(
x
i
)
o(\boldsymbol{x}_i)
o(xi?)以及
f
?
(
x
i
)
\boldsymbol{\operatorname{f}}(\boldsymbol{x}_i)
f(xi?)作为下一层网络的输入。
若生成器收敛至单个样本点,则生成样本
o
(
G
(
z
i
)
)
o(G(\boldsymbol{z}_i))
o(G(zi?))接近于0,而真实样本
o
(
x
i
)
o(\boldsymbol{x}_i)
o(xi?)一般不为零,这时判别器就可以简单区分生成样本与真实样本,从而避免发生崩溃问题。
1.3 历史平均(Historical averaging)
∣
∣
θ
?
1
t
∑
i
=
1
t
θ
[
i
]
∣
∣
2
(3)
||\mathbf{\theta}-\frac{1}{t}\sum_{i=1}^{t}\mathbf{\theta}[i]||^2 \tag{3}
∣∣θ?t1?i=1∑t?θ[i]∣∣2(3)
引入该正则项可以使训练更容易进入纳什均衡。
1.4 单边标签平滑(One-sided label smoothing)
D
(
x
)
=
α
p
d
a
t
a
(
x
)
+
β
p
m
o
d
e
l
(
x
)
p
d
a
t
a
(
x
)
+
p
m
o
d
e
l
(
x
)
(4)
D(x)=\frac{\alpha p_{data}(\boldsymbol{x})+\beta p_{model}(\boldsymbol{x})}{p_{data}(\boldsymbol{x})+p_{model}(\boldsymbol{x})}\tag{4}
D(x)=pdata?(x)+pmodel?(x)αpdata?(x)+βpmodel?(x)?(4)
将
α
\alpha
α以及
β
\beta
β的常规取值0,1替换为如0.1,0.9之类的数值可以增加网络的抗干扰能力。但
β
\beta
β非零会倾向于使生成器产生相似的生成样本,因此,在这里
β
\beta
β取值为零,这种平滑方式被称作单边标签平滑。
1.5 虚拟批标准化(Virtual batch normalization)
批标准化可以极大地提高网络性能,但是这种技术会造成一个网络输入的输出会高度依赖于同一批数据的其输入。为了避免这种问题的发生,我们引入了虚拟批标准化(VBN)技术,利用同一个参考批数据标准化所有批数据。
VBN在计算上开销较大 (?),因此只被利用在生成器中。
2.半监督学习
假设训练分类器分类
K
K
K个类别,引入生成器生成样本后,分类器分类类别变为
K
+
1
K+1
K+1个,有标签样本用于训练分类器分类前
K
K
K个类别,无标签样本用于训练分类器第
K
+
1
K+1
K+1个样本分类以此加强分类器对于数据分布的学习。整个训练损失函数如下:
L
=
?
E
x
,
y
~
p
d
a
t
a
(
x
,
y
)
[
log
?
p
m
o
d
e
l
(
y
∣
x
)
]
?
E
x
~
G
[
log
?
p
m
o
d
e
l
(
y
=
K
+
1
∣
x
)
]
=
L
s
u
p
e
r
v
i
s
e
d
+
L
u
n
s
u
p
e
r
v
i
s
e
d
(5)
\begin{aligned}L&=-\mathbb{E}_{\boldsymbol{x},y\sim p_{data}(\boldsymbol{x},y)}[\log p_{model}(y|\boldsymbol{x})]-\mathbb{E}_{\boldsymbol{x}\sim G}[\log p_{model}(y=K+1|\boldsymbol{x})]\\ &=L_{supervised}+L_{unsupervised}\end{aligned}\tag{5}
L?=?Ex,y~pdata?(x,y)?[logpmodel?(y∣x)]?Ex~G?[logpmodel?(y=K+1∣x)]=Lsupervised?+Lunsupervised??(5)
L
s
u
p
e
r
v
i
s
e
d
=
?
E
x
,
y
~
p
d
a
t
a
(
x
,
y
)
[
log
?
p
m
o
d
e
l
(
y
∣
x
,
y
<
K
+
1
)
]
L
u
n
s
u
p
e
r
v
i
s
e
d
=
?
E
x
~
p
d
a
t
a
(
x
)
[
log
?
(
1
?
p
m
o
d
e
l
(
y
=
K
+
1
∣
x
)
)
]
?
E
[
log
?
p
m
o
d
e
l
(
y
=
K
+
1
∣
x
)
]
=
?
E
x
~
p
d
a
t
a
(
x
)
[
log
?
D
(
x
)
]
?
E
z
~
n
o
i
s
e
[
log
?
(
1
?
D
(
G
(
z
)
)
)
]
(6)
\begin{aligned}L_{supervised}&=-\mathbb{E}_{\boldsymbol{x},y\sim p_{data}(\boldsymbol{x},y)}[\log p_{model}(y|\boldsymbol{x},y<K+1)]\\L_{unsupervised}&=-\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[\log (1-p_{model}(y=K+1|\boldsymbol{x}))]-\mathbb{E}[\log p_{model}(y=K+1|\boldsymbol{x})]\\&=-\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[\log D(\boldsymbol{x})]-\mathbb{E}_{\boldsymbol{z}\sim noise}[\log (1-D(G(\boldsymbol{z})))]\end{aligned} \tag{6}
Lsupervised?Lunsupervised??=?Ex,y~pdata?(x,y)?[logpmodel?(y∣x,y<K+1)]=?Ex~pdata?(x)?[log(1?pmodel?(y=K+1∣x))]?E[logpmodel?(y=K+1∣x)]=?Ex~pdata?(x)?[logD(x)]?Ez~noise?[log(1?D(G(z)))]?(6)
参考文献
[1]Improved Techniques for Training GANs
|