专栏名称: 机器之心
专业的人工智能媒体和产业服务平台
目录
相关文章推荐
宝玉xp  ·  //@明风:城会玩 ... ·  昨天  
爱可可-爱生活  ·  【R1:一个为强化学习训练提供增强版GRPO ... ·  2 天前  
爱可可-爱生活  ·  【[90星]torchvista:用一行代码 ... ·  2 天前  
爱可可-爱生活  ·  早! #早安# -20250607050903 ·  3 天前  
爱可可-爱生活  ·  本文开创性地提出了“嫁接”(grafting ... ·  3 天前  
51好读  ›  专栏  ›  机器之心

深度 | 详解首个系统性测试现实深度学习系统的白箱框架DeepXplore

机器之心  · 公众号  · AI  · 2017-06-19 12:18

正文

请到「今天看啥」查看全文


  • 通过比较多个相似的 DNN 的输出来检查 DNN 的输出;

  • 自动「轻微推动」运行过程向目标移动,即:(2) 中定义的检查可以找到不一致的地方,同时 (1) 中定义的覆盖实现最大化,同时还考虑到了约束条件;

  • 使用了有效的基于梯度的联合优化而做到了 (3)。


  • 但对于这其中的每一个,我都有问题。这不是坏事:实际上这篇论文带来的很多问题是一个很大的加分——我已经在期待后续的研究了。我的问题主要和 DeepXplore 的「仅有白箱(whitebox-only)」的本质有关(当然,这也是一个优点)。


    让我按顺序逐一阐述一下这四个主要思想,讨论一下我喜欢它们的理由以及相关的问题:


    1. 使用神经元覆盖


    对于一组 DNN 运行,它们的覆盖指标是「在这些运行过程中有多大比例的神经元(DNN 节点)至少激活了一次」。其核心思想是,对于一个给定的 DNN 输入,每个神经元要么是激活的(即超过了阈值),要么就保持为 0。正如原论文说的一样:


    最近的研究已经表明 DNN 中的每个神经元往往需要负责提取其输入的一个特定的特征……这个发现直观地解释了为什么神经元覆盖是一个用于 DNN 测试全面性(testing comprehensiveness)的好指标


    注意,这些节点对应的特征并不一定能够用我们的语言直观描述(比如:一个有两只眼睛的物体)。但 DNN 训练的优化过程通常确实会使它们对应于一些「可复用的特征」,即让 DNN 在许多不同输入上都有用的东西。


    研究者之前也尝试过自动使神经元活跃,比如在论文《Understanding Neural Networks Through Deep Visualization》为了可视化神经元的工作,但使用神经元覆盖(neuron coverage)来进行验证应该是一个新的好想法。


    可能的问题:


    但是注意,神经元覆盖(类似于 软件验证中的代码覆盖(code coverage))是真正的实现覆盖(implementation coverage)。而实现覆盖就我们所知是不够的,主要是因为其对因疏忽造成的漏洞没有助益:如果你接收/传输 软件的模块遗忘(SW module forgot)来实现传输,或遗忘有关「接收同时传输」的问题,然后你可以实现 100% 的代码覆盖并达到完美,直到有人实际写出了一个传输测试(或用户自己尝试传输)。


    参见覆盖的多个讨论(实现,功能等等):https://blog.foretellix.com/2016/12/23/verification-coverage-and-maximization-the-big-picture/


    这对于 DNN 也是一样:如果你忘记在「靠右行驶」、谨慎转弯或巴士上涂鸦的人上训练的驾驶 DNN,那么你可能会在一个漏洞很多的系统上实现 100% 的覆盖。


    作者回复:


    我们完全同意你的观点。完全的神经元覆盖(full neuron coverage)(就像代码覆盖)无法保证能找到所有可能的漏洞。话虽如此,我们也在思考扩展神经元覆盖的定义,使之能够包含不同类型的覆盖(比如在传统软件中就像路径覆盖(path coverage)一样的神经元路径覆盖(neuron path coverage))。


    我认为扩展神经元覆盖能或多或少带来一些帮助。假设(这里简化了很多)我们的驾驶 DNN 有一个用于检测「狗在公路上」的神经元和另一个用于检测「猫在公路上」的神经元。那么,除了分别单个覆盖它们,我们还想要覆盖它们的反例(「没有狗」)和组合(「有狗有猫」、「有猫且没狗」)以及序列(「有猫然后有狗」——这就是上面提到的神经路径覆盖)。


    但是,这只是实现覆盖,下面可看到更多评论。


    通过比较其它实现来检查 DNN


    他们检查行为的方式是比较多个、或多或少不同的基于 DNN 的实现,来看它们是否吻合。这是 软件「差分测试(differential testing)」的一种扩展,其(对于你们这些来自硬件验证的人来说)基本上和原来的「通过一个参考模型进行检查」差不多。


    潜在问题:


    通过参考模型检查通常是假设该参考模型是(几乎)完美的,即是可以被信任的。当然,事实并非如此,所以是有潜在问题的。


    比如说,这能找到遗漏的 bug 吗?只能考虑我们在训练过程中考虑过的一些 DNN 案例,而不能考虑其它的。但我很怀疑这是否足够。该论文说道:


    如果所有被测试的 DNN 都会犯同样的错,那么 DeepXplore 不能生成对应的测试案例。但是,我们发现这在实际中并不是一个显著问题,因为大多数 DNN 是独立构建和训练的,它们都会犯同样错误的概率比较低。


    但这是假设 (a) 你在现实和充满竞争的市场中能够获取许多不同的实现,和 (b) 至少有一位作者(比如 Tsunami)想过这并不一定现实。


    作者回复:


    这确实是差分测试的一个限制。以一种独立的方式测试一个模型的一种方法是使用对抗 DNN 测试技术,这种方法目前仅允许实现人眼不可见的轻微扰动。你也许可以扩展对抗训练来使用范围广泛的现实约束。比如说,通过改变光的效果。但是,这种方法的主要问题是缺乏数据标签。我们很难确定一个 DNN 模型是否做出了正确的分类。理论上,任何扰动都可以任意改变图像的真实标签。







    请到「今天看啥」查看全文