本地搜索 。如前文所讨论的符号执行,试图找到测试输入以最大化路径覆盖率 。我们把这样的符号搜索策略称为全局搜索 。通过种子数据或符号执行产生的一些测试输入将具有鉴别性 。为了增加歧视性测试用例的可能性,我们利用了这样一个事实:我们可以执行测试用例并检查它们是否具有判别性,然后根据这一点,生成更多的测试用例 。
一旦发现了一个具有歧视性的测试用例,比如说 t,我们就尝试进一步生成更多的测试输入,这可能会导致个体歧视 。关键思想是否定 t 的决策树的非保护属性约束,以生成更多的测试输入 。通过切换一个与非保护属性相关的约束,并生成一个解决结果约束的输入,算法试图探索判别路径 p 的邻域,这种形式的符号执行就是我们所说的局部搜索,因为它倾向于搜索判别测试案例的局部性 。这种方式之所以有效,是因为机器学习模型固有的对抗性鲁棒性属性,它证明了输入的微小扰动会导致分类器决策的改变 。
粘性解决方案 。局部搜索和全局搜索的目的是遍历尽可能多的路径 。局部搜索集中在探索判别路径附近的路径,即由判别输入产生的路径 。因此,我们只能得到一个约束的解 。但是,为了照顾到局部线性模型可能引起的相似情况,我们使用与前一个约束(与判别输入有关)的解接近的约束求解器的解 。我们把这样的解称为粘性解 。由于粘性,如果我们否定了一个谓词,那么对于剩下的谓词,它就会趋向于取与前一个解相同的值 。
本地搜索和全局搜索的排序 。在综合算法 2 中,提出了三个参考等级,即 Rank1、Rank2 和 Rank3,分别为种子输入、本地搜索和全局搜索各一个 。这些等级的设置方式是:根据其发现引起歧视的输入的能力,给予本地搜索最高的优先级,其次是种子输入,进一步是全局搜索(见算法 2 的第 3、18、32 行) 。
实验评估基线特征 。我们对表 1 所列的 8 个不同来源的开源公平性基线进行了实验 。
文章插图
配置 。我们的代码是用 Python 写的,用 Python 2.7.12 执行 。所有的实验都是在运行 Ubuntu 16.04 的机器上进行的,有 16GB 内存,2.4Ghz 的 CPU,运行 Intel Core i5 。我们使用了 LIME 来进行局部解释 。我们使用 K-means 对输入的种子数据进行聚类 。由于我们的用例需要在较少的时间内生成更多的测试用例,K-means 是最简单和最快的聚类算法之一,被证明是一个合理的选择 。事实上,用于运行我们的实验的数据集具有两个或四个真正的类标签,这推动了将聚类数设置为 4 的逻辑假设 。这一点使用散点图进一步验证,如图 2 所示,它清楚地描绘了种子数据中的四个不同的聚类 。
文章插图
与 THEMIS 的比较 。我们从他们的 GitHub 仓库中获取了 THEMIS 的代码,在仔细分析他们的代码后,我们发现了开放源码中的一个意外行为 。THEMIS 实际上生成了重复的测试用例,他们报告的实验统计也包含了这些重复的测试用例 。这是随机测试用例生成带来的问题之一,因为它会产生重复的测试用例 。我们对 THEMIS 的代码进行了修改,以去除重复的测试案例,用于我们的实验评估 。
文章插图
与 AEQUITAS 比较 。AEQUITAS 算法在两个搜索阶段运行--全局和局部 。全局阶段考虑测试用例数量的限制,并通过对输入空间的随机抽样来生成测试用例 。在所有这些生成的测试用例中,有少数测试用例具有鉴别性 。然后,局部阶段开始将全局搜索阶段确定的每个判别性输入作为输入,并对其进行扰动,以进一步生成更多的测试用例 。这个阶段就像之前的全局搜索一样,考虑了对生成的测试用例数量的限制 。他们应用了三种不同类型的扰动,导致算法的三种不同变化 。
推荐阅读
- 黑洞内部有什么?物理学家使用量子计算、机器学习来找出答案
- Docker学习12 使用Compose管理容器集群
- 高通公司宣布推出RB5机器人平台 提供功能强大的SBC
- firefox-hackbar-2.2.9 自签名学习版破解全过程
- 混淆矩阵-不再那么令人混淆了
- 学习练太极 容易进入这几个误区
- 最开始学习太极拳 你就应该知道的事
- 学习气功的动作和要求 练习时候要掌握
- 瑜伽怎么学习呢?
- 哪里学习瑜伽呢?