【GAN】Generative Adversarial Networks 这是一种在 2014 年提出的生成模型架构,已经成为深度学习领域中非常重要的技术。GANs 由两个神经网络组成:生成器(Generator)和判别器(Discriminator)。这两个网络通过相互对抗的方式共同训练,最终生成逼真的数据。
GAN 的模型思想引例: 想象一下,在一个城市里,存在两个角色:一个是造假者(对应于 GANs 的生成器),另一个是警察(对应于 GANs 的判别器)。造假者 :他不断尝试制造逼真的假钞,希望假钞能够成功流通,不被警察发现。警察 :他的任务是区分真假钞票。他需要通过观察钞票的细节,判断出哪些是真钞,哪些是假钞。
开始 :造假者刚开始并不太熟练,制造出的假钞非常粗糙,警察一眼就能辨别出来。于是,造假者观察警察的判断,并不断改进他的假钞,使其变得更像真钞。
过程 :随着时间的推移,造假者的技术越来越好,假钞的质量也越来越高,警察开始需要更加仔细地检查每一张钞票,以分辨真假。同时,警察也在不断提高自己的技能,学习更复杂的特征来辨别假钞。
最终 :造假者能够制造出几乎无法被警察识别的假钞,假钞的质量达到了真钞的标准。此时,警察的能力和造假者的能力达到了某种平衡。
这个过程实际上是 GANs 训练的最终目标:生成器生成的样本足够逼真,以至于判别器无法区分真实数据和生成数据。即:
生成器 (Generator) :就像造假者,试图不断改进假钞(生成样本)的质量,直到它足够逼真以骗过判别器。生成器的任务是从噪声中生成尽可能接近真实数据的伪造样本。它尝试学习如何生成足够逼真的数据,以骗过判别器。判别器 (Discriminator) :就像警察,不断提高自己辨别假钞的能力,以确保能识别出虚假的样本。判别器的任务是区分真实数据和生成器生成的假数据。它通过输出真假概率来告诉生成器哪些样本更接近真实数据。这两个角色在一个对抗的环境中相互提升,最终达到一个平衡点:生成器能生成非常逼真的数据,而判别器则无法轻易区分真假。
GAN 的基本原理GAN 的目的是让生成器 G G G 生成逼真的样本,而判别器 D D D 则负责区分生成样本和真实样本。GAN 的整体目标可以描述为一个极大极小的优化问题,即生成器试图最大化判别器的错误率,而判别器则试图最小化其错误率。
判别器: 对于真实数据 P d a t a P_{data}
P d a t a ,判别器希望输出一个接近 1 的值,这表示它认为数据是真实的;对于生成数据 P g P_g P g ,判别器希望输出一个接近 0 的值,这表示它认为数据是造假的。
max D D ( x i ) min D D ( G ( z i ) ) \max_D D(x_i)
\\
\min_D D(G(z_i)) D max D ( x i ) D min D ( G ( z i ) ) 而这个最小化可以转换为最大化,我们转换后合并可得单个样本判别器的损失函数,那么对于所有的样本N,即为其均值最大化
max D { D ( x i ) + [ 1 − D ( G ( z i ) ) ] } = max D { 1 N ∑ i = 1 N D ( x i ) + 1 N ∑ i = 1 N [ 1 − D ( G ( z i ) ) ] } \max_D \left\{ D(x_i) + \left[ 1 - D(G(z_i)) \right] \right\}
\\
=\max_D \left\{ \frac{1}{N} \sum_{i=1}^{N} D(x_i) + \frac{1}{N} \sum_{i=1}^{N} \left[ 1 - D(G(z_i)) \right] \right\}
D max { D ( x i ) + [ 1 − D ( G ( z i ) ) ] } = D max { N 1 i = 1 ∑ N D ( x i ) + N 1 i = 1 ∑ N [ 1 − D ( G ( z i ) ) ] }
再通过将对所有样本的期望值最大化,并对其取对数,简化为一个标准的交叉熵形式,从而提升优化的稳定性。其中,x ∼ p d a t a x \sim p_{data} x ∼ p d a t a :表示样本x x x 来自真实数据的分布p d a t a p_{data} p d a t a ;z ∼ p z z \sim p_z z ∼ p z :表示噪声z z z 来自一个正态分布p z p_z p z 。
max D { E x ∼ p d a t a [ log D ( x ) ] + E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] } \max_D \left\{ \mathbb{E}_{x \sim p_{data}} \left[ \log D(x) \right] + \mathbb{E}_{z \sim p_z} \left[ \log \left( 1 - D(G(z)) \right) \right] \right\}
D max { E x ∼ p d a t a [ log D ( x ) ] + E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] } 由于不断的对抗式优化,最终,生成器生成的样本分布 p g p_g
p g 会逼近真实数据分布 P d a t a P_{data} P d a t a ,此时判别器的目标函数变为
max D { E x ∼ p d a t a [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] } \max_D \left\{ \mathbb{E}_{x \sim p_{data}} \left[ \log D(x) \right] + \mathbb{E}_{x \sim p_g} \left[ \log \left( 1 - D(x) \right)\right] \right\} D max { E x ∼ p d a t a [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] } 生成器: 对于生成的样本,其希望让判别器判别为真的概率越大越好,翻过来说就是希望判别为假的概率越小越好。
min G E x ∼ P g [ log ( 1 − D ( x ) ) ] \min_G \mathbb{E}_{x \sim P_g} \left[ \log(1 - D(x)) \right] G min E x ∼ P g [ log ( 1 − D ( x ) ) ] 损失函数: 来自判别器和生成器,我们把它们合并,就可得到最终的损失函数
min G max D { E x ∼ p d a t a [ log D ( x ) ] + E x ∼ P g [ log ( 1 − D ( x ) ) ] } \min_G \max_D \left\{ \mathbb{E}_{x \sim p_{data}} \left[ \log D(x) \right] + \mathbb{E}_{x \sim P_g} \left[ \log \left( 1 - D(x) \right) \right] \right\}
G min D max { E x ∼ p d a t a [ log D ( x ) ] + E x ∼ P g [ log ( 1 − D ( x ) ) ] } 证明存在最优解: 我们一步一步解决,先求关于D D D 最大化,我们将其写为积分形式
E x ∼ p d a t a [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] = ∫ x [ log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ] d x \mathbb{E}_{x \sim p_{data}} \left[ \log D(x) \right] + \mathbb{E}_{x \sim p_g} \left[ \log (1 - D(x)) \right]
\\
= \int_x \left[ \log D(x) p_{data}(x) + \log (1 - D(x)) p_g(x) \right] dx
E x ∼ p d a t a [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] = ∫ x [ log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ] d x 要求这个积分最大化,即求
max D [ log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ] \max_D \left[ \log D(x) p_{data}(x) + \log (1 - D(x)) p_g(x) \right]
D max [ log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ] 求导
∂ ∂ D ( log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ) = 1 D ( x ) p d a t a ( x ) − 1 1 − D ( x ) p g ( x ) \frac{\partial}{\partial D} \left( \log D(x) p_{data}(x) + \log(1 - D(x)) p_g(x) \right)
\\
= \frac{1}{D(x)} p_{data}(x) - \frac{1}{1 - D(x)} p_g(x)
∂ D ∂ ( log D ( x ) p d a t a ( x ) + log ( 1 − D ( x ) ) p g ( x ) ) = D ( x ) 1 p d a t a ( x ) − 1 − D ( x ) 1 p g ( x ) 令导数等于0,整理解出D ∗ ( x ) D^*(x) D ∗ ( x )
D ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*(x)= \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} D ∗ ( x ) = p d a t a ( x ) + p g ( x ) p d a t a ( x ) 这表明,在最优情况下,判别器对真实样本和生成样本的区分取决于它们在数据分布中的相对密度。接下来,我们将这个最优判别器D ∗ ( x ) D^*(x) D ∗ ( x ) 代入生成器的目标函数。生成器的目标是最小化以下损失函数:
V ( G , D ∗ ) = ∫ x [ p d a t a ( x ) log D ∗ ( x ) + p g ( x ) log ( 1 − D ∗ ( x ) ) ] d x V(G, D^*) = \int_x \left[ p_{data}(x) \log D^*(x) + p_g(x) \log (1 - D^*(x)) \right] dx
V ( G , D ∗ ) = ∫ x [ p d a t a ( x ) log D ∗ ( x ) + p g ( x ) log ( 1 − D ∗ ( x ) ) ] d x 将D ∗ ( x ) D^*(x) D ∗ ( x ) 代入后,我们得到
∫ x [ log ( p d a t a ( x ) p g ( x ) + p d a t a ( x ) 2 ) p d a t a ( x ) d x + log ( p g ( x ) p g ( x ) + p d a t a ( x ) 2 ) p g ( x ) d x ] + log 1 4 = K L ( p d a t a ( x ) ∥ p g ( x ) + p d a t a ( x ) 2 ) + K L ( p g ( x ) ∥ p g ( x ) + p d a t a ( x ) 2 ) − log 4 \int_x \left[ \log \left( \frac{p_{data}(x)}{\frac{p_g(x) + p_{data}(x)}{2}} \right) p_{data}(x) dx + \log \left( \frac{p_g(x)}{\frac{p_g(x) + p_{data}(x)}{2}} \right) p_g(x) dx \right] + \log \frac{1}{4}
\\
=KL \left( p_{data}(x) \middle\| \frac{p_g(x) + p_{data}(x)}{2} \right) + KL \left( p_g(x) \middle\| \frac{p_g(x) + p_{data}(x)}{2} \right) - \log 4 ∫ x [ log ( 2 p g ( x ) + p d a t a ( x ) p d a t a ( x ) ) p d a t a ( x ) d x + log ( 2 p g ( x ) + p d a t a ( x ) p g ( x ) ) p g ( x ) d x ] + log 4 1 = K L ( p d a t a ( x ) ∥ ∥ ∥ ∥ ∥ 2 p g ( x ) + p d a t a ( x ) ) + K L ( p g ( x ) ∥ ∥ ∥ ∥ ∥ 2 p g ( x ) + p d a t a ( x ) ) − log 4
Jensen-Shannon 散度的引入:这个表达式实际上是 Jensen-Shannon 散度的定义。Jensen-Shannon 散度是一种对称的散度度量,用于衡量两个概率分布之间的相似度。它由两个 KL 散度(Kullback-Leibler 散度)组成,并具有以下形式:
J S ( p d a t a ∥ p g ) = 1 2 K L ( p d a t a ( x ) ∥ p g ( x ) + p d a t a ( x ) 2 ) + 1 2 K L ( p g ( x ) ∥ p g ( x ) + p d a t a ( x ) 2 ) JS(p_{data} \| p_g) = \frac{1}{2} KL \left( p_{data}(x) \middle\| \frac{p_g(x) + p_{data}(x)}{2} \right) + \frac{1}{2} KL \left( p_g(x) \middle\| \frac{p_g(x) + p_{data}(x)}{2} \right)
J S ( p d a t a ∥ p g ) = 2 1 K L ( p d a t a ( x ) ∥ ∥ ∥ ∥ ∥ 2 p g ( x ) + p d a t a ( x ) ) + 2 1 K L ( p g ( x ) ∥ ∥ ∥ ∥ ∥ 2 p g ( x ) + p d a t a ( x ) ) 于是生成器的目标变为最小化 Jensen-Shannon 散度:
V ( G , D ∗ ) = − 2 ⋅ J S ( p d a t a ∥ p g ) V(G, D^*) = -2 \cdot JS(p_{data} \| p_g) V ( G , D ∗ ) = − 2 ⋅ J S ( p d a t a ∥ p g ) 当生成器生成的分布p g ( x ) p_g(x) p g ( x ) 与真实数据分布p d a t a ( x ) p_{data}(x) p d a t a ( x ) 完全一致,即p g ( x ) = p d a t a ( x ) p_g(x)=p_{data}(x) p g ( x ) = p d a t a ( x ) 时,J S ( p d a t a ∥ p g ) = 0 JS(p_{data} \| p_g) = 0 J S ( p d a t a ∥ p g ) = 0 。在这种情况下,判别器D ∗ ( x ) = 1 2 D^*(x) = \frac{1}{2} D ∗ ( x ) = 2 1 ,无法区分生成数据与真实数据。因此,生成器和判别器达到平衡,即 GAN 达到最优解。
GAN 的不足之处梯度消失 :如果判别器太强大,它很容易将生成器生成的假数据区分为假数据,此时生成器的梯度会变得非常小,导致更新速度过慢甚至停止更新,无法有效改进生成效果。
我们知道化简后得到的最优判别器结果D ∗ ( x ) D^*(x) D ∗ ( x ) 为
D ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*(x)= \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} D ∗ ( x ) = p d a t a ( x ) + p g ( x ) p d a t a ( x ) 结果从直观上很容易理解,就是看一个样本x x x 来自真实分布和生成分布的可能性的相对比例。这样会出现以下四种情况
① p d a t a ( x ) = 0 ∧ p g ( x ) = 0 ② p d a t a ( x ) ≠ 0 ∧ p g ( x ) ≠ 0 ③ p d a t a ( x ) = 0 ∧ p g ( x ) ≠ 0 ④ p d a t a ( x ) ≠ 0 ∧ p g ( x ) = 0 ①\ p_{data}(x) = 0 \land p_g(x) = 0 \\
②\ p_{data}(x) \neq 0 \land p_g(x) \neq 0 \\
③\ p_{data}(x) = 0 \land p_g(x) \neq 0 \\
④\ p_{data}(x) \neq 0 \land p_g(x) = 0
① p d a t a ( x ) = 0 ∧ p g ( x ) = 0 ② p d a t a ( x ) = 0 ∧ p g ( x ) = 0 ③ p d a t a ( x ) = 0 ∧ p g ( x ) = 0 ④ p d a t a ( x ) = 0 ∧ p g ( x ) = 0 ①对计算 JS 散度无贡献,②由于重叠部分可忽略所以贡献也为0,③会使1 2 K L ( p g ( x ) ∥ p g ( x ) + p d a t a ( x ) 2 ) \frac{1}{2} KL \left( p_g(x) \middle\| \frac{p_g(x) + p_{data}(x)}{2} \right) 2 1 K L ( p g ( x ) ∥ ∥ ∥ ∥ 2 p g ( x ) + p d a t a ( x ) ) 的贡献变为l o g 2 log2 l o g 2 ,④与其类似,最终J S ( p d a t a ∥ p g ) JS(p_{data} \| p_g) J S ( p d a t a ∥ p g ) 为l o g 2 log2 l o g 2
我们不难发现,只要p d a t a p_{data} p d a t a 和p g p_g p g 没有重叠或者重叠部分可忽略,JS散度固定是常数l o g 2 log2 l o g 2 ,换句话来说对于梯度下降方法意味着梯度为0 ,面临梯度消失的问题。而没有重叠或者重叠部分可忽略的可能性非常大
训练不稳定 :GAN 的训练过程非常不稳定,经常出现生成器和判别器之间的平衡难以找到的情况,导致模式崩溃或生成质量不佳。生成器可能会在某些情况下收敛到极端的分布,使得判别器的性能迅速恶化。
在最初的 GAN 设计中,生成器的损失函数通常被表示为:
min G E x ∼ P g [ log ( 1 − D ( x ) ) ] \min_G \mathbb{E}_{x \sim P_g} \left[ \log(1 - D(x)) \right] G min E x ∼ P g [ log ( 1 − D ( x ) ) ] 这是原始 GAN 的生成器损失函数,用于最小化生成样本被判别器判断为假的概率。但是,后来 Ian Goodfellow 提出了 "-log D trick",即为了改善生成器的梯度表现,将生成器的损失函数改为
min G E x ∼ p g [ − log D ( x ) ] \min_G \mathbb{E}_{x \sim p_g} \left[ - \log D(x) \right] G min E x ∼ p g [ − log D ( x ) ] 这个新的损失函数具有更稳定的梯度行为,因为它引导生成器最大化生成样本被判别器判断为真的概率,而不是最小化生成样本被判别器判断为假的概率。我们在上文推导过
E x ∼ p data [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] = 2 ⋅ J S ( p data ∣ ∣ p g ) − 2 log 2 \mathbb{E}_{x \sim p_{\text{data}}} [\log D(x)] + \mathbb{E}_{x \sim p_g} [\log(1 - D(x))]
\\
=2 \cdot JS(p_{\text{data}} || p_g) - 2 \log 2 E x ∼ p data [ log D ( x ) ] + E x ∼ p g [ log ( 1 − D ( x ) ) ] = 2 ⋅ J S ( p data ∣ ∣ p g ) − 2 log 2 进一步推导可以得到包含 KL 散度的转换公式
K L ( P g ∣ ∣ P data ) = E x ∼ P g [ log P g ( x ) P data ( x ) ] = E x ∼ P g [ log P g ( x ) / ( P data ( x ) + P g ( x ) ) P data ( x ) / ( P data ( x ) + P g ( x ) ) ] = E x ∼ P g [ log ( 1 − D ∗ ( x ) ) ] − E x ∼ P g [ log D ∗ ( x ) ] KL(P_g || P_{\text{data}}) = \mathbb{E}_{x \sim P_g} \left[ \log \frac{P_g(x)}{P_{\text{data}}(x)} \right] \\
= \mathbb{E}_{x \sim P_g} \left[ \log \frac{P_g(x) / \left( P_{\text{data}}(x) + P_g(x) \right)}{P_{\text{data}}(x) / \left( P_{\text{data}}(x) + P_g(x) \right)} \right] \\
= \mathbb{E}_{x \sim P_g} \left[ \log (1 - D^*(x)) \right] - \mathbb{E}_{x \sim P_g} \left[ \log D^*(x) \right]
K L ( P g ∣ ∣ P data ) = E x ∼ P g [ log P data ( x ) P g ( x ) ] = E x ∼ P g [ log P data ( x ) / ( P data ( x ) + P g ( x ) ) P g ( x ) / ( P data ( x ) + P g ( x ) ) ] = E x ∼ P g [ log ( 1 − D ∗ ( x ) ) ] − E x ∼ P g [ log D ∗ ( x ) ] 最终生成器的损失函数变为
min G E x ∼ p g [ − log D ( x ) ] = K L ( p g ∣ ∣ p data ) − 2 ⋅ J S ( p data ∣ ∣ p g ) + 2 log 2 + E x ∼ p data [ log D ( x ) ] \min_G \mathbb{E}_{x \sim p_g} \left[ - \log D(x) \right]
\\
=KL(p_g || p_{\text{data}}) - 2 \cdot JS(p_{\text{data}} || p_g) + 2 \log 2 + \mathbb{E}_{x \sim p_{\text{data}}} [\log D(x)] G min E x ∼ p g [ − log D ( x ) ] = K L ( p g ∣ ∣ p data ) − 2 ⋅ J S ( p data ∣ ∣ p g ) + 2 log 2 + E x ∼ p data [ log D ( x ) ] 这进一步简化,我们只要最终有关最小化的表达式为前两项
K L ( p g ∣ ∣ p data ) − 2 ⋅ J S ( p data ∣ ∣ p g ) KL(p_g || p_{\text{data}}) - 2 \cdot JS(p_{\text{data}} || p_g) K L ( p g ∣ ∣ p data ) − 2 ⋅ J S ( p data ∣ ∣ p g ) 于是我们就能发现,GAN 的损失函数存在目标不一致的问题。生成器的目标是最小化真实数据分布p d a t a p_{data} p d a t a 与生成分布p g p_g p g 之间的 KL 散度,同时又要求最大化判别器的 JS 散度。这个要求在理论上是矛盾的:生成器试图让生成分布接近真实分布,而判别器则试图最大化它们之间的差距。这会导致梯度不稳定,进而造成 GAN 的训练过程难以收敛或陷入震荡。
模式崩溃 :模式崩溃是 GAN 的常见问题之一,生成器会输出非常相似的样本,而不是生成多样化的输出。判别器无法有效帮助生成器探索新的模式,导致生成器只输出有限种类的结果。
KL 散度本质上是非对称的。也就是说,K L ( p g ∣ ∣ p data ) KL(p_g || p_{\text{data}}) K L ( p g ∣ ∣ p data ) 和K L ( p data ∣ ∣ p g ) KL(p_{\text{data}} || p_g) K L ( p data ∣ ∣ p g ) 的数值通常不同,且它们惩罚不同类型的错误方式各不相同:
当p g ( x ) p_g(x)
p g ( x ) 非常接近 0 而p d a t a ( x ) p_{data}(x) p d a t a ( x ) 非常接近 1 时,KL 散度会变得非常小。此时,生成器忽略了一些真实样本,但这种错误的惩罚较轻微。 当p g ( x ) p_g(x)
p g ( x ) 非常接近 1 而p d a t a ( x ) p_{data}(x) p d a t a ( x ) 非常接近 0 时,KL 散度会趋向无穷大。这意味着生成器生成了一些不真实的样本,此类错误会被大幅度惩罚。 这种非对称性使得生成器更倾向于生成一些“安全”的样本,以避免产生巨大的惩罚。结果,生成器会忽略多样性,而是不断生成有限的、相对“安全”的模式。这就是模式崩溃现象:生成器只生成少量相似的样本,而不捕捉真实数据分布的多样性。
【WGAN】Wasserstein GAN 为了解决 GAN 的上述不足,WGAN 引入了 Wasserstein 距离来代替原始 GAN 使用的 JS 散度。WGAN 对 GAN 进行了一些重要的改进,为生成对抗网络 的训练带来了更稳定的梯度和更有意义的收敛性。
WGAN 的模型思想Wasserstein 距离的引入: 在 GAN 中,生成器G G G 试图从一个简单的分布(如标准正态分布)中生成样本,并通过判别器D D D 来判断生成的样本是否与真实数据相似。传统的 GAN 使用 JS 散度作为生成分布 P g P_g P g 与真实数据分布P data P_{\text{data}} P data 之间的度量。
但如你所见,JS 散度在生成分布和真实数据分布不重叠时,导致梯度消失问题。这是因为 JS 散度在不重叠的情况下,无法提供有意义的梯度信息,生成器无法继续学习。
WGAN 的核心思想是用 Wasserstein 距离代替传统 GAN 中的 JS 散度,以解决训练不稳定性和梯度消失的问题。WGAN 使用了一个改进后的损失函数,它直接最小化真实分布P data P_{\text{data}} P data 和生成分布P g P_g
P g 之间的 Wasserstein 距离。
我们先来介绍 Wasserstein 距离,也称 Earth-Mover 距离,EM 距离。它是用来衡量两个概率分布之间差异的一种度量,在数学上给定两个概率分布P r P_r P r (真实数据分布)和P g P_g P g (生成器生成的数据分布),Wasserstein 距离定义为:
W ( P data , P g ) = inf γ ∼ Π ( P data , P g ) E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] W(P_{\text{data}}, P_g) = \inf_{\gamma \sim \Pi(P_{\text{data}}, P_g)} \mathbb{E}_{(x, y) \sim \gamma} [||x - y||] W ( P data , P g ) = γ ∼ Π ( P data , P g ) inf E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] 其中,Π ( P data , P g ) \Pi(P_{\text{data}}, P_g) Π ( P data , P g ) 是真实数据分布P data P_{\text{data}} P data 和生成器分布P g P_g
P g 组成的所有可能联合分布的集合。在这些联合分布中,每个分布的边缘分布分别是P data P_{\text{data}} P data 和P g P_g
P g 。直观上,Wasserstein 距离度量的是将生成分布P g P_g
P g 转化为真实分布P data P_{\text{data}} P data 所需的“最小努力”。
Wasserstein 距离解决了 GAN 中的梯度消失问题,因为它可以在生成分布P g P_g
P g 和真实分布P data P_{\text{data}} P data 之间没有重叠的情况下,仍然提供有意义的梯度。这使得生成器可以更加稳定地更新,提升生成样本的质量。正因如此,Wasserstein 距离成为了 WGAN 中核心的度量标准,用于改进 GAN 的训练稳定性。
WGAN 的基本原理WGAN 通过引入 Critic 网络代替传统 GAN 中的判别器,Critic 的目标不是分类真假样本,而是尽可能拉大真实数据和生成数据的分数差距。Critic 的输出值是一个标量,用于衡量输入样本的“质量”。并使用了一个新的目标函数,对 Critic 施加了 1-Lipschitz 连续性约束,使得训练过程更加稳定,并使生成器能够获得平滑的梯度更新。
Wasserstein 距离的定义为
W ( P data , P g ) = inf γ ∼ Π ( P data , P g ) E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] W(P_{\text{data}}, P_g) = \inf_{\gamma \sim \Pi(P_{\text{data}}, P_g)} \mathbb{E}_{(x, y) \sim \gamma} [||x - y||] W ( P data , P g ) = γ ∼ Π ( P data , P g ) inf E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] 在 WGAN 中,我们通过 Kantorovich-Rubinstein 对偶性 将 Wasserstein 距离定义为
W ( P data , P g ) = sup ∥ f ∥ L ≤ 1 E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] W(P_{\text{data}}, P_g) = \sup_{\|f\|_L \leq 1} \mathbb{E}_{x \sim P_{\text{data}}} [f(x)] - \mathbb{E}_{x \sim P_g} [f(x)] W ( P data , P g ) = ∥ f ∥ L ≤ 1 sup E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] 这里的f f f 是一个 1-Lipschitz 连续函数。这个定义表明 Wasserstein 距离衡量的是真实数据分布P data P_{\text{data}} P data 和生成数据分布P g P_g P g 在所有 1-Lipschitz 连续函数下的分数差异的最大值。
Lipschitz 连续性要求函数的变化速度受到限制,即对于任意的x 1 x_1 x 1 ,x 2 x_2 x 2 有
∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ ∣ x 1 − x 2 ∣ |f(x_1) - f(x_2)| \leq |x_1 - x_2| ∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ ∣ x 1 − x 2 ∣ WGAN 的优化目标: WGAN 的优化目标可以明确分为两部分:Critic 的优化和生成器的优化。
Critic 的目标 是通过最大化 Wasserstein 距离来区分真实样本和生成样本,因此 Critic 的损失函数可以表示为:
L Critic = E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] L_{\text{Critic}} = \mathbb{E}_{x \sim P_{\text{data}}} [f(x)] - \mathbb{E}_{x \sim P_g} [f(x)] L Critic = E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] 生成器的目标 是通过最小化 Wasserstein 距离,使得生成的样本更加接近真实样本,生成器的损失函数可以表示为:
L Generator = − E x ∼ P g [ f ( x ) ] L_{\text{Generator}} = -\mathbb{E}_{x \sim P_g} [f(x)] L Generator = − E x ∼ P g [ f ( x ) ] 可行性证明: 通过对 Kantorovich-Rubinstein 对偶性 的应用,我们可以证明该优化问题的可行性。具体来说,我们的目标是证明存在一个最优的 1-Lipschitz 函数 f ∗ f^* f ∗ ,使得该问题有解。我们从以下最大化问题出发
max ∥ f ∥ L ≤ 1 ( E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] ) \max_{\|f\|_L \leq 1} \left( \mathbb{E}_{x \sim P_{\text{data}}} [f(x)] - \mathbb{E}_{x \sim P_g} [f(x)] \right) ∥ f ∥ L ≤ 1 max ( E x ∼ P data [ f ( x ) ] − E x ∼ P g [ f ( x ) ] ) 其中f f f 是在 1-Lipschitz 函数空间内优化的目标函数。这意味着我们要在所有满足∥ f ∥ L ≤ 1 \|f\|_L \leq 1 ∥ f ∥ L ≤ 1 的函数空间中找到使得期望值差异最大的函数f f f 。
我们知道1-Lipschitz 条件要求对于任意x 1 , x 2 ∈ X x_1, x_2 \in \mathcal{X} x 1 , x 2 ∈ X ,函数f f f 满足
∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ ∣ x 1 − x 2 ∣ |f(x_1) - f(x_2)| \leq |x_1 - x_2| ∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ ∣ x 1 − x 2 ∣ 这确保了函数的输出变化不会超过输入变化的速度。
根据优化理论,在函数空间中,若约束条件是线性且目标函数是连续的,并且我们处理的是紧致函数空间,那么可以确保最优解的存在性。
紧致性: 由于 1-Lipschitz 连续性为函数f f f 加上了限制,这确保了函数空间是紧致的,即任何序列的函数f i f_i f i 都有收敛到某个函数f ∗ f^* f ∗ 的子序列。这使得最大化问题可以在紧致空间中实现。
目标函数的连续性: 期望函数E x ∼ P data [ f ( x ) ] \mathbb{E}_{x \sim P_{\text{data}}} [f(x)] E x ∼ P data [ f ( x ) ] 和E x ∼ P g [ f ( x ) ] \mathbb{E}_{x \sim P_g} [f(x)] E x ∼ P g [ f ( x ) ] 是连续的,且函数 f f f 在紧致空间中的变化是受控的。
因此,该优化问题是有解的,即:存在一个最优的 1-Lipschitz 函数f ∗ f^* f ∗ ,使得优化问题的最大值可以被实现。这是通过最优化理论中的极大值定理来保证的。
推导最优解的梯度表达式: 我们现在需要计算 Wasserstein 距离关于生成器参数θ \theta θ 的梯度,以便指导生成器的更新。生成数据分布P g P_g P g 是由生成器G θ ( z ) G_\theta(z) G θ ( z ) 参数化的,其中z z z 是噪声变量,具有分布p ( z ) p(z) p ( z ) 。因此,生成器的目标是最小化 Wasserstein 距离:
min θ W ( P data , P g ) \min_\theta W(P_{\text{data}}, P_g) θ min W ( P data , P g ) 我们可以通过求解W ( P data , P g ) W(P_{\text{data}}, P_g) W ( P data , P g ) 关于θ \theta θ 的梯度来实现这一目标
∇ θ W ( P data , P g ) = − E z ∼ p ( z ) [ ∇ θ f ∗ ( G θ ( z ) ) ] \nabla_\theta W(P_{\text{data}}, P_g) = - \mathbb{E}_{z \sim p(z)} \left[ \nabla_\theta f^*(G_\theta(z)) \right] ∇ θ W ( P data , P g ) = − E z ∼ p ( z ) [ ∇ θ f ∗ ( G θ ( z ) ) ] 这里,f ∗ f^* f ∗ 是在最大化问题中找到的最优 1-Lipschitz 函数。这个表达式表明 Wasserstein 距离的梯度可以通过最优函数f ∗ f^* f ∗ 对生成器参数的导数来计算。
WGAN 的不足之处权重剪切的局限性: 在 WGAN 的实际实现中,权重剪切被用于确保 Critic 满足 1-Lipschitz 连续性。它可能会导致梯度消失或爆炸,特别是在高维数据或复杂生成器的情况下。同时,权重剪切的简单性使得它容易忽视复杂神经网络的动态特性。后续的研究(如 WGAN-GP)使用了 梯度惩罚(Gradient Penalty) 来代替权重剪切。这种方法能够更好地满足 1-Lipschitz 条件,同时保持 Critic 的学习能力。