判别器的损失函数通常使用二元交叉熵(Binary Cross-Entropy):
L D = − E x ∼ p data [ log D ( x ) ] − E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] L_D = - \mathbb{E}{x \sim p{\text{data}}} [\log D(x)] - \mathbb{E}_{z \sim p_z} [\log(1 - D(G(z)))] LD=−Ex∼pdata[logD(x)]−Ez∼pz[log(1−D(G(z)))]
参数含义:
x x x:真实数据样本 ,来自于真实数据分布 p data p_{\text{data}} pdata。
z z z:生成器 输入的噪声向量,通常从均匀分布或正态分布中采样。
D ( x ) D(x) D(x):判别器 对真实样本 x x x 的输出,表示判别器认为该样本是真实数据的概率。
D ( G ( z ) ) D(G(z)) D(G(z)):判别器 对生成数据 G ( z ) G(z) G(z) 的输出,表示判别器认为该样本为真实数据的概率。
判别器损失的计算过程:
第一部分 :
− E x ∼ p data [ log D ( x ) ] - \mathbb{E}{x \sim p{\text{data}}} [\log D(x)] −Ex∼pdata[logD(x)]
表示对真实样本的损失。
判别器希望尽量将真实数据的输出 D ( x ) D(x) D(x) 接近 1,因此这部分的目标是最小化 log D ( x ) \log D(x) logD(x)。
第二部分 :
− E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] - \mathbb{E}_{z \sim p_z} [\log(1 - D(G(z)))] −Ez∼pz[log(1−D(G(z)))]
表示对生成样本的损失。
判别器希望尽量将生成数据的输出 D ( G ( z ) ) D(G(z)) D(G(z)) 接近 0,因此这部分的目标是最小化 log ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1−D(G(z)))。
L G = − E z ∼ p z [ log D ( G ( z ) ) ] L_G = -\mathbb{E}_{z \sim p_z} [\log D(G(z))] LG=−Ez∼pz[logD(G(z))]
参数含义:
z z z:生成器输入的噪声向量,通常从均匀分布或正态分布中采样。
D ( G ( z ) ) D(G(z)) D(G(z)):判别器对生成数据 G ( z ) G(z) G(z) 的输出,表示判别器认为生成样本为真实数据的概率。
生成器损失的计算过程:
损失形式 :
− E z ∼ p z [ log D ( G ( z ) ) ] -\mathbb{E}_{z \sim p_z} [\log D(G(z))] −Ez∼pz[logD(G(z))]
生成器的目标是使 D ( G ( z ) ) D(G(z)) D(G(z)) 接近 1,也就是希望判别器对生成的样本做出"真实"的判断。
目标 :
生成器通过最大化判别器对生成样本的输出,使得判别器无法区分生成样本和真实样本。
生成器的目标是最小化该损失 ,即最大化判别器对生成样本的输出。
交替优化
在每轮训练中:
固定生成器,训练判别器。
固定判别器,训练生成器。
通过交替优化 ,两者不断改进,生成器的生成样本越来越逼真,而判别器的分辨能力也不断提高。
目标函数
GAN 的目标是找到一个平衡点 ,使生成器生成的样本和真实数据在分布上尽可能接近 。它是一个极小极大(minimax)损失函数 ,表达了生成器和判别器的博弈:
min G max D V ( D , G ) = E x ∼ p data [ log D ( x ) ] + E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}{x \sim p{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))] GminDmaxV(D,G)=Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
参数含义:
G G G:生成器的参数。
D D D:判别器的参数。
x x x:真实样本,来自真实数据分布 p data p_{\text{data}} pdata。
z z z:噪声输入,通常从均匀分布或正态分布中采样。
D ( x ) D(x) D(x):判别器对真实样本 x x x 的输出概率。
D ( G ( z ) ) D(G(z)) D(G(z)):判别器对生成样本的输出概率。
这个目标函数包含两个部分:
最大化判别器的目标 :判别器希望最大化 log D ( x ) \log D(x) logD(x) 和 log ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1−D(G(z))),即尽可能将真实数据判断为真实样本、生成数据判断为生成样本。
最小化生成器的目标 :生成器希望最小化 log ( 1 − D ( G ( z ) ) ) \log(1 - D(G(z))) log(1−D(G(z))),即生成器希望生成的样本尽可能接近真实样本,以欺骗判别器。
实际的 GAN 训练过程中,不会直接出现极小极大损失函数 ,而是通过优化生成器和判别器的各自损失函 数来间接实现 这个目标。
GAN 的损失函数由生成器和判别器的对抗损失组成。目标是找到一个平衡点,使生成器能够生成与真实样本分布相近的样本。
判别器损失 :
(参考上节)
生成器损失 :
(参考上节)
3. 训练过程的迭代
训练过程的每一轮迭代中,生成器和判别器会交替优化。一般的训练过程如下:
判别器训练步骤
判别器的目标是区分真实样本和生成样本。每轮判别器训练分为以下步骤:
从真实数据分布中采样一批真实样本 x x x。
生成器从随机噪声分布 z z z(通常为正态分布或均匀分布)中采样一批噪声向量 ,并生成对应的样本 G ( z ) G(z) G(z)。
将真实样本 x x x 和生成样本 G ( z ) G(z) G(z) 分别输入判别器 D D D 。判别器是一个二分类神经网络,通常由卷积层 构成,以提取样本的特征 。输出 是一个概率值 ,表示输入样本为真实样本的概率。计算出对真实样本的输出 D ( x ) D(x) D(x) 和生成样本的输出 D ( G ( z ) ) D(G(z)) D(G(z))。
根据判别器损失函数 L D L_D LD计算判别器的损失,更新判别器的参数,使其能够更好地区分真实样本和生成样本。
GAN 的生成样本质量较难定量评估,目前常用的 FID(Fréchet Inception Distance)等指标也无法完全反映样本质量。
总结
GAN 是一种强大的生成模型,通过生成器和判别器的对抗训练,使得生成器能够生成接近真实的数据。GAN 的多种变体和改进版本在图像生成、数据增强、风格转换等领域取得了显著成果。尽管 GAN 面临训练不稳定、模式崩溃等挑战,但它的生成能力为多个领域的研究和应用提供了新的可能性。未来的研究将继续优化 GAN 的稳定性和多样性,扩展其在不同场景的应用。