最近再看The relativistic discriminator: a key element missing from standard GAN这篇文章,里面提到了Saturating和Non-Saturating Loss functions,但是之前再看GAN的文章时候好像没有太注意,这里稍微介绍一下。
1. 来源
作者在GAN的原文中只是提到了这个saturates。将
m
i
n
l
o
g
(
1
−
D
(
G
(
z
)
)
)
min \ log(1-D(G(z)))
min log(1−D(G(z)))变成了
m
a
x
log
(
D
(
G
(
z
)
)
)
max \log(D(G(z)))
maxlog(D(G(z))),说是前者更容易饱和。
关于这个saturate,首先我们看看它的定义是什么,来源于:What does the term saturating nonlinearities mean?
按照它这个定义,我们知道了ReLU在x趋向于正无穷大的时候也是无穷大,满足其中一个条件,所以是non-saturating(非饱和)。而tanh和sigmoid函数无论是趋向负无穷大还是正无穷大的时候都是趋向于[-1,1]或者[0,1],相当于是被压缩了,按照上面的定义non-saturating的二个条件任何一个都不满足,所以是是saturating。
但是对于这句话:
m
i
n
l
o
g
(
1
−
D
(
G
(
z
)
)
)
min \ log(1-D(G(z)))
min log(1−D(G(z)))变成了
m
a
x
log
(
D
(
G
(
z
)
)
)
max \log(D(G(z)))
maxlog(D(G(z))),说是前者更容易饱和。我个人的理解是,
l
o
g
(
1
−
x
)
log(1-x)
log(1−x)图像如下图所示,当我们
m
i
n
min
min这个函数的时候,趋向于负无穷了,因此是saturating。
而
l
o
g
(
x
)
log(x)
log(x)图像如图所示,当我们
m
a
x
max
max它的时候是趋向于正无穷大的,满足上面的non-saturating条件了。
上面的只是的我的猜想而已,而且理解可能是错误的,可能背后蕴含这深刻的数学在里面,大家可以在评论区帮忙指正出来。
参考文章:
另外,在这篇文章Saturating vs Non-Saturating Loss functions in GANs on MNIST作者提供了二者各自的实现方法,也是比较好理解的。
2. 发展
在之后一篇论文Towards Principled Methods for Training Generative Adversarial Networks对这个概念做了详细的解释:
对于生成器,SGAN提出了两种损失函数:saturating和non-saturating。其中前者不稳定,后者较稳定。如果GAN能100%分类真伪数据,那saturating函数的梯度是0,non-saturating的梯度虽然不为0,但它是易变的(volatile)。这意味着如果学习率过高,判别器很可能会“放弃”学习,导致模型性能很差,这种现象在高维数据中尤为明显。