你所在的位置: 首页 > 正文

TensorFlow程序Bug的实证研究

2019-07-19 点击:553
澳门百家乐官网

ae6ed9931d294ba1bd4f6c987b6ea5a8

引用:Zhang,Y.Chen,Y.Cheung,SC,Xiong,Y。和Zhang,L.2018,July。关于TensorFlow程序错误的实证研究。在第27届ACM SIGSOFT国际软件测试与分析研讨会论文集(第129-140页)中。 ACM.Proksch S,Amann S,Nadi S,et al。 [ACM新闻第31届IEEE/ACM国际会议 - 新加坡,新加坡(2016.09.03-2016.09.07)]第31届IEEE/ACM自动软件工程国际会议论文集 - ASE 2016 - 评估代码推荐系统的评估: a现实检查[J]。 2016: 111-121。

深度学习应用程序在自动驾驶系统和面部识别系统等重要领域变得越来越流行。有缺陷的深度学习应用程序可能会带来灾难性的后果。虽然最近的研究成果已经在深度学习应用的测试和调试上进行,但深度学习缺陷的特征从未被研究过。为了解决这个问题,我们研究了构建在TensorFlow上的深度学习应用程序,并从StackOverflow QA页面和Github项目中收集了与TensorFlow相关的程序错误。我们从QA页面提取信息,提交消息,提取请求消息,并检查这些错误的根本原因和症状。我们还研究了TensorFlow用户的错误检测和本地化部署策略。这些结果有助于研究人员和TensorFlow用户更好地理解TensorFlow计划中的编码缺陷,并指出未来研究的新方向。

DL应用程序的编程范例与传统应用程序有很大不同。在传统应用程序中,我们通过编写目标逻辑程序直接编写模型来解决问题。但是,DL应用程序不能直接通过编码模型解决问题。相比之下,DL应用程序依赖于DL模型的网络结构和大量数据的训练过程。网络结构和培训过程还需要仔细设置超参数。 DL应用程序的开发经常面临在开发传统对应项时很少遇到的任务,例如,配置包含节点层的复杂网络结构(也称为计算图)。此外,训练过程涉及密集循环,并且计算对超参数调整很敏感,例如学习率和放弃率(例如辍学,修剪策略)。

作者研究了一些关于DL应用的最新研究[1] [2] [3]和调试[4] [5]。并指出尽管如此,DL应用中的缺陷特征从未被系统地研究过。特别是,目前尚不清楚范式从传统编程语言到DL语言的新挑战对故障检测和定位会产生什么影响。例如,如果构建DL模型时缺少缺陷,那么在训练模型时捕获的可能性有多大?为此,在本文中,作者首次选择了TensorFlow这一深度学习框架,对该框架上编程的DL应用程序中编码错误的检测和定位进行了实证研究。该研究从GitHub和StackOverflow收集了TensorFlow编码错误。作者定量和定性地分析了这些错误并报告了(1)他们的症状和根本原因,(2)错误检测中的挑战,以及(3)错误位置的挑战。

在本文中,作者研究了构建在TensorFlow(以下简称TF)上的bug,依赖于对收集的数据集的分析,其中包含175个详细的bug信息。总结了几个重要发现:四个错误症状,七个错误根本原因,五个错误检测和定位困难,以及TF用户解决这些问题的五个策略。作者强调了五种错误检测和定位的难点。

本文主要提出并回答了以下两个问题:

RQ 1:这些错误的症状和根本原因是什么?

RQ 2:目前检测这些错误的新挑战是什么,TF用户如何解决这些挑战?

RQ 3:目前存在哪些新挑战来定位这些错误,TF用户如何解决这些问题?

总的来说,论文的贡献有三点:

从StackOverflow和GitHub收集的TensorFlow错误数据集。对错误的症状和根本原因的研究可能有助于未来对TensorFlow应用程序测试和调试技术的研究。研究检测和定位错误的新挑战以及解决这些问题的当前策略为未来的研究开辟了新的问题。

StackOverflow QA和GitHub提交的项目,前者包含难以调试的项目,后者更集中,难以检测。当使用StackOverflow获取数据时,关键字信息用于获取相关问题信息,作者进一步删除与TF安装和构造相关的无效内容。在GitHub上,选择维护良好的项目,然后使用关键字进行进一步的搜索选择,最后删除拼写错误,消除不相关和重复的提交。在结果验证上,两位作者独立判断,讨论了遇到的差异,并删除了无关的问题。结果总共有175个错误数据集,其中87个来自StackOverflow,其余来自GitHub。

(1)RQ1:bug症状和原因

对于GitHub错误,请使用提交信息和拉取请求信息来分析原因和症状。对于QA网站,请关注答案中是否有相应的原因分析。此外,该团队还尝试重现该错误,成功重放了87个GitHub中的75个错误以及87个StackOverflow中的76个错误。最后两位作者仍然使用手动分类验证的方法进行分类讨论。总结了以下四个症状和七个主要原因:

症状1:错误。 TensorFlow错误类似于传统应用程序中的异常或崩溃,例如NaN错误。 TensorFlow框架可能在构造或执行阶段引发错误。

症状2:效果不佳。该程序在执行阶段表现出极差的准确性或损失。

症状3:操作效率低下。在构造或执行阶段,程序执行缓慢甚至无限停滞。

症状4:未知。在讨论中没有迹象表明该错误的后果,症状仍然未知。

原因:(1)错误的模型参数或结构(2)不对称张量(3)Tensorflow计算模型的不熟悉(4)TensorFlow API变化(5)TensorFlow API误用(6)低效结构(7)其他

最终的分类统计数据见表1.

932a7772f879483aa6f3e894fa3751f8

表1 Bug症状和原因分布

(2)错误检测的困难

难点1;概率正确的问题。如何分析非确定性概率输出以确定输出是否不正确。作者发现,使用整体多数据对分析是一种很好的方法,TF用户主要依靠训练集或测试集的准确性和损失来做出判断。有两种相应的策略:一种是设置阈值,比较总体准确度或损失与预期值之间的差异;另一种是迭代比较最近的准确度和损失的变化程度来判断。

困难2:意外正确。与传统模型相比,TF模型对不会导致故障的意外错误不敏感,因为大规模数据下的单个错误不容易影响最终模型的准确性,并且一些非线性激活函数对某些输入范围不敏感。这些小错误很容易被后续操作放大,并且目标策略通常使用代码审查,即使没有生成错误结果,用户也将执行代码修改优化。

难点3:随机执行的问题,黑匣子训练和学习中的错误很难捕获。

(3)错误定位的困难

难度1:神经网络在内部是相互依赖的,当前层中的节点通常主要依赖于前一层中的节点。此外,在训练阶段,由于反向传播,依赖性变为双向的。因此,切片方法通常包含神经网络中的所有节点,并且无助于调试。

难点2:神经网络中存在未知行为。中间输出很难理解和判断对错。

相应地,作者发现三种典型的用户策略包括修改超参数,改变数据集的分布和测试变量值等等。

本文由南京大学软件学院2019年研究生夏志龙翻译

日期归档
实战百家乐 版权所有© www.videonworld.com 技术支持:实战百家乐 | 网站地图