[论文解读] Testing Deep Neural Networks

Testing Deep Neural Networks

注意:本文特别多的公式,但很多公式其实都是把一些知识用公式化的语言描述出来了而已.
这篇论文更新了新的版本..改了一些东西..

论文标题
  • Testing Deep Neural Networks
  • 测试深度学习系统
  • 2018.3
核心内容
  1. 介绍了三种变化, 符号变化,值变化,距离变化.
  2. 介绍了四种覆盖方法: ss, ds, sv, dv
  3. 自动测试用例生成算法
背景
  1. 前人的如下两种测试方法是不好的

    • 使不同的测试样例激活不同的神经元,最终让每个神经元都曾被激活或抑制,从而看出是不是有“坏”的神经元
    • 随机生成测试样例的方法,尽可能多的遍历输入空间

    第一种仅凭“激活”来测试神经元过于粗糙,第二种又过于低效

核心思想
  1. "输入相似,输出相反"

    一对 “输入相似,输出相反” 的用例是很好的测试例子

  2. MC/DC

    将MC/DC的思想 “构造一个使得分支条件中的布尔表达式中每个子条件都独立影响结果的测试集” ,

    类比到神经网络 “把上一层的所有神经元看作一个分支条件布尔表达式中的各个子条件,本层的某个神经元看作是结果” ,从而提出了新的测试方法

  3. "独立影响"

    举例: 在两次的输入x1和x2下,神经元n2,1、n2,2、n2,3的符号为(+±)和(+++),神经元n3,1的激活状态为(+)和(-),则称神经元n2,3独立影响了神经元n3,1。(这里使用符号变化,还可以类比值变化等)

    利用 “独立影响” 的关系,我们就可以得到一个测试集,使得相邻两层网络的所有相连的神经元对都构成“独立影响”的关系

  4. 测试覆盖率

    能够在测试集中找到两个输入使得满足 “独立影响” 条件的神经元对的个数除以所有的神经元对

  5. 输入相似 : 跟据真实的输入生成测试用例

    测试样例的生成并不是随机的,而是根据真实的输入“变异”得来的。那么生成测试样例输入的过程为:给定一个已知的输入,作者构造一个另一个和它相配的输入,使得这一对神经元满足 “独立影响” 条件,并且,这两个输入要尽可能的相似。这就符合深度学习领域bug的特征—输入相似,输出相反

结论
  1. 提出了一套新的DNNs测试准则,为每个准则开发了一个测试集生成算法,
  2. 测试集生成算法可以有效地挖掘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={Lkk{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,LkSknk,l:klnk,l

T

T是层与层的连接
T ⊆ L × L T \subseteq L \times L TL×L
除了输入和输出层外,每个层都有一个传入连接和一个传出连接

Φ

Φ是一组激活函数

一层一个激活函数:
ϕ k : D L k − 1 → D L k \phi_{k} : D_{L_{k-1}} \rightarrow D_{L_{k}} ϕk:DLk1DLk

激活函数的集合:
Φ = { ϕ k ∣ k ∈ { 2 , … , K } } \Phi=\left\{\phi_{k} | k \in\{2, \ldots, K\}\right\} Φ={ϕkk{2,,K}}

v k , l : 我 们 使 用 v k , l 表 示 n k , l 的 值 v_{k, l}: 我们使用v_{k, l}表示n_{k, l}的值 vk,l:使vk,lnk,l

除 输 入 外 , 即 对 于 所 有 2 ≤ k ≤ K  and  1 ≤ l ≤ s k 每 个 节 点 都 通 过 预 定 义 的 权 重 连 接 到 上 一 层 中 的 节 点 , 这 样 除输入外,即对于所有2 \leq k \leq K \text { and } 1 \leq l \leq s_{k}\\ 每个节点都通过预定义的权重连接到上一层中的节点,这样 2kK and 1lsk

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+1hsk1wk1,h,lvk1,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}的偏差 ,wk1,h,lnk1,hk1hnk,lklδk,lnk,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 =argmax1lsK{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]nklvkllabel[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]:reluvk,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])={+11 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。 NRTM:N×R×T[0,1].M(N,R,T)TNM(N,R,T)RMRRTR

  • 下一层神经元表示的信息可以被看作是当前层信息的摘要

  • 我们标准的核心思想是确保不仅需要测试特征的存在,而且必须测试较不复杂特征对较复杂特征的影响。

深度学习中的条件(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,l2kK and 1lsk(decision),(conditions)k1,:{nk1,l1lsk1}

定义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)kk+1,:1kK1, 1isk, 1jsk+1O(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,lx1,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,lx1,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\\ guk,l[x1]uk,l[x2]d,:uk,l[x1]uk,l[x2]d:uk,l(x2)uk,l[x1]>duk,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,l1lsk},hx1x2,Pk:h(uk[x1],uk[x2])=true 对于所有的 nk,lPk, 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]pd:l(L1L2L):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,lPk\{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}的标志 SSCovernklnk+1j

理解: (独立影响)就是在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])=truekk2.(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,lPk\{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。 NfFRfTRf使ONfαO(N)x1,x2TRf:f(α,x1,x2)fTRfTRfTf

定义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})|} NfF,TMRFMRf(N,Rf,T)=O(N){αO(N)x1,x2T: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个神经元的符号 NxN[x]ap[Nx]signs{+11}Nap[Nx]ap[x]ap[x]k,iki
理解: 激活模式就是看一组神经元是否被激活函数(如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],ukivkiRelunki,C1[x]:{uk,i0vk,i=uk,iap[x]k,i0,k[2,K),i[1sk]}{uk,i<0vk,i=0ap[x]k,i<0,k[2,K),i[1sk]}
理解: 这个公式就是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\} ukivk1jc2[x]uk,i=1jsk1{wk1,j,ivk1,j}+δk,ik[2,K),i[1sk]
理解:这个公式就更无聊了,就是神经元的计算公式即权重乘以值+偏置就是下一层某个神经元激活前的值了.
生 成 的 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.,LPx

约束

定义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,kK(:>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,iubk,i]nki使C[+(uki[lbk,iubk,i])].

理解:就是一种表示方法,把一些条件用这种表示方法写出来

安全要求

定义16 Safety Requirement(安全要求)
给 定 一 个 有 限 集 X 的 正 确 标 记 输 入 , 安 全 要 求 是 确 保 对 于 所 有 接 近 输 入 x ∈ X 的 输 入 x ′ , 我 们 有 f ( x ′ ) ≠ f ⁡ ( x ) ) 给定一个有限集X的正确标记输入,安全要求是确保对于所有接近输入x∈X的输入x^{\prime},我们有f(x^{\prime}) \neq \operatorname f(x)) XxXxf(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)=x1x2b

自动测试生成算法

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]的线性约束的目标 LPx2=lp_call(C[x1],obj)xx2x2C[x1]线

理解:LP求解器就是为了生成这样的用例而存在的

测试集生成算法:

第一步

在这里插入图片描述

理解:

  1. 遍历所有的相邻层的神经元对
  2. 通过函数获得一对x1,x2(核心)
  3. 如果输入合法则
  4. 把这一对输入加入到测试集T中
  5. 如果两个输入的lable(输出值)不同,并且满足两个输入接近类似则(这行就是输入相似,输出相反的意思)
  6. 把这一对输入加入到测试集T`中
  7. 返回T和T’

其核心在于第二行的get_input_pair函数,也就是如何构造与已知输入相配的输入

其实就是找输入相似,输出相反的一对用例

第二步

这里只给出covSS,其他类似,只是求解器的约束不同

在这里插入图片描述

理解:

  1. 对于所有的测试用例
  2. 调用lp求解器,此lp求解器要满足如下约束:独立影响,输入相似
  3. 如果x2是合理的,则返回

注意:

注 意 : 当 实 现 c o v D S h 和 c o v S V h , g 的 测 试 生 成 时 , 不 需 要 遍 历 每 个 神 经 元 对 , 理 由 见 他 们 的 注 意 2 ( 只 要 第 二 分 量 相 同 , 则 一 个 覆 盖 另 一 个 也 覆 盖 ) 注意:当实现cov^h_{DS}和cov^{h,g}_{SV}的测试生成时,不需要遍历每个神经元对,理由见他们的注意2\\(只要第二分量相同,则一个覆盖另一个也覆盖) :covDShcovSVh,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,jk,:{wk+1,i,ji[1sk]}:(nk,i,nk+1,j)O(N)

其他人的阅读笔记,可以快速把握思想

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度神经网络(Deep Neural Networks)是一种基于神经元模型的人工神经网络,它具有多个隐藏层,可以用于处理大规模的非线性问题。深度神经网络在图像识别、语音识别、自然语言处理等领域取得了很大的成功。 ### 回答2: 深度神经网络(Deep Neural Networks)是一种基于神经元相互连接的机器学习模型。它由多个神经网络层次组成,每个层次都有很多的神经元。与传统的浅层神经网络相比,深度神经网络可以学习到更加抽象和复杂的特征表示。 深度神经网络的训练过程通常使用前向传播和反向传播算法。在前向传播过程中,输入数据从输入层逐层传播到输出层,每一层都通过激活函数将输入信号进行非线性转换,生成输出。然后,通过与真实结果进行比较,计算损失函数,并使用反向传播算法更新每个神经元的权重和偏置值,使得损失函数最小化。 深度神经网络在许多任务中表现出色,如图像分类、语音识别和自然语言处理等。这些模型可以通过训练大量数据来学习到更复杂的特征,从而提高模型的性能。此外,深度神经网络还可以通过迁移学习和预训练模型的技术来应对数据不足的问题。 尽管深度神经网络在许多领域中取得了显著的成功,但也存在一些挑战。首先,深度神经网络的训练通常需要大量的计算资源和时间。此外,深度网络的结构非常复杂,导致模型的解释性较差。因此,解释模型的决策过程和发现模型中的错误仍然是一个开放的问题。 总之,深度神经网络是一种强大的机器学习模型,可以学习到更复杂的特征,提高模型性能。随着技术的不断发展和研究的深入,深度神经网络将在各个领域中发挥更重要的作用。 ### 回答3: 深度神经网络(Deep Neural Networks)是一种机器学习的模型,模仿人脑的神经网络结构和功能。它由多层神经元组成,每一层的神经元都会计算输入数据的线性组合,并通过激活函数将计算结果传递给下一层。 与传统的浅层神经网络相比,深度神经网络具有多层的隐藏层,这使得它能够更好地处理复杂的问题。深度神经网络通过逐层学习和特征提取,能够从输入数据中自动发现和学习更抽象和高级的特征。 深度神经网络在许多领域中取得了巨大的成功,如计算机视觉、自然语言处理和语音识别等。例如,在计算机视觉中,深度神经网络可以通过层层学习,识别图像中的物体、人脸或文字等特征。在自然语言处理中,它可以利用隐藏层的特征,实现机器翻译、文本分类或情感分析等任务。 然而,深度神经网络也面临一些挑战。首先,深度神经网络的训练需要大量的数据和计算资源,因为网络结构更加复杂,参数数量也会增加。其次,深度神经网络容易过拟合,即在训练集上表现良好,但在未见过的数据上表现较差。为了解决这个问题,研究人员提出了一些正则化方法,如dropout和L1/L2正则化等。 总的来说,深度神经网络是一种强大的机器学习模型,可以自动从数据中学习和发现特征。它在各种应用领域有着广泛的应用,并且将会在未来的研究中不断演进和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值