FasterFuzzing 首次提出用 GAN 替代 RNN。GAN 通过学习收集样本的统计分布来直接生成新样本。由 GAN 生成的测试用例类似于真实测试用例,但仍然略有不同。这种微小的差异遵循收集数据的分布。尽管 FasterFuzzing 中实现了基于 GAN 的模型,但实验中使用的测试用例规模仍然太小以至于没有太多意义。用于证明其有效性的可靠实验数据仍然不足。
Ganfuzz 提出了一个使用工业协议作为主要测试输入的框架。Ganfuzz 利用 RNN 作为 GAN 的生成器部分,并提高了代码覆盖率。然而,Ganfuzz 仍受限于 RNN 和独特的数据结构。
其中,G和D分别表示GAN中的生成器和判别器。符号 x∼p(x) 表示真实数据分布,即生成器G希望从中学习的数据分布。符号 z∼p(z) 表示先验输入噪声,它打断了生成器 G 的学习过程。该方程展示了生成器G和判别器D之间的动态平衡。生成器的目标是获得与真实数据分布距离最小的生成数据。
在引入 WGAN-GP 之前,Wasserstein GAN (WGAN)从Wasserstein距离的角度改进了GAN模型。它改善了原始GAN在训练不稳定性方面的问题。Wasserstein距离如公式(2)所示。Wasserstein距离描述了从一个分布到另一个分布的最小代价。与JS散度和KL散度性能不佳的情况不同,Wasserstein距离可以通过相对平滑的度量稳定训练过程。