Testing Deep Neural Networks
注意:本文特别多的公式,但很多公式其实都是把一些知识用公式化的语言描述出来了而已.
这篇论文更新了新的版本..改了一些东西..
论文标题
- Testing Deep Neural Networks
- 测试深度学习系统
- 2018.3
核心内容
- 介绍了三种变化, 符号变化,值变化,距离变化.
- 介绍了四种覆盖方法: ss, ds, sv, dv
- 自动测试用例生成算法
背景
-
前人的如下两种测试方法是不好的
- 使不同的测试样例激活不同的神经元,最终让每个神经元都曾被激活或抑制,从而看出是不是有“坏”的神经元
- 随机生成测试样例的方法,尽可能多的遍历输入空间
第一种仅凭“激活”来测试神经元过于粗糙,第二种又过于低效
核心思想
-
"输入相似,输出相反"
一对 “输入相似,输出相反” 的用例是很好的测试例子
-
MC/DC
将MC/DC的思想 “构造一个使得分支条件中的布尔表达式中每个子条件都独立影响结果的测试集” ,
类比到神经网络 “把上一层的所有神经元看作一个分支条件布尔表达式中的各个子条件,本层的某个神经元看作是结果” ,从而提出了新的测试方法
-
"独立影响"
举例: 在两次的输入x1和x2下,神经元n2,1、n2,2、n2,3的符号为(+±)和(+++),神经元n3,1的激活状态为(+)和(-),则称神经元n2,3独立影响了神经元n3,1。(这里使用符号变化,还可以类比值变化等)
利用 “独立影响” 的关系,我们就可以得到一个测试集,使得相邻两层网络的所有相连的神经元对都构成“独立影响”的关系
-
测试覆盖率
能够在测试集中找到两个输入使得满足 “独立影响” 条件的神经元对的个数除以所有的神经元对
-
输入相似 : 跟据真实的输入生成测试用例
测试样例的生成并不是随机的,而是根据真实的输入“变异”得来的。那么生成测试样例输入的过程为:给定一个已知的输入,作者构造一个另一个和它相配的输入,使得这一对神经元满足 “独立影响” 条件,并且,这两个输入要尽可能的相似。这就符合深度学习领域bug的特征—输入相似,输出相反
结论
- 提出了一套新的DNNs测试准则,为每个准则开发了一个测试集生成算法,
- 测试集生成算法可以有效地挖掘adversarial examples,而且提供了一个可信度(也就是覆盖率),让一个测试的结果更有说服力
基本定义
这节主要定义了对神经网络和测试的一些符号
N
一个DNN是如下的一个N元组
N
=
(
L
,
T
,
Φ
)
\mathcal{N}=(L, T, \Phi)
N=(L,T,Φ)
L
L是层
L
=
{
L
k
∣
k
∈
{
1
,
…
,
K
}
}
L=\left\{L_{k} | k \in\{1, \ldots, K\}\right\}
L={Lk∣k∈{1,…,K}}
L 是 层 , L 1 输 入 层 , L k 输 出 层 , 其 他 是 隐 藏 层 每 层 L k 有 S k 个 神 经 元 n k , l : k 层 的 第 l 个 神 经 元 用 n k , l 表 示 L是层, L{_1}输入层, L{_k}输出层, 其他是隐藏层\\ 每层L{_k}有S_{k}个神经元\\ n_{k, l}: k层的第l个神经元用n_{k, l}表示 L是层,L1输入层,Lk输出层,其他是隐藏层每层Lk有Sk个神经元nk,l:k层的第l个神经元用nk,l表示
T
T是层与层的连接
T
⊆
L
×
L
T \subseteq L \times L
T⊆L×L
除了输入和输出层外,每个层都有一个传入连接和一个传出连接
Φ
Φ是一组激活函数
一层一个激活函数:
ϕ
k
:
D
L
k
−
1
→
D
L
k
\phi_{k} : D_{L_{k-1}} \rightarrow D_{L_{k}}
ϕk:DLk−1→DLk
激活函数的集合:
Φ
=
{
ϕ
k
∣
k
∈
{
2
,
…
,
K
}
}
\Phi=\left\{\phi_{k} | k \in\{2, \ldots, K\}\right\}
Φ={ϕk∣k∈{2,…,K}}
v k , l : 我 们 使 用 v k , l 表 示 n k , l 的 值 v_{k, l}: 我们使用v_{k, l}表示n_{k, l}的值 vk,l:我们使用vk,l表示nk,l的值
除 输 入 外 , 即 对 于 所 有 2 ≤ k ≤ K and 1 ≤ l ≤ s k 每 个 节 点 都 通 过 预 定 义 的 权 重 连 接 到 上 一 层 中 的 节 点 , 这 样 除输入外,即对于所有2 \leq k \leq K \text { and } 1 \leq l \leq s_{k}\\ 每个节点都通过预定义的权重连接到上一层中的节点,这样 除输入外,即对于所有2≤k≤K and 1≤l≤sk每个节点都通过预定义的权重连接到上一层中的节点,这样
v k , l = δ k , l + ∑ 1 ≤ h ≤ s k − 1 w k − 1 , h , l ⋅ v k − 1 , h v_{k, l}=\delta_{k, l}+\sum_{1 \leq h \leq s_{k-1}} w_{k-1, h, l} \cdot v_{k-1, h} vk,l=δk,l+1≤h≤sk−1∑wk−1,h,l⋅vk−1,h
其 中 , w k − 1 , h , l 是 n k − 1 , h ( 即 k − 1 层 的 第 h 个 节 点 ) 和 n k , l ( 即 k 层 的 l 节 点 ) 之 间 的 连 接 的 预 先 训 练 的 权 重 其 中 δ k , l 是 节 点 n k , l 的 偏 差 其中, w_{k-1, h, l}是n_{k-1, h}(即k-1层的第h个节点)和n_{k, l}(即k层的l节点)之间的连接的预先训练的权重\\ 其中\delta_{k, l}是节点n_{k, l}的偏差 其中,wk−1,h,l是nk−1,h(即k−1层的第h个节点)和nk,l(即k层的l节点)之间的连接的预先训练的权重其中δk,l是节点nk,l的偏差
理解: 就是对k-1层中所有的节点的值*它的权重 + 偏差 = 下一层某个节点的激活前的值
Relu激活函数
v
k
,
l
=
ReLU
(
v
k
,
l
)
=
{
v
k
,
l
if
v
k
,
l
>
0
0
otherwise
v_{k, l}=\operatorname{ReLU} \left(v_{k, l}\right)=\left\{\begin{array}{ll}{v_{k, l}} & {\text { if } v_{k, l}>0} \\ {0} & {\text { otherwise }}\end{array}\right.
vk,l=ReLU(vk,l)={vk,l0 if vk,l>0 otherwise
Lable
最后,对于任何输入,神经网络都会分配一个标签,即具有最大值的输出层节点的索引:
label
=
argmax
1
≤
l
≤
s
K
{
v
K
,
l
}
L
是一系列标签的集合
\begin{array}{c}{\text { label }=\operatorname{argmax}_{1 \leq l \leq s_{K}}\left\{v_{K, l}\right\}} \\ {\text { } \mathcal{L} \text { 是一系列标签的集合}}\end{array}
label =argmax1≤l≤sK{vK,l} L 是一系列标签的集合
lable就是输出层(第K层)中最大值的节点
N : 神 经 网 络 N [ x ] : 当 给 定 一 个 用 例 x 时 的 神 经 网 络 , 称 作 神 经 网 络 的 实 例 化 \mathcal{N}: 神经网络\\ \mathcal{N}[x]: 当给定一个用例x时的神经网络,称作神经网络的实例化 N:神经网络N[x]:当给定一个用例x时的神经网络,称作神经网络的实例化
给 定 一 个 网 络 实 例 N [ x ] , 网 络 中 每 个 节 点 n k , l 的 激 活 值 和 最 终 分 类 标 签 是 固 定 的 , 它 们 分 别 表 示 为 v k , l 和 l a b e l [ x ] 给定一个网络实例\mathcal{N}[x],网络中每个节点n_{k,l}的激活值和最终分类标签是固定的,它们分别表示为v_{k,l}和label [x] 给定一个网络实例N[x],网络中每个节点nk,l的激活值和最终分类标签是固定的,它们分别表示为vk,l和label[x]
u k , l [ x ] : 应 用 r e l u 之 前 的 值 v k , l [ x ] : 应 用 r e l u 之 后 的 值 u_{k, l}[x]: 应用relu之前的值 v_{k, l}[x]: 应用relu之后的值 uk,l[x]:应用relu之前的值vk,l[x]:应用relu之后的值
sign的值
sign
(
v
k
,
l
[
x
]
)
=
{
+
1
if
u
k
,
l
[
x
]
=
v
k
,
l
[
x
]
−
1
otherwise
\operatorname{sign}\left(v_{k, l}[x]\right)=\left\{\begin{array}{ll}{+1} & {\text { if } u_{k, l}[x]=v_{k, l}[x]} \\ {-1} & {\text { otherwise }}\end{array}\right.
sign(vk,l[x])={+1−1 if uk,l[x]=vk,l[x] otherwise
注: 当神经元没有ReLU运算符时,sign仅返回其激活值的符号。
深度学习神经元网络的测试标准
预备定义
N,R,T的关系
定义1: M R T
设 N 为 一 组 神 经 网 络 , R 为 一 组 需 求 , T 为 一 组 测 试 用 例 测 试 充 分 性 准 则 或 测 试 覆 盖 度 度 量 是 一 个 函 数 M : N × R × T → [ 0 , 1 ] . M ( N , R , T ) 量 化 了 一 个 测 试 套 件 T 对 一 个 网 络 N 的 充 分 性 进 行 测 试 的 程 度 通 常 , M ( N , R , T ) 的 数 量 越 大 , 测 试 就 越 充 分 需 求 R 及 其 相 应 的 标 准 M R 需 求 R 生 成 测 试 套 件 T R 。 设N为一组神经网络,R为一组需求,T为一组测试用例\\ 测试充分性准则或测试覆盖度度量是一个函数 M : N × R × T → [0, 1].\\ M(N,R,T) 量化了一个测试套件T对一个网络N的充分性进行测试的程度\\ 通常,M(N,R,T)的数量越大,测试就越充分\\ 需求R及其相应的标准MR\\ 需求R生成测试套件TR。 设N为一组神经网络,R为一组需求,T为一组测试用例测试充分性准则或测试覆盖度度量是一个函数M:N×R×T→[0,1].M(N,R,T)量化了一个测试套件T对一个网络N的充分性进行测试的程度通常,M(N,R,T)的数量越大,测试就越充分需求R及其相应的标准MR需求R生成测试套件TR。
-
下一层神经元表示的信息可以被看作是当前层信息的摘要
-
我们标准的核心思想是确保不仅需要测试特征的存在,而且必须测试较不复杂特征对较复杂特征的影响。
深度学习中的条件(condition)与决定(decision):
对 于 每 个 神 经 元 n k , l 对 于 2 ≤ k ≤ K and 1 ≤ l ≤ s k 的 决 定 ( d e c i s i o n ) , 我 们 说 它 的 条 件 ( c o n d i t i o n s ) 是 k − 1 层 的 神 经 元 , 即 : { n k − 1 , l ′ ∣ 1 ≤ l ′ ≤ s k − 1 } 对于每个神经元n_{k, l}\\ 对于 2 \leq k \leq K \text { and } 1 \leq l \leq s_{k}的决定(decision), \\ 我们说它的条件(conditions)是k-1层的神经元,即:\{n_{k-1, l^{\prime}} | 1 \leq l^{\prime} \leq s_{k-1}\}\\ 对于每个神经元nk,l对于2≤k≤K and 1≤l≤sk的决定(decision),我们说它的条件(conditions)是k−1层的神经元,即:{nk−1,l′∣1≤l′≤sk−1}
定义2: O(N)
给
定
一
个
网
络
N
,
设
(
n
k
,
i
,
n
k
+
1
,
j
)
是
相
邻
层
k
和
k
+
1
中
的
一
对
神
经
元
,
其
中
:
1
≤
k
≤
K
−
1
,
1
≤
i
≤
s
k
,
1
≤
j
≤
s
k
+
1
则
O
(
N
)
是
神
经
元
的
集
合
给定一个网络\mathcal{N},设{\left(n_{k, i}, n_{k+1, j}\right)}是相邻层k和k+1中的一对神经元,其中:\\ 1\leq k \leq K-1 ,\ 1 \leq i \leq s_{k},\ 1 \leq j \leq s_{k+1} \\ 则\mathcal{O}(\mathcal{N})是神经元的集合
给定一个网络N,设(nk,i,nk+1,j)是相邻层k和k+1中的一对神经元,其中:1≤k≤K−1, 1≤i≤sk, 1≤j≤sk+1则O(N)是神经元的集合
判断神经元发生改变的方式
注意: 这里面说的都是同层的神经元的变化规律
SC
定义3(符号变化sign change)sc
给
定
一
个
神
经
元
n
k
,
l
和
两
个
测
试
用
例
x
1
,
x
2
,
当
n
k
,
l
的
符
号
发
生
变
化
时
符
号
变
化
:
若
sign
(
v
k
,
l
[
x
1
]
)
≠
sign
(
v
k
,
l
[
x
2
]
)
时
记
作
:
sc
(
n
k
,
l
,
x
1
,
x
2
)
否
则
记
作
:
¬
sc
(
n
k
,
l
,
x
1
,
x
2
)
给定一个神经元n_{k, l}和两个测试用例x1,x2,当n_{k, l}的符号发生变化时\\ 符号变化: 若\operatorname{sign}\left(v_{k, l}\left[x_{1}\right]\right) \neq \operatorname{sign}\left(v_{k, l}\left[x_{2}\right]\right)时\\ 记作: \operatorname{sc}\left(n_{k, l}, x_{1}, x_{2}\right)\\ 否则记作:\neg\operatorname{sc}\left(n_{k, l}, x_{1}, x_{2}\right)
给定一个神经元nk,l和两个测试用例x1,x2,当nk,l的符号发生变化时符号变化:若sign(vk,l[x1])=sign(vk,l[x2])时记作:sc(nk,l,x1,x2)否则记作:¬sc(nk,l,x1,x2)
VC
定义4(值变化 value change) vc
给
定
一
个
神
经
元
n
k
,
l
和
两
个
测
试
用
例
x
1
,
x
2
,
当
n
k
,
l
的
符
号
发
生
变
化
时
值
变
化
:
若
g
(
u
k
,
l
[
x
1
]
,
u
k
,
l
[
x
2
]
)
=
true and
¬
s
c
(
n
k
,
l
,
x
1
,
x
2
)
时
,
记
作
:
v
c
(
g
,
n
k
,
l
,
x
1
,
x
2
)
,
否
则
记
作
:
¬
v
c
(
g
,
n
k
,
l
,
x
1
,
x
2
)
,
其
中
g
是
一
个
值
函
数
,
用
来
计
算
x
1
,
x
2
的
值
给定一个神经元n_{k, l}和两个测试用例x1,x2,当n_{k, l}的符号发生变化时\\ 值变化: 若 g\left(u_{k, l}\left[x_{1}\right], u_{k, l}\left[x_{2}\right]\right)=\text { true and } \neg s c\left(n_{k, l}, x_{1}, x_{2}\right)时,\\记作: v c\left(g, n_{k, l}, x_{1}, x_{2}\right),\\ 否则记作:\neg vc\left(g, n_{k, l}, x_{1}, x_{2}\right),\\ 其中g是一个值函数,用来计算x1,x2的值
给定一个神经元nk,l和两个测试用例x1,x2,当nk,l的符号发生变化时值变化:若g(uk,l[x1],uk,l[x2])= true and ¬sc(nk,l,x1,x2)时,记作:vc(g,nk,l,x1,x2),否则记作:¬vc(g,nk,l,x1,x2),其中g是一个值函数,用来计算x1,x2的值
理解:某个函数计算后符号没变化,但是值变化了,就叫做值变化
函
数
g
表
示
两
个
值
u
k
,
l
[
x
1
]
和
u
k
,
l
[
x
2
]
之
间
的
变
化
。
给
定
一
个
实
数
d
,
它
可
以
有
几
种
方
式
计
算
绝
对
距
离
:
∣
u
k
,
l
[
x
1
]
−
u
k
,
l
[
x
2
]
∣
≥
d
相
对
距
离
:
u
k
,
l
[
x
1
]
u
k
,
l
(
x
2
)
>
d
∨
u
k
,
l
[
x
1
]
u
k
,
1
[
x
2
]
<
1
/
d
函数g表示两个值u_{k, l}[x_{1}]和u_{k, l}[x_{2}]之间的变化。给定一个实数d,它可以有几种方式计算\\ 绝对距离:\left|u_{k, l}\left[x_{1}\right]-u_{k, l}\left[x_{2}\right]\right| \geq d\\ 相对距离: \frac{u_{k, l}\left[x_{1}\right]}{u_{k, l}\left(x_{2}\right)}>d \vee \frac{u_{k, l}\left[x_{1}\right]}{u_{k, 1}\left[x_{2}\right]}<1 / d\\
函数g表示两个值uk,l[x1]和uk,l[x2]之间的变化。给定一个实数d,它可以有几种方式计算绝对距离:∣uk,l[x1]−uk,l[x2]∣≥d相对距离:uk,l(x2)uk,l[x1]>d∨uk,1[x2]uk,l[x1]<1/d
理解:就是求差或者求一个比例
DC
定义5(距离变化 distance change )dc
对于k层中的一组神经元,我们可以用距离(distance)来量化它们的变化程度
对
于
两
个
测
试
用
例
x
1
,
x
2
,
在
k
层
的
神
经
元
:
P
k
=
{
n
k
,
l
∣
1
≤
l
≤
s
k
}
,
用
距
离
函
数
h
来
计
算
x
1
和
x
2
的
差
异
,
称
作
P
k
的
距
离
变
化
若
满
足
:
h
(
u
k
[
x
1
]
,
u
k
[
x
2
]
)
=
t
r
u
e
并
且
对于所有的
n
k
,
l
∈
P
k
,
sign
(
v
k
,
l
[
x
1
]
)
=
sign
(
v
k
,
l
[
x
2
]
)
记
作
:
d
c
(
h
,
k
,
x
1
,
x
2
)
否
则
记
作
:
¬
dc
(
h
,
k
,
x
1
,
x
2
)
对于两个测试用例x1,x2,在k层的神经元:P_k= \{{n_{k, l} | 1 \leq l \leq s_{k}\}},\\ 用距离函数h来计算x1和x2的差异,称作P_k的距离变化\\ 若满足:{h\left(u_{k}\left[x_{1}\right], u_{k}\left[x_{2}\right]\right)=true}\\ 并且{\text { 对于所有的 } n_{k, l} \in P_{k}, \text { sign }\left(v_{k, l}\left[x_{1}\right]\right)=\operatorname{sign}\left(v_{k, l}\left[x_{2}\right]\right)}\\ 记作:d c\left(h, k, x_{1}, x_{2}\right)\\ 否则记作:\neg\operatorname{dc}\left(h, k, x_{1}, x_{2}\right)
对于两个测试用例x1,x2,在k层的神经元:Pk={nk,l∣1≤l≤sk},用距离函数h来计算x1和x2的差异,称作Pk的距离变化若满足:h(uk[x1],uk[x2])=true并且 对于所有的 nk,l∈Pk, sign (vk,l[x1])=sign(vk,l[x2])记作:dc(h,k,x1,x2)否则记作:¬dc(h,k,x1,x2)
理解:距离上产生了变化,并且所有的符号都没变
注意: 这里使用的是uk而不是具体的某一个神经元(uki),意味着这跟某一层的所有神经元都相关
h ( u k [ x 1 ] , u k [ x 2 ] ) 这 个 距 离 函 数 可 以 用 以 下 的 函 数 ∥ u k [ x 1 ] − u k [ x s ] ∥ p ≤ d : 就 是 l 范 数 表 示 的 距 离 ( L 1 ( 曼 哈 顿 距 离 ) , L 2 ( 欧 几 里 得 距 离 ) , L ∞ ( 切 比 雪 夫 距 离 ) ) 或 结 构 相 似 距 离 : 例 如 S S I M {h\left(u_{k}\left[x_{1}\right], u_{k}\left[x_{2}\right]\right)}这个距离函数可以用以下的函数\\ \left\|u_{k}\left[x_{1}\right]-u_{k}\left[x_{s}\right]\right\|_{p} \leq d :就是l范数表示的距离(L 1(曼哈顿距离),L 2(欧几里得距离),L∞(切比雪夫距离))\\ 或结构相似距离: 例如SSIM h(uk[x1],uk[x2])这个距离函数可以用以下的函数∥uk[x1]−uk[xs]∥p≤d:就是l范数表示的距离(L1(曼哈顿距离),L2(欧几里得距离),L∞(切比雪夫距离))或结构相似距离:例如SSIM
神经元的覆盖方法
注意: 这里说的都是相邻层之间的神经元的规律
SSC
定义6 (Sign-Sign Cover, or SS Cover):
对
于
一
对
神
经
元
α
=
(
n
k
,
i
,
n
k
+
1
,
j
)
,
和
两
个
测
试
用
例
x
1
,
x
2
,
如
果
网
络
实
例
N
[
x
1
]
和
N
[
x
2
]
满
足
以
下
条
件
:
sc
(
n
k
,
i
,
x
1
,
x
2
)
¬
sc
(
n
k
,
l
,
x
1
,
x
2
)
for all
p
k
,
l
∈
P
k
\
{
i
}
sc
(
n
k
+
1
,
j
,
x
1
,
x
2
)
则
称
作
:
c
o
v
S
S
(
α
,
x
1
,
x
2
)
:
\begin{array}{l}对于一对神经元α = (n_{k, i}, n_{k+1, j}),和两个测试用例x_1,x_2,如果网络实例N[x_1]和N[x_2]满足以下条件:\\ {\operatorname{sc}\left(n_{k, i}, x_{1}, x_{2}\right)} \\ {\neg\operatorname{sc}\left(n_{k, l}, x_{1}, x_{2}\right) \text { for all } p_{k, l} \in P_{k} \backslash\{i\}} \\ {\operatorname{sc}\left(n_{k+1, j}, x_{1}, x_{2}\right)}\\ 则称作:cov_{SS}(α, x1, x2):\end{array}\\
对于一对神经元α=(nk,i,nk+1,j),和两个测试用例x1,x2,如果网络实例N[x1]和N[x2]满足以下条件:sc(nk,i,x1,x2)¬sc(nk,l,x1,x2) for all pk,l∈Pk\{i}sc(nk+1,j,x1,x2)则称作:covSS(α,x1,x2):
S S C o v e r 是 是 为 了 证 明 条 件 神 经 元 n k , l 激 活 标 志 的 改 变 独 立 地 影 响 下 一 层 决 策 神 经 元 n k + 1 , j 的 标 志 SS Cover 是是为了证明条件神经元n_{k,l}激活标志的改变独立地影响下一层决策神经元n_{k+1,j}的标志 SSCover是是为了证明条件神经元nk,l激活标志的改变独立地影响下一层决策神经元nk+1,j的标志
理解: (独立影响)就是在k层中只有第i个神经元的值改变了(其他值不变),然后第k+1层中第j个值才改变了
SS Cover覆盖非常接近MC/DC:只是我们没有观察布尔变量(即真→假或假→真)的变化,而是观察神经元的符号变化.
然而,神经网络的行为具有额外的复杂性。神经网络直接采用mc/dc式覆盖并不一定能捕捉到网络中所有的重要信息。以下三个附加覆盖标准旨在补充SS覆盖
DSC
定义7: (Distance-Sign Cover, or DS Cover).
对
于
一
对
神
经
元
α
=
(
n
k
,
i
,
n
k
+
1
,
j
)
,
和
两
个
测
试
用
例
x
1
,
x
2
,
如
果
网
络
实
例
N
[
x
1
]
和
N
[
x
2
]
满
足
以
下
条
件
:
dc
(
h
,
k
,
x
1
,
x
2
)
,
a
n
d
sc
(
n
k
+
1
,
j
,
x
1
,
x
2
)
则
称
作
:
c
o
v
D
S
h
(
α
,
x
1
,
x
2
)
:
\begin{array}{l}对于一对神经元α = (n_{k, i}, n_{k+1, j}),和两个测试用例x_1,x_2,如果网络实例N[x_1]和N[x_2]满足以下条件:\\ {\operatorname{dc}\left(h,k, x_{1}, x_{2}\right)}, and\\ {\operatorname{sc}\left(n_{k+1, j}, x_{1}, x_{2}\right) } \\ 则称作:cov^h_{DS}(α, x1, x2):\end{array}\\
对于一对神经元α=(nk,i,nk+1,j),和两个测试用例x1,x2,如果网络实例N[x1]和N[x2]满足以下条件:dc(h,k,x1,x2),andsc(nk+1,j,x1,x2)则称作:covDSh(α,x1,x2):
理解 : 就是k层中的距离函数的值发生了变化,k+1层的符号也发生了变化
注
意
:
1.
dc
(
h
,
k
,
x
1
,
x
2
)
中
要
求
了
(
见
定
义
5
)
:
h
(
u
k
[
x
1
]
,
u
k
[
x
2
]
)
=
t
r
u
e
和
k
层
的
符
号
没
变
这
是
为
了
保
证
了
k
层
中
的
变
化
很
小
2.
对
于
(
n
k
,
i
,
n
k
+
1
,
j
)
(
n
k
,
i
′
,
n
k
+
1
,
j
)
这
样
一
对
第
二
分
量
相
同
的
(
注
:
第
二
分
量
指
的
是
n
k
+
1
,
j
)
神
经
元
(
两
个
神
经
元
在
同
一
层
,
并
且
下
一
层
选
中
的
都
是
同
一
个
神
经
元
)
任
何
一
个
发
生
了
距
离
变
化
意
味
着
另
一
个
也
发
生
了
距
离
变
化
注意:\\ 1.{\operatorname{dc}\left(h,k, x_{1}, x_{2}\right)}中要求了(见定义5):h(uk[x1], uk[x2]) = true和k层的符号没变\\ 这是为了保证了k层中的变化很小\\ 2. 对于(n_{k,i}, n_{k+1,j}) (n_{k,i'},n_{k+1,j})这样一对第二分量相同的(注:第二分量指的是n_{k+1,j})神经元(两个神经元在同一层,并且下一层选中的都是同一个神经元)\\任何一个发生了距离变化意味着另一个也发生了距离变化
注意:1.dc(h,k,x1,x2)中要求了(见定义5):h(uk[x1],uk[x2])=true和k层的符号没变这是为了保证了k层中的变化很小2.对于(nk,i,nk+1,j)(nk,i′,nk+1,j)这样一对第二分量相同的(注:第二分量指的是nk+1,j)神经元(两个神经元在同一层,并且下一层选中的都是同一个神经元)任何一个发生了距离变化意味着另一个也发生了距离变化
第2条的理解:因为对于两个用例在同一层的神经元中其DC是一样的,因此只跟下一层选定的神经元有关.
SVC
定义8: (Sign-Value Cover, or SV Cover)
给
定
一
个
值
函
数
g
,
对
于
一
对
神
经
元
α
=
(
n
k
,
i
,
n
k
+
1
,
j
)
,
和
两
个
测
试
用
例
x
1
,
x
2
,
如
果
网
络
实
例
N
[
x
1
]
和
N
[
x
2
]
满
足
以
下
条
件
:
sc
(
n
k
,
i
,
x
1
,
x
2
)
,
¬
sc
(
n
k
,
l
,
x
1
,
x
2
)
for all
p
k
,
l
∈
P
k
\
{
i
}
vc
(
g
,
n
k
+
1
,
j
,
x
1
,
x
2
)
,
则
称
作
:
c
o
v
S
V
g
(
α
,
x
1
,
x
2
)
:
\begin{array}{l}给定一个值函数g, 对于一对神经元α = (n_{k, i}, n_{k+1, j}),和两个测试用例x_1,x_2,如果网络实例N[x_1]和N[x_2]满足以下条件:\\ {\operatorname{sc}\left(n_{k, i},x_{1}, x_{2}\right)},\\ {\neg\operatorname{sc}\left(n_{k, l}, x_{1}, x_{2}\right) \text { for all } p_{k, l} \in P_{k} \backslash\{i\}} \\ {\operatorname{vc}\left(g,n_{k+1, j},x_{1}, x_{2}\right)},\\ 则称作:cov^g_{SV}(α, x1, x2):\end{array}\\
给定一个值函数g,对于一对神经元α=(nk,i,nk+1,j),和两个测试用例x1,x2,如果网络实例N[x1]和N[x2]满足以下条件:sc(nk,i,x1,x2),¬sc(nk,l,x1,x2) for all pk,l∈Pk\{i}vc(g,nk+1,j,x1,x2),则称作:covSVg(α,x1,x2):
理解: 类似于SS覆盖,只不过下一层的符号改变变成了值改变而已
注意: 在值改变的定义中,符号是不能发生改变的.这就意味着下一层的指定神经元只能发生值改变
DVC
定义9:(Distance-Value Cover, or DV Cover).
给
定
一
个
值
函
数
g
,
和
一
个
距
离
函
数
h
对
于
一
对
神
经
元
α
=
(
n
k
,
i
,
n
k
+
1
,
j
)
,
和
两
个
测
试
用
例
x
1
,
x
2
,
如
果
网
络
实
例
N
[
x
1
]
和
N
[
x
2
]
满
足
以
下
条
件
:
d
c
(
h
,
k
,
x
1
,
x
2
)
vc
(
g
,
n
k
+
1
,
j
,
x
1
,
x
2
)
,
则
称
作
:
c
o
v
S
V
h
,
g
(
α
,
x
1
,
x
2
)
:
\begin{array}{l}给定一个值函数g,和一个距离函数h 对于一对神经元α = (n_{k, i}, n_{k+1, j}),和两个测试用例x_1,x_2,如果网络实例N[x_1]和N[x_2]满足以下条件:\\ dc\left(h, k, x_{1}, x_{2}\right)\\ {\operatorname{vc}\left(g,n_{k+1, j},x_{1}, x_{2}\right)},\\ 则称作:cov^{h,g}_{SV}(α, x1, x2):\end{array}\\
给定一个值函数g,和一个距离函数h对于一对神经元α=(nk,i,nk+1,j),和两个测试用例x1,x2,如果网络实例N[x1]和N[x2]满足以下条件:dc(h,k,x1,x2)vc(g,nk+1,j,x1,x2),则称作:covSVh,g(α,x1,x2):
理解 : 类似于DS覆盖, 就是k层中的距离函数的值发生了变化,k+1层的值也发生了变化
类似于DS覆盖
对
于
(
n
k
,
i
,
n
k
+
1
,
j
)
(
n
k
,
i
′
,
n
k
+
1
,
j
)
这
样
一
对
第
二
分
量
相
同
的
,
一
个
覆
盖
了
意
味
着
其
他
也
覆
盖
了
对于(n_{k,i}, n_{k+1,j})(n_{k,i'},n_{k+1,j})这样一对第二分量相同的,一个覆盖了意味着其他也覆盖了
对于(nk,i,nk+1,j)(nk,i′,nk+1,j)这样一对第二分量相同的,一个覆盖了意味着其他也覆盖了
这个指标是用来表示虽然符号没有改变,但是值却发生了变化
测试定义
定义10 Test Requirement(测试要求)
给
定
一
个
网
络
N
和
一
个
覆
盖
方
法
f
∈
F
,
一
个
测
试
需
求
R
f
是
找
到
一
个
测
试
集
T
R
f
,
使
得
它
覆
盖
O
(
N
)
中
关
于
f
的
所
有
神
经
元
对
,
即
,
∀
α
∈
O
(
N
)
∃
x
1
,
x
2
∈
T
R
f
:
f
(
α
,
x
1
,
x
2
)
由
于
f
和
T
R
f
是
一
一
对
应
的
,
我
们
可
以
把
T
R
f
写
成
T
f
。
给定一个网络N和一个覆盖方法f∈F,\\ 一个测试需求Rf是找到一个测试集TRf,使得它覆盖O(N)中关于f的所有神经元对,即,\\ \forall \alpha \in \mathcal{O}(\mathcal{N}) \exists x_{1}, x_{2} \in \mathcal{T} \mathcal{R} f : f\left(\alpha, x_{1}, x_{2}\right)\\ 由于f和TRf是一一对应的,我们可以把TRf写成Tf。
给定一个网络N和一个覆盖方法f∈F,一个测试需求Rf是找到一个测试集TRf,使得它覆盖O(N)中关于f的所有神经元对,即,∀α∈O(N)∃x1,x2∈TRf:f(α,x1,x2)由于f和TRf是一一对应的,我们可以把TRf写成Tf。
定义11 Test Criterion(测试标准)也就是测试覆盖率
给
定
一
个
网
络
N
和
一
个
覆
盖
方
法
f
∈
F
,
测
试
集
T
的
测
试
标
准
M
R
F
如
下
M
R
f
(
N
,
R
f
,
T
)
=
∣
{
α
∈
O
(
N
)
∣
∃
x
1
,
x
2
∈
T
:
f
(
α
,
x
1
,
x
2
)
}
∣
∣
O
(
N
)
∣
给定一个网络N和一个覆盖方法f∈F,测试集T的测试标准MRF如下\\ M \mathcal{R} f(\mathcal{N}, \mathcal{R} f, \mathcal{T})=\frac{\left|\left\{\alpha \in \mathcal{O}(\mathcal{N}) | \exists x_{1}, x_{2} \in T : f\left(\alpha, x_{1}, x_{2}\right)\right\}\right|}{|\mathcal{O}(\mathcal{N})|}
给定一个网络N和一个覆盖方法f∈F,测试集T的测试标准MRF如下MRf(N,Rf,T)=∣O(N)∣∣{α∈O(N)∣∃x1,x2∈T:f(α,x1,x2)}∣
理解: 就是计算了被覆盖的神经元除以总共的神经元的比例
一
样
的
,
M
R
f
(
N
,
R
f
,
T
)
简
写
M
f
(
N
,
T
)
一样的,M \mathcal{R} f(\mathcal{N}, \mathcal{R} f, \mathcal{T}) 简写M f(\mathcal{N}, \mathcal{T})
一样的,MRf(N,Rf,T)简写Mf(N,T)
自动测试用例生成
定义12 (Activation Pattern) (激活模式)
给
定
一
个
网
络
N
和
一
个
输
入
x
,
N
[
x
]
的
激
活
模
式
是
一
个
函
数
a
p
[
N
,
x
]
,
定
义
为
把
从
一
组
隐
藏
的
神
经
元
映
射
到
s
i
g
n
s
{
+
1
,
−
1
}
如
果
上
下
文
中
没
有
N
,
我
们
可
以
把
a
p
[
N
,
x
]
写
成
a
p
[
x
]
。
a
p
[
x
]
k
,
i
表
示
第
k
层
第
i
个
神
经
元
的
符
号
给定一个网络N和一个输入x,\\ N[x]的激活模式是一个函数ap[N,x],定义为把从一组隐藏的神经元映射到signs\{+1,-1\}\\ 如果上下文中没有N,我们可以把ap[N,x]写成ap[x]。\\ ap[x]_{k,i}表示第k层第i个神经元的符号
给定一个网络N和一个输入x,N[x]的激活模式是一个函数ap[N,x],定义为把从一组隐藏的神经元映射到signs{+1,−1}如果上下文中没有N,我们可以把ap[N,x]写成ap[x]。ap[x]k,i表示第k层第i个神经元的符号
理解: 激活模式就是看一组神经元是否被激活函数(如relu)激活(>0)
使用Lp模型生成用例
lp:线性规划
lp模型中使用的变量以粗体区分
给
定
输
入
x
,
输
入
变
量
是
x
,
他
们
必
须
有
相
同
的
激
活
模
式
:
即
a
p
[
x
]
=
a
p
[
x
]
和
之
前
一
样
,
我
们
分
别
用
u
k
,
i
和
v
k
,
i
来
表
示
应
用
R
e
l
u
前
后
神
经
元
n
k
,
i
的
估
值
,
约
束
集
C
1
[
x
]
定
义
如
下
:
{
u
k
,
i
≥
0
∧
v
k
,
i
=
u
k
,
i
∣
ap
[
x
]
k
,
i
≥
0
,
k
∈
[
2
,
K
)
,
i
∈
[
1
…
s
k
]
}
∪
{
u
k
,
i
<
0
∧
v
k
,
i
=
0
∣
a
p
[
x
]
k
,
i
<
0
,
k
∈
[
2
,
K
)
,
i
∈
[
1
…
s
k
]
}
给定输入x,输入变量是\mathbf x ,他们必须有相同的激活模式:即\\ ap[\mathbf x]=ap[x]\\ 和之前一样,我们分别用u_{k,i}和v_{k,i}来表示应用Relu前后神经元n_{k,i}的估值,约束集C_1[x]定义如下:\\ \begin{array}{l}{\left\{\mathbf{u}_{\mathbf{k}, \mathbf{i}} \geq 0 \wedge \mathbf{v}_{\mathbf{k}, \mathbf{i}}=\mathbf{u}_{\mathbf{k}, \mathbf{i}} | \operatorname{ap}[x]_{k, i} \geq 0, k \in[2, K), i \in\left[1 \ldots s_{k}\right]\right\}} \\ {\cup\left\{\mathbf{u}_{\mathbf{k}, \mathbf{i}}<0 \wedge \mathbf{v}_{\mathbf{k}, \mathbf{i}}=0 | a p[x]_{k, i}<0, k \in[2, K), i \in\left[1 \ldots s_{k}\right]\right\}}\end{array}\\
给定输入x,输入变量是x,他们必须有相同的激活模式:即ap[x]=ap[x]和之前一样,我们分别用uk,i和vk,i来表示应用Relu前后神经元nk,i的估值,约束集C1[x]定义如下:{uk,i≥0∧vk,i=uk,i∣ap[x]k,i≥0,k∈[2,K),i∈[1…sk]}∪{uk,i<0∧vk,i=0∣ap[x]k,i<0,k∈[2,K),i∈[1…sk]}
理解: 这个公式就是Relu函数的公式表示,若激活前>0,则激活后=激活前.若激活前<0则激活后=0
此
外
,
每
个
神
经
元
的
激
活
值
u
k
,
i
由
前
一
层
神
经
元
的
激
活
值
v
k
−
1
,
j
决
定
。
因
此
,
我
们
添
加
以
下
约
束
集
c
2
[
x
]
{
u
k
,
i
=
∑
1
≤
j
≤
s
k
−
1
{
w
k
−
1
,
j
,
i
⋅
v
k
−
1
,
j
}
+
δ
k
,
i
∣
k
∈
[
2
,
K
)
,
i
∈
[
1
…
s
k
]
}
此外,每个神经元的激活值u_{k,i}由前一层神经元的激活值v_{k-1,j}决定。因此,我们添加以下约束集c_2[x]\\ \left\{\mathbf{u}_{k, i}=\sum_{1 \leq j \leq s_{k-1}}\left\{w_{k-1, j, i} \cdot \mathbf{v}_{k-1, j}\right\}+\delta_{k, i} | k \in[2, K), i \in\left[1 \ldots s_{k}\right]\right\}
此外,每个神经元的激活值uk,i由前一层神经元的激活值vk−1,j决定。因此,我们添加以下约束集c2[x]⎩⎨⎧uk,i=1≤j≤sk−1∑{wk−1,j,i⋅vk−1,j}+δk,i∣k∈[2,K),i∈[1…sk]⎭⎬⎫
理解:这个公式就更无聊了,就是神经元的计算公式即权重乘以值+偏置就是下一层某个神经元激活前的值了.
生
成
的
L
p
模
型
:
C
[
x
]
=
C
1
[
x
]
∪
C
2
[
x
]
表
示
一
组
符
号
输
入
,
他
们
的
激
活
模
式
与
x
相
同
.
我
们
可
以
指
定
一
个
优
化
目
标
,
然
后
调
用
L
P
结
算
器
找
到
最
优
的
x
生成的Lp模型:C[x] = C1[x] ∪ C2[x] 表示一组符号输入,他们的激活模式与x相同.\\ 我们可以指定一个优化目标,然后调用LP结算器找到最优的\mathbf x
生成的Lp模型:C[x]=C1[x]∪C2[x]表示一组符号输入,他们的激活模式与x相同.我们可以指定一个优化目标,然后调用LP结算器找到最优的x
约束
定义13
设
C
[
1...
k
′
]
是
在
k
′
层
上
的
部
分
编
码
,
这
里
的
k
′
就
是
上
两
个
式
子
中
K
的
一
部
分
因
为
每
个
神
经
元
只
能
处
于
一
种
激
活
状
态
(
即
:
要
么
激
活
值
>
0
要
么
没
激
活
值
<
0
)
我
们
写
:
C
1
[
x
]
(
k
,
i
)
代
表
所
取
的
表
达
式
,
C
1
[
x
]
(
k
,
i
)
−
1
表
示
未
取
的
另
一
个
表
达
式
设C[1 . . . k^\prime ]是在k^\prime 层上的部分编码,这里的k^\prime就是上两个式子中K的一部分\\ 因为每个神经元只能处于一种激活状态(即:要么激活值>0要么没激活值<0)\\ 我们写:C_1[x](k, i)代表所取的表达式,C_1[x](k, i)_{-1}表示未取的另一个表达式
设C[1...k′]是在k′层上的部分编码,这里的k′就是上两个式子中K的一部分因为每个神经元只能处于一种激活状态(即:要么激活值>0要么没激活值<0)我们写:C1[x](k,i)代表所取的表达式,C1[x](k,i)−1表示未取的另一个表达式
定义14
设
C
[
(
k
,
i
)
]
是
和
C
一
样
的
约
束
集
,
但
不
同
之
处
在
于
约
束
C
1
[
x
]
(
k
,
i
)
被
C
1
[
x
]
(
k
,
i
)
−
1
代
替
。
设C[(k, i)] 是和C一样的约束集,但不同之处在于约束C_1[x](k, i)被C_1[x](k, i)_{-1}代替。
设C[(k,i)]是和C一样的约束集,但不同之处在于约束C1[x](k,i)被C1[x](k,i)−1代替。
定义15
假设值函数g和距离函数h是线性可编码的。在不丧失一般性的情况下,我们仍然使用g和h分别表示它们的线性编码。
设
C
[
+
g
]
=
C
∪
{
g
}
a
n
d
C
[
+
h
]
=
C
∪
{
h
}
设C[+g] = C ∪ \{g\}\ and\ C[+h] = C ∪ \{h\}
设C[+g]=C∪{g} and C[+h]=C∪{h}
例 如 , 当 要 求 用 [ l b k , i , u b k , i ] 限 制 的 值 激 活 神 经 元 n k , i 时 , 我 们 可 以 使 用 以 下 运 算 C [ + ( u k , i ∈ [ l b k , i , u b k , i ] ) ] . 。 例如,当要求用[lb_{k,i},ub_{k,i}]限制的值激活神经元n_{k,i}时,我们可以使用以下运算C [+(\mathbf {u_{k,i}}∈[lb_{k,i},ub_{k,i}])].。 例如,当要求用[lbk,i,ubk,i]限制的值激活神经元nk,i时,我们可以使用以下运算C[+(uk,i∈[lbk,i,ubk,i])].。
理解:就是一种表示方法,把一些条件用这种表示方法写出来
安全要求
定义16 Safety Requirement(安全要求)
给
定
一
个
有
限
集
X
的
正
确
标
记
输
入
,
安
全
要
求
是
确
保
对
于
所
有
接
近
输
入
x
∈
X
的
输
入
x
′
,
我
们
有
f
(
x
′
)
≠
f
(
x
)
)
给定一个有限集X的正确标记输入,安全要求是确保对于所有接近输入x∈X的输入x^{\prime},我们有f(x^{\prime}) \neq \operatorname f(x))
给定一个有限集X的正确标记输入,安全要求是确保对于所有接近输入x∈X的输入x′,我们有f(x′)=f(x))
理解:就是输入相似,但结果相反
输
入
的
接
近
度
:
(
这
里
使
用
l
∞
)
c
l
o
s
e
(
x
1
,
x
2
)
=
∣
∣
x
1
−
x
2
∣
∣
∞
≤
b
输入的接近度:(这里使用l_∞)\\ close(x1, x2) = ||x1 − x2||_{∞} ≤ b
输入的接近度:(这里使用l∞)close(x1,x2)=∣∣x1−x2∣∣∞≤b
自动测试生成算法
LP求解器
测试标准的特点是,每个决策神经元decision neuron 的(符号或值)变化必须由其条件神经元 condition neurons的(符号或距离)变化来支持
给定一个神经元对和一个测试标准,我们将找到两个激活模式,这两个模式将一起显示相应测试标准所要求的变化。与这些模式匹配的输入将被添加到最终的测试套件中
理解:就是去生成一个在同一个测试标准下是否有那种输入相似结果相反的用例
L
P
求
解
器
的
公
式
x
2
=
l
p
_
c
a
l
l
(
C
[
x
1
]
,
o
b
j
)
输
入
变
量
x
,
则
返
回
其
值
x
2
如
果
返
回
成
功
,
x
2
就
是
满
足
C
[
x
1
]
的
线
性
约
束
的
目
标
LP求解器的公式\\ x_2 = lp\_call(C[x1], obj)\\ 输入变量\mathbf x,则返回其值x_2\\ 如果返回成功,x2就是满足C[x1]的线性约束的目标
LP求解器的公式x2=lp_call(C[x1],obj)输入变量x,则返回其值x2如果返回成功,x2就是满足C[x1]的线性约束的目标
理解:LP求解器就是为了生成这样的用例而存在的
测试集生成算法:
第一步
理解:
- 遍历所有的相邻层的神经元对
- 通过函数获得一对x1,x2(核心)
- 如果输入合法则
- 把这一对输入加入到测试集T中
- 如果两个输入的lable(输出值)不同,并且满足两个输入接近类似则(这行就是输入相似,输出相反的意思)
- 把这一对输入加入到测试集T`中
- 返回T和T’
其核心在于第二行的get_input_pair函数,也就是如何构造与已知输入相配的输入
其实就是找输入相似,输出相反的一对用例
第二步
这里只给出covSS,其他类似,只是求解器的约束不同
理解:
- 对于所有的测试用例
- 调用lp求解器,此lp求解器要满足如下约束:独立影响,输入相似
- 如果x2是合理的,则返回
注意:
注 意 : 当 实 现 c o v D S h 和 c o v S V h , g 的 测 试 生 成 时 , 不 需 要 遍 历 每 个 神 经 元 对 , 理 由 见 他 们 的 注 意 2 ( 只 要 第 二 分 量 相 同 , 则 一 个 覆 盖 另 一 个 也 覆 盖 ) 注意:当实现cov^h_{DS}和cov^{h,g}_{SV}的测试生成时,不需要遍历每个神经元对,理由见他们的注意2\\(只要第二分量相同,则一个覆盖另一个也覆盖) 注意:当实现covDSh和covSVh,g的测试生成时,不需要遍历每个神经元对,理由见他们的注意2(只要第二分量相同,则一个覆盖另一个也覆盖)
应用于TopK思想
因 为 网 络 的 ∣ O ( N ) ∣ 可 能 太 大 了 , 这 样 计 算 量 大 , 一 种 方 法 是 只 有 当 权 重 w k + 1 , i , j 是 k 个 最 大 值 之 一 时 , 即 : { ∣ w k + 1 , i ′ , j ∣ ∣ i ′ ∈ [ 1 … s k ] } 才 算 作 神 经 元 即 : ( n k , i , n k + 1 , j ) ∈ O ( N ) 因为网络的|O(N)|可能太大了,这样计算量大,一种方法是\\ 只有当权重w_{k+1,i,j}是k个最大值之一时,即: \left\{\left|w_{k+1, i^{\prime}, j}\right| | i^{\prime} \in\left[1 \ldots s_{k}\right]\right\}才算作神经元\\ 即: (n_{k,i}, n_{k+1,j} ) ∈ O(N ) 因为网络的∣O(N)∣可能太大了,这样计算量大,一种方法是只有当权重wk+1,i,j是k个最大值之一时,即:{∣wk+1,i′,j∣∣i′∈[1…sk]}才算作神经元即:(nk,i,nk+1,j)∈O(N)