DeepGauge Multi-Granularity Testing Criteria for Deep Learning Systems
文章目录
简介
论文标题
- DeepGauge Multi-Granularity Testing Criteria for Deep Learning Systems
- DeepGauge:深度学习系统的多粒度测试标准
- 2018年9月3日至7日
核心内容
- 提出了一系列的DNN的测试标准
- 涉及到了4种对抗样本生成技术
现状,背景,动机
- 仅从dl输出来测量软件质量是肤浅的
- 需要一组测试标准,而不是基于dl决策输出的唯一标准
- 传统的软件将其逻辑表示为由人类知识构建的控制流,而dnn则通过神经元边缘的权值和非线性激活函数(由训练数据决定)来描述其行为。因此,检测dnns中的错误行为不同于检测传统软件中的错误行为,这就需要新的测试生成方法。
- 尽管传统软件存在许多标准,例如语句、分支、数据流覆盖率,但它们在测试dnn时完全失效
- 现有的测试数据在一般情况下更倾向于测试主功能区,而覆盖边界区的案例相对较少。
- dnns也可能包含由于错误、不完整的训练数据,甚至错误规定的运行时编程(即训练)过程而导致的缺陷
DNN的测试标准
文章中提到的测试标准如下:
对于功能区测试:
- NAC: 神经元覆盖率
- KMNC: 多节神经元覆盖率
对于边界区测试:
- NBC: 神经元边界覆盖率
- SNAC: 强神经元覆盖率
对于层级测试
- topk神经元覆盖率
- topk神经元模式
定义
预备定义
设 N = { n 1 , n 2 , … } N=\left\{n_{1}, n_{2}, \dots\right\} N={n1,n2,…}是dnn的一组神经元,
设 T = { x 1 , x 2 , … } T= \left\{\mathbf{x}_{1}, \mathbf{x}_{2}, \dots\right\} T={x1,x2,…}为一组测试输入,
设 ϕ ( x , n ) \phi(\mathbf{x}, n) ϕ(x,n)来表示一个函数,这个函数代表在给定测试输入 x ∈ T x∈T x∈T时,神经元$ n∈N$的输出值
设 L L L为DNN的层数, L i L_i Li表示在第 i i i层的神经元 ,其中 ( 1 ≤ i ≤ l ) (1 \leq i \leq l) (1≤i≤l)
主要功能区(Major function region)
对于一个神经元 n n n, high n \operatorname{high}_{n} highn 和 low n \operatorname{low}_{n} lown代表着边界值,其分别来自对训练集的分析.我们称 [ low n , high n ] \left[\operatorname{low}_{n}, \operatorname{high}_{n}\right] [lown,highn]为主要功能区
即: 主要功能区为 [ low n , high n ] \left[\operatorname{low}_{n}, \operatorname{high}_{n}\right] [lown,highn]
边界区(corner-case region)
对于测试输入 x ∈ T \mathbf{x} \in T x∈T,若 ∃ n ∈ N : ϕ ( x , n ) ∈ \exists n \in N: \phi(\mathbf{x}, n) \in ∃n∈N:ϕ(x,n)∈ ( − ∞ , low n ) ∪ ( high n , + ∞ ) \left(-\infty, \operatorname{low}_{n}\right) \cup\left(\operatorname{high}_{n},+\infty\right) (−∞,lown)∪(highn,+∞),则说明DNN落在了边界区
即: 边界区 ( − ∞ , low n ) ∪ ( high n , + ∞ ) \left(-\infty, \operatorname{low}_{n}\right) \cup\left(\operatorname{high}_{n},+\infty\right) (−∞,lown)∪(highn,+∞)
上边界(Upper CornerNeuron)和下边界(Lower CornerNeuron)
Upper CornerNeuron
=
{
n
∈
N
∣
∃
x
∈
T
:
ϕ
(
x
,
n
)
∈
(
high
n
,
+
∞
)
}
=\left\{n \in N | \exists \mathbf{x} \in T: \phi(\mathbf{x}, n) \in\left(\text { high }_{n},+\infty\right)\right\}
={n∈N∣∃x∈T:ϕ(x,n)∈( high n,+∞)}
Lower CornerNeuron
=
{
n
∈
N
∣
∃
x
∈
T
:
ϕ
(
x
,
n
)
∈
(
−
∞
,
low
n
)
}
=\left\{n \in N | \exists \mathbf{x} \in T: \phi(\mathbf{x}, n) \in\left(-\infty, \operatorname{low}_{n}\right)\right\}
={n∈N∣∃x∈T:ϕ(x,n)∈(−∞,lown)}
剖面输出(profiled outputs),
指的是DNN的每一层的输出
测试标准
神经元级别的覆盖标准
K多节神经元覆盖(KMNC)
kmnc: k-multisection Neuron Coverage
首先将 [ low n , high n ] \left[\operatorname{low}_{n}, \operatorname{high}_{n}\right] [lown,highn]等分成k个部分,使用 S i n S_{i}^{n} Sin表示第 i i i节中的值的集合,其中 1 ≤ i ≤ k 1 \leq i \leq k 1≤i≤k
如果 ϕ ( x , n ) ∈ S i n \phi(\mathbf{x}, n) \in S_{i}^{n} ϕ(x,n)∈Sin,我们说第 i i i节被输入 x \mathbf{x} x覆盖
给与有一组输入 T T T,和一个神经元 n n n, 覆盖率定义为: 被 T T T覆盖的节数与总部分数的比
因此我们将神经元
n
n
n的k-多节神经元覆盖定义为:
∣
{
S
i
n
∣
∃
x
∈
T
:
ϕ
(
x
,
n
)
∈
S
i
n
}
∣
k
\frac{\left|\left\{S_{i}^{n} | \exists \mathbf{x} \in T: \phi(\mathbf{x}, n) \in S_{i}^{n}\right\}\right|}{k}
k∣{Sin∣∃x∈T:ϕ(x,n)∈Sin}∣
进一步将DNN的k-多节神经元覆盖定义为:
KMNCov
(
T
,
k
)
=
∑
n
∈
N
∣
{
S
i
n
∣
∃
x
∈
T
:
ϕ
(
x
,
n
)
∈
S
i
n
}
∣
k
×
∣
N
∣
\operatorname{KMNCov}(T, k)=\frac{\sum_{n \in N}\left|\left\{S_{i}^{n} | \exists \mathbf{x} \in T: \phi(\mathbf{x}, n) \in S_{i}^{n}\right\}\right|}{k \times|N|}
KMNCov(T,k)=k×∣N∣∑n∈N∣{Sin∣∃x∈T:ϕ(x,n)∈Sin}∣
就是把所有的神经元全都做统计了
神经元边界覆盖(NBC)
nbc: neuron boundary coverage
概念
如果测试输入遵循与训练数据相似的统计分布,则神经元输出也很少定位在边界情况区域。然而,这并不意味着测试神经元的角点情况并不重要,因为dnns的缺陷也可能位于边界情况区域
公式
神经元边界覆盖度测量给定测试输入集t覆盖了多少个角点案例区域(上边界和下边界值)。它定义为覆盖角点案例数与角点案例总数之比(2xn)
N
B
C
o
v
(
T
)
=
∣
Upper CornerNeuron
∣
+
∣
Lower CornerNeuron
∣
2
×
∣
N
∣
\mathrm{NBCov}(T)=\frac{| \text { Upper CornerNeuron }|+| \text { Lower CornerNeuron } |}{2 \times|N|}
NBCov(T)=2×∣N∣∣ Upper CornerNeuron ∣+∣ Lower CornerNeuron ∣
即:
就是覆盖边界数的除以所有的边界数
所有的边界数 = 神经元的二倍,因为每个神经元都有两个边界
强神经元激活覆盖(SNAC)
snac : Strong Neuron Activation Coverage
概念
最近对dnns可解释性的一些研究经验表明,过分活跃的神经元可能在dnns内传递有用的学习模式
公式
强神经元激活覆盖率测量给定测试输入t覆盖了多少个角点案例。它定义为覆盖的上角点案例数与角点案例总数的比率(n):
SNACov
(
T
)
=
∣
Upper CornerNeuron
∣
∣
N
∣
\operatorname{SNACov}(T)=\frac{| \text { Upper CornerNeuron } |}{|N|}
SNACov(T)=∣N∣∣ Upper CornerNeuron ∣
即:为覆盖的上边界的边界数除以总共的边界数
层级别的覆盖标准
top-k神经元覆盖率
top-k : Top-k Neuron Coverage
定义
对于给定的测试输入 x x x和同一层上的神经元 n 1 n1 n1和 n 2 n2 n2,如果 ϕ ( x , n 1 ) > ϕ ( x , n 2 ) \phi\left(\mathbf{x}, n_{1}\right)>\phi\left(\mathbf{x}, n_{2}\right) ϕ(x,n1)>ϕ(x,n2),我们说n1比给定的n2更活跃
即: 同一层的神经元,输出越大越活越
top k ( x , i ) \operatorname{top}_{k}(\mathbf{x}, i) topk(x,i)表示给定一个 x x x,第 i i i层中值最大的 k k k个神经元
公式
top-k神经元覆盖率测量了每一层中曾经是最活跃的k神经元的数量。定义为每层top-k神经元总数与dnn神经元总数之比
TKNCov
(
T
,
k
)
=
∣
∪
x
∈
T
(
⋃
1
≤
i
≤
l
top
k
(
x
,
i
)
)
∣
∣
N
∣
\operatorname{TKNCov}(T, k)=\frac{\left|\cup_{\mathbf{x} \in T}\left(\bigcup_{1 \leq i \leq l} \operatorname{top}_{k}(\mathbf{x}, i)\right)\right|}{|N|}
TKNCov(T,k)=∣N∣∣∣∪x∈T(⋃1≤i≤ltopk(x,i))∣∣
top-k神经元模式
Top-k Neuron Patterns
公式
给定一个测试输入x,每一层的top-k神经元序列也形成一个模式
TKNPat
(
T
,
k
)
=
∣
{
(
top
k
(
x
,
1
)
,
…
,
top
k
(
x
,
l
)
)
∣
x
∈
T
}
∣
\text { TKNPat }(T, k)=\left|\left\{\left(\operatorname{top}_{k}(\mathbf{x}, 1), \ldots, \operatorname{top}_{k}(\mathbf{x}, l)\right) | \mathbf{x} \in T\right\}\right|
TKNPat (T,k)=∣{(topk(x,1),…,topk(x,l))∣x∈T}∣
直观地说,top-k神经元模式代表了每一层的顶端超活跃神经元的不同激活情景
样本的对抗生成方法
常见方法:
- fgsm
- bim
- jsma
- cw
Fgsm
Fgsm 是一种基于梯度的对抗样本生成
定义:
fgsm使用损失函数 J ( Θ , x , y ) J(\Theta, \mathbf{x}, y) J(Θ,x,y))对输入特征向量进行对抗性示例,其中 Θ Θ Θ表示模型参数, x x x是输入, y y y是 x x x的输出标签,对抗性示例生成为: x ∗ = x + ϵ sign ( ∇ x J ( Θ , x , y ) ) \mathbf{x}^{*}=\mathbf{x}+\epsilon \operatorname{sign}\left(\nabla_{\mathbf{x}} J(\Theta, \mathbf{x}, y)\right) x∗=x+ϵsign(∇xJ(Θ,x,y))
即:
- ϵ ϵ ϵ 是扰动值
- ∇ x J ( Θ , x , y ) ∇xJ(Θ, x,y) ∇xJ(Θ,x,y)是对 x x x求偏导
- sign是如果偏导为正则为 1 1 1,为负则为 − 1 -1 −1
- 所以 x ∗ x^* x∗ 就是 x x x加减扰动值.
Bim
Bim多次用小参数
ϵ
ϵ
ϵ迭代地应用对抗噪声
η
η
η,而不是一次用一个
ϵ
ϵ
ϵ 迭代地应用对抗噪声
η
η
η
x
i
∗
=
clip
x
,
ϵ
(
x
i
−
1
∗
+
ϵ
sign
(
∇
x
i
−
1
∗
J
(
Θ
,
x
i
−
1
∗
,
y
)
)
)
\mathbf{x}_{i}^{*}=\operatorname{clip}_{\mathbf{x}, \epsilon}\left(\mathbf{x}_{i-1}^{*}+\right.\left.\epsilon \operatorname{sign}\left(\nabla_{\mathbf{x}_{i-1}^{*}} J\left(\Theta, \mathbf{x}_{i-1}^{*}, y\right)\right)\right)
xi∗=clipx,ϵ(xi−1∗+ϵsign(∇xi−1∗J(Θ,xi−1∗,y)))
- 不是一大步运算增大分类器的损失函数而进行图像扰动,而是可以直接将其扩展为通过多个小步
- clip x , ϵ ( ⋅ ) \operatorname{clip}_{\mathbf{x}, \epsilon}(\cdot) clipx,ϵ(⋅)代表只选择一部分x进行扰动
JSMA
jsma是针对有针对性的错误分类而提出的。对于输入 x x x和神经网络 F F F, J J J类的输出表示为 F j ( x ) F_{j}(\mathbf{x}) Fj(x)。
为了达到目标误分类类别 t t t, F t ( x ) F_{t}(\mathbf{x}) Ft(x)增加,而所有其他类别 j ≠ t j \neq t j=t的概率 F j ( x ) F_{j}(\mathbf{x}) Fj(x)减少,直到 t = arg max j F j ( x ) t=\arg \max _{j} F_{j}(\mathbf{x}) t=argmaxjFj(x)
CW
Carlini/Wagner(CW):Carlini和Wagner最近提出了一种新的基于优化的攻击技术,从最小扰动的对抗成功率来看,这种技术无疑是最有效的。原则上,CW攻击是为了近似解决以下优化问题:
arg
min
x
∗
λ
L
(
x
,
x
∗
)
−
J
(
Θ
,
x
∗
,
y
)
\underset{\mathbf{x}^{*}}{\arg \min } \lambda L\left(\mathbf{x}, \mathbf{x}^{*}\right)-J\left(\Theta, \mathbf{x}^{*}, y\right)
x∗argminλL(x,x∗)−J(Θ,x∗,y)
其中,
L
L
L是一个损失函数,用于测量预测值与真实值之间的距离,常数
λ
λ
λ用于平衡两个损失比例。在本文中,我们采用
C
W
∞
\mathrm{CW}_{\infty}
CW∞,其中允许每个像素的变化达到一个极限。
数据评估
定义
U,I: 神经元输出上限(最大值)和下限(最小值)
σ 标准偏差
Ub Lb, 即实际的上下界
为了扩大边界, 定义实际的上下界允许有一定的扩大( 0.5σ和σ)
Ub = U 或 Ub = U +0.5σ 或 Ub = U +σ
Lb = L 或 Lb = L +0.5σ 或 Lb = L +σ
数据集
mnist
imagenet
注:
我们还尝试使用fgsm、bim、jsma和cw为每个所研究的dnn生成对抗性测试。但是,我们无法设置jsma在两个dnn中的任何一个上成功运行
注
对抗数据在不同的模型上不一样,因此每个模型都要重新生成一次
结果
- 使用对抗性技术获得的不同标准的覆盖率通常会增加
- 覆盖率的增加说明对抗性测试数据对新dnns的内部状态进行了全面的探索
- 一个在神经元数量和层数方面更复杂的dnn可能更难被测试覆盖, 这可能并不普遍适用
- 每一层中只有一个固定的神经元子集可以充当顶级活动神经元。这暗示着每一层的最活跃神经元可能描述了神经元网络的高级主要功能骨架。
- 研究结果表明,生成覆盖更多top-k神经元模式的测试将有更高的机会发现dnn的缺陷。
结论与备注
- dnn的缺陷可以出现在主要功能区或边界区,这两个区域都应该进行广泛的测试。
- 由于对抗性测试数据可能揭示dl系统的缺陷,这意味着提高测试标准的覆盖率可以在一定程度上提高故障检测能力
- 增加测试覆盖率并不一定意味着可以在传统的软件测试中检测到新的缺陷。同样的结论也适用于dnn的覆盖标准,尽管更好定义的覆盖标准在发现缺陷时更为明显。
- 测试数据覆盖的主要功能区比边界区域要多
- 强神经元激活覆盖率一般高于边界覆盖率.可能是因为 relu作为激活函数,这可以使神经元的下部区域比上部区域小得多。
其他:DNC的问题
DeepxPlore设定固定阈值的方法不适用,在对抗样本的情况下,DNC无法区分.
DNC局限性
(1)DNC对所有神经元的激活评估使用相同的阈值。然而,我们发现不同神经元的输出统计分布是非常不同的。给定一个用于分析的测试集,一些神经元的输出可能表现出相当小的方差和较大的平均值,而另一些神经元的输出可能具有较大的方差和较低的平均值。因此,对所有神经元使用相同的阈值,而不考虑神经元功能分布的差异,将大大降低准确性。例如,给定一个平均值和标准差很小的神经元,即使用户指定的阈值稍大,也通常会确定该神经元不能被覆盖。
(2)DNC根据分析的每个输入图像对应层神经元的最大和最小输出,对神经元输出的动态范围进行规范化。这就产生了这样一个问题:对于不同的输入数据,相同的标准化激活值(例如0.3)的含义是不同的,因为每个输入的每一层的最大和最小输出可能会发生变化,这使得不同输入之间“大于给定阈值”的概念不一致。这样做也会消除不同输入之间激活幅度的相关性,这是支持神经元激活覆盖率发现的一个非常重要的特性。相反,我们指定从训练数据集的分析中获得的每个神经元的上下限,而不是每个单独的输入。换句话说,我们的方法依赖于用于确定dnn系统主要功能的训练集的统计。