天天看点

[论文解读] Guiding Deep Learning System Testing using Surprise AdequacyGuiding Deep Learning System Testing using Surprise Adequacy

Guiding Deep Learning System Testing using Surprise Adequacy

简介

文章目录

  • Guiding Deep Learning System Testing using Surprise Adequacy
    • 简介
    • 核心内容
      • 预备定义
      • SA: 意外充分性
        • 算法一般步骤
        • LSA: 基于可能性的SA
          • 核心思想
          • 注意
          • 公式定义
            • 密度函数 f x fx fx
            • LSA定义
        • DSA: 基于距离的SA
          • 核心思想
          • 注意
          • 公式定义
            • 计算 d i s t a dist_a dista​
            • 计算 d i s t b dist_b distb​
            • DSA定义
      • SC: 意外覆盖率
        • 定义
        • 注意
    • 其他
        • 研究问题 RQ
        • 实验
        • 结果

论文标题:

  • Guiding Deep Learning System Testing using Surprise Adequacy
  • 使用惊讶指标SA来构建深度学习测试系统
  • 2018.8.25

现状

目前有两个假设

  1. 蜕变测试(metamorphic testing): dl系统的两个输入在某些人类感觉上是相似的,那么输出也应该是相似的
  2. 一组输入越多样化,可以对dl系统执行的测试就越有效。(违反第一个假设的输入也会增加神经元覆盖率。)

作者观点

  1. 传统的白盒测试技术旨在增加结构覆盖对dl系统不是很有用,因为它们的行为没有在控制流结构中显式地编码
  2. ad hoc testing 随机测试,现在的方式是使用统计,聚合的方式评价测试集的有效性,但是对于单个输入而言,这是不够的.例如:
    1. 现在还不清楚什么时候一个高NC的输入应该被认为比另一个低NC的输入更好,以及为什么
    2. 某些输入可能比其他输入自然激活更多阈值以上的神经元。

该论文提出了一个叫SA的指标,该指标用于衡量新用例相对于训练集中用例的多样性程度.指标越大分类器越容易分错

基于SC的方法是黑盒方法,它对每个测试用例打分(LSA/DSA),从而来评价用例,其覆盖率不同于以往的白盒方式得到的覆盖率,不是基于神经元而是基于用例的SA分布,选取不同的阈值会得到不同的覆盖结果

LSA DSA 都依赖于原始训练集

核心内容

  • SA: 意外充分性(Surprise Adequacy )
  • SC: 意外覆盖率 (Surprise Coverage)

预备定义

符号定义

设 N = { n 1 , n 2 … } \mathbf{N}=\left\{n_{1}, n_{2}\ldots\right\} N={n1​,n2​…}是组成一个dl系统 d d d的一组神经元

设 X = { x 1 , x 2 , … } X=\left\{x_{1}, x_{2}, \ldots\right\} X={x1​,x2​,…}是一组输入

设 α n ( x ) \alpha_{n}(x) αn​(x)是单个神经元 n n n相对于输入 x x x的激活值

另 N ⊆ N N \subseteq \mathbf{N} N⊆N,其中 n n n是神经元N的子集

α N ( x ) \alpha_{N}(x) αN​(x) 代表激活向量,其中每个元素对应于 N N N中的单个神经元.(激活值的向量组合)

∣ N ∣ |N| ∣N∣是 α N ( x ) \alpha_{N}(x) αN​(x)的模

激活迹(Activation Trace) AT

对于一组输入 X : A N ( X ) = { α N ( x ) ∣ x ∈ X } X : A_{N}(X)=\left\{\alpha_{N}(x) | x \in X\right\} X:AN​(X)={αN​(x)∣x∈X} A N ( X ) A_{N}(X) AN​(X) 是一组激活迹.

就是所有测试用例激活向量的集合

SA: 意外充分性

SA旨在衡量给定新输入相对于用于训练的输入的相对新颖性,是DL系统如何对未知输入做出反应的指标

注意: SA值依赖于原始训练集

算法一般步骤

  1. 获取激活迹 A N ( X ) A_{N}(X) AN​(X)

    对于一个训练集 T T T,使用 T T T中所有的训练用例,计算出所有神经元的激活值后拼接到一起,从而得到 A N ( T ) A_{\mathbf{N}}(\mathbf{T}) AN​(T),使用激活 迹公式 X : A N ( X ) = { α N ( x ) ∣ x ∈ X } X : A_{N}(X)=\left\{\alpha_{N}(x) | x \in X\right\} X:AN​(X)={αN​(x)∣x∈X}获取激活迹.

  2. 计算 A N ( x ) A_{N}(x) AN​(x)

    对于新的输入 x x x,我们通过比较 A N ( x A_{N}(x AN​(x)与 A N ( T ) A_{\mathbf{N}}(\mathbf{T}) AN​(T)来计算出Surprise Adequacy (SA).具体计算方法有LSA和DSA两种

注意

对于用SA衡量分类任务时,我们只关注分为该类的训练集里的例子,即: T c ∈ T T_{c}∈T Tc​∈T,我们只关心 A N ( T c ) A_{\mathbf{N}}\left(T_{c}\right) AN​(Tc​),这样更有意义.

SA的计算方法

  • LSA: 基于可能性的SA (Likelihood-based Surprise Adequacy)
  • DSA: 基于距离的SA (Distance-based Surprise Adequacy)

LSA: 基于可能性的SA

核心思想

LSA: 采用核密度估计(KDE)来获得输入数据的分布密度函数,这里使用高斯核函数

注意

在这种方法的时候,为了减少计算量,有如下两种规则

  1. 只选定特定的某层

    对于所有的测试用例,我们只考虑一个选定层 N L ⊆ N N_{L} \subseteq \mathbf{N} NL​⊆N中的神经元和他们的激活轨迹 A N L ( X ) A_{N_{L}}(\mathbf{X}) ANL​​(X),每个轨迹的基数为 ∣ N L ∣ \left|N_{L}\right| ∣NL​∣

  2. 方差过滤

    过滤掉那些激活值的方差小于预先定义的阈值 t t t的神经元

公式定义

密度函数 f x fx fx

KDE产生密度函数f如下:

f ^ ( x ) = 1 ∣ A N L ( T ) ∣ ∑ x i ∈ T K H ( α N L ( x ) − α N L ( x i ) ) \hat{f}(x)=\frac{1}{\left|A_{N_{L}}(\mathbf{T})\right|} \sum_{x_{i} \in \mathbf{T}} K_{H}\left(\alpha_{N_{L}}(x)-\alpha_{N_{L}}\left(x_{i}\right)\right) f^​(x)=∣ANL​​(T)∣1​xi​∈T∑​KH​(αNL​​(x)−αNL​​(xi​))

其中 :

A N L ( x A_{N_{L}}(x ANL​​(x): 给定输入在 N L N_{L} NL​层中的激活迹

A N L ( x i ) , x i ∈ T A_{N_{L}}\left(x_{i}\right){, x_{i} \in \mathbf{T}} ANL​​(xi​),xi​∈T: 训练集中的某个样本在 N L N_{L} NL​层中的激活迹

∣ A N L ( T ) ∣ \left|A_{N_{L}}(\mathbf{T})\right| ∣ANL​​(T)∣:激活迹的个数

公式的直观理解:在选定Nl层后,对于所有的训练集中的用例,每个用例使用高斯核函数计算该用例与新输入x的激活迹的差值

概率密度降低了,证明输入更加稀有,概率密度增高了,证明输入更加相似

LSA定义

L S A ( x ) = − log ⁡ ( f ^ ( x ) ) L S A(x)=-\log (\hat{f}(x)) LSA(x)=−log(f^​(x))

LSA因为只选择了某层的神经元,再加上kde只在原始训练集上执行一次,所以运行速度很快

DSA: 基于距离的SA

核心思想

寻找某个用例最近的相同类别和不同类别的用例,并计算距离比,这个值反映了决策边界的相对距离

注意

DSA 只适用于分类任务

公式定义

计算 d i s t a dist_a dista​

x a = arg ⁡ min ⁡ D ( x i ) = c x ∥ α N ( x ) − α N ( x i ) ∥ dist a = ∥ α N ( x ) − α N ( x a ) ∥ \begin{array}{l}{x_{a}=\arg \min _{\mathbf{D}\left(x_{i}\right)=c_{x}}\left\|\alpha_{\mathbf{N}}(x)-\alpha_{\mathbf{N}}\left(x_{i}\right)\right\|} \\ {\text {dist}_{a}=\left\|\alpha_{\mathbf{N}}(x)-\alpha_{\mathbf{N}}\left(x_{a}\right)\right\|}\end{array} xa​=argminD(xi​)=cx​​∥αN​(x)−αN​(xi​)∥dista​=∥αN​(x)−αN​(xa​)∥​

理解:

  • x i x_{i} xi​: 是训练集中的某个用例, α N ( x i ) \alpha_{\mathrm{N}}\left(x_{i}\right) αN​(xi​)则是它的激活迹
  • α N ( x ) \alpha_{\mathrm{N}}(x) αN​(x): 是新输入的用例的激活迹,这里求他们的距离,使用的是欧式距离
  • arg ⁡ min ⁡ D ( x i ) = c x \arg \min _{\mathbf{D}\left(x_{i}\right)=c_{x}} argminD(xi​)=cx​​:明确指出只从同类的用例中寻找一个距离最小的
  • x a x_{a} xa​: 就是那个点,称作参考点.
  • dist a \text {dist}_{a} dista​: 找到该点后,计算新用例和该参考点之间的欧式距离

计算 d i s t b dist_b distb​

x b = argmin ⁡ D ( x i ) ∈ C \ { c x } ∥ α N ( x a ) − α N ( x i ) ∥ dist b = ∥ α N ( x a ) − α N ( x b ) ∥ \begin{array}{l}{x_{b}=\operatorname{argmin}_{\mathbf{D}\left(x_{i}\right) \in C \backslash\left\{c_{x}\right\}}\left\|\alpha_{\mathbf{N}}\left(x_{a}\right)-\alpha_{\mathbf{N}}\left(x_{i}\right)\right\|} \\ {\text {dist}_{b}=\left\|\alpha_{\mathbf{N}}\left(x_{a}\right)-\alpha_{\mathbf{N}}\left(x_{b}\right)\right\|}\end{array} xb​=argminD(xi​)∈C\{cx​}​∥αN​(xa​)−αN​(xi​)∥distb​=∥αN​(xa​)−αN​(xb​)∥​

理解:

​ 同样的方法去找点,只不过这次是在类不相同的用例之间寻找到一个距离最小的

DSA定义

D S A ( x ) = d i s t a d i s t b DS A(x)=\frac{d i s t_{a}}{d i s t_{b}} DSA(x)=distb​dista​​

形象解释

[论文解读] Guiding Deep Learning System Testing using Surprise AdequacyGuiding Deep Learning System Testing using Surprise Adequacy

图中黑线则是DSA的两个距离

DSA因为每个样本都需要去寻找两次距离,复杂度很高,在训练集较大的情况下,运行速度就会变得非常慢

SC: 意外覆盖率

定义

给定 U U U的上界, 将 ( 0 , U ] (0, U] (0,U] 分成 n n n个 S A SA SA段的 b u c k e t : B = { b 1 , b 2 , … , b n } bucket: B=\left\{b_{1}, b_{2}, \ldots, b_{n}\right\} bucket:B={b1​,b2​,…,bn​},一组输入 x x x的 S C SC SC定义如下

S C ( X ) = ∣ { b i ∣ ∃ x ∈ X : S A ( x ) ∈ ( U ⋅ i − 1 n , U ⋅ i n ] } ∣ n S C(X)=\frac{\left|\left\{b_{i} | \exists x \in X : S A(x) \in\left(U \cdot \frac{i-1}{n}, U \cdot \frac{i}{n}\right]\right\}\right|}{n} SC(X)=n∣∣​{bi​∣∃x∈X:SA(x)∈(U⋅ni−1​,U⋅ni​]}∣∣​​

最后的覆盖率是指被覆盖的段数除以总段数

注意

  1. 一组具有较高SC的输入是一组多样化的输入
  2. 然而,具有任意高sa值的输入可能与问题域无关(如交通标志的图像将与动物图片分类器的测试无关)。
  3. 因此,SC只能相对于预定义的上界来测量

其他

研究问题 RQ

  1. sadl是否能够捕捉到dl系统输入的相对惊喜?
    • 更令人惊讶的输入更难正确分类
    • 基于sa值来检测对抗性示例,因为我们期望对抗性示例更令人惊讶
    • 我们期望基于sa的分类器能够成功地检测出对抗性的例子
  2. 层敏感性:用于SA计算的神经元层的选择是否对SA反映DL系统行为的准确性有任何影响?
  3. 相关性:SC是否与DL系统的现有覆盖标准相关?
  4. 再训练:SA可以指导DL系统的再训练吗?

实验

参数选择

  • lsa的默认激活方差阈值设置为 1 0 − 5 10^{-5} 10−5
  • kde的带宽使用scott规则设置

结果

  • 结论1: 基于三个不同的分析,RQ1的答案是SADL可以捕获输入的相对意外。 具有较高SA的输入难以正确分类; 对抗性示例显示较高的SA值,因此可以根据SA进行分类。
    • 先选SA大的可以明显发现dl开始的准确率不高,先选SA小的可以明显发现dl开始的准确率高
    • 对抗用例的SA值和非对抗用例的SA值差距较明显
  • 结论2:基于这些结果,我们回答rq2,dsa对计算层的选择是敏感的,并且从选择更深的层中受益。然而,对于lsa,没有明确的证据支持更深层的假设。在不同的对抗性范例生成策略中,层次敏感度是不同的。
  • 结论3:总体而言,除了NC,我们回答RQ3,即SC与到目前为止引入的其他覆盖标准相关。

就是SC增加了别的类似于KMNC的也增加了

  • 结论4: SA可以提供指导更有效的再训练adversarial examples的例子。

继续阅读