A Comprehensive Study on Deep Learning Bug Characteristics

Abstract

1.本文研究深度学习库中bug的一些特性;

这些深度学习库包括 Caffe, Keras, Tensorflow, Theano, Torch

2.本文的数据来源:

  • 2716 high-quality posts from Stack Overflow
  • 500 bug fix commits from Github

都来自带与上述库相关的post 和 commits中

3.本文研究的bug特征:

  • bug的种类
  • 引发bug的根本原因
  • bug的影响
  • 深度学习过程中容易引发bug的阶段
  • buggy software中的antipattern

在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。

Introduction

1.关于深度学习库的bug一般分为两类:

  • DL library自身的错误
  • 使用DL library时的错误

本文聚焦的是使用时遇到的错误

2.在深度学习中,每个库的目的是不一样的;

  • Tensorflow : low-level, highly configurable facilities
  • Keras: aims to provide high-level abstractions hiding the low-level details
  • Theano and Torch : focus on easing the use of GPU computing

3.数据的意义

  • Stack Overflow: 开发者在使用DL库时遇到的问题
  • Github: 开源软件中bug被发现和修复的情况
  1. 本文的RQ
  • RQ1: (Bug Type) What type of bugs are more frequent?
  • RQ2: (Root cause) What are the root causes of bugs?
  • RQ3: (Bug Impact) What are the frequent impacts of bugs?
  • RQ4: (Bug prone stages) Which deep learning pipeline stages are more vulnerable to bugs?
  • RQ5: (Commonality) Do the bugs follow a common pattern?
  • RQ6: (Bug evolution) How did the bug pattern change over time?

Methodology

Data collection

高质量post的标准:difference between the number of its upvotes and its downvotes, were greater than 5

需要包含code

Classification

将很多传统软件工程的概念迁移到的AI testing中,赋予了比较新的意义。

本段介绍了如何分类bug的种类和引起bug的原因。

深度学习的seven stage pipeline: The stages are data collection, data preparation, choice of model, training, evaluation, hyper parameter tuning and prediction.

Labeling the bugs

两个作者的标注需要做一致性检验

使用 Cohen's Kappa Coefficient作一致性检验

一开始很低,再经过培训后,一致性变高

Cohen's Kappa Coefficient

在做数据分析时,我们经常会面临一致性检验问题,即判断不同的模型或者分析方法在预测结果上是否具有一致性、模型的结果与实际结果是否具有一致性等。另外,一致性检验在临床实验中也有着广泛的应用。对于两个或多个医务工作者对同一病人给出的诊断结论进行一致性检验,英文叫 interrater reliability; 对同一医务工作者多次诊断结论的一致性检验,英文叫 intrarater reliability。

Bug Types for DL

1.API bug

The prime causes for triggering of deep learning API bugs can be because of the change of API definition with different versions, lack of inter-API compatibility and sometimes wrong or confused documentation.

接口版本变化,缺乏兼容性,文档模糊的问题

2.Coding bug

编程的语法错误,通常引发错误结果和run time error

3.Data bug

输入数据不规范或者清洗不干净引发,在data输入模型之前就会发生;

4.Structure bug

绝大多数的深度学习错误是由于对深度学习模型的结构定义不正确而导致的。 这些包括深度学习模型的不同层之间的size不匹配,训练和测试数据集之间存在异常,在实现特定功能时使用不正确的数据结构等。

  • Control and Sequence bug

    在许多情况下,由于错误的if-else或loop引发,模型无法按预期执行。

  • Data Flow bug

    如果在输入到深度学习模型后由于输入数据的类型或形状不匹配而导致发生错误,则将其称为数据流错误。

  • Initialization Bug

    在深度学习中,Initialization Bug表示参数或函数在使用之前未正确初始化。

  • Logic Bug

    通常由模型结构有误导致,这些错误通常是在代码中没有适当保护条件的情况下生成的,或者是试图实现在深度学习模型的给定结构中无法实现的功能。

  • Processing Bug

    每层的数据类型需要遵循它们之间的Contracts。 由于违反这些Contracts或错误选择算法,会发生处理错误。

5.NMSB

发生在模型外的错误。与SB类似,但是发生在modeling之外的部分。

  • Control and Sequence bug
  • Initialization Bug
  • Logic Bug
  • Processing Bug

Root causes for bugs

  • Absence of inter API compatibility : 库之间不兼容。eg.无法在keras上直接使用Numpy函数。

  • Absence of type checking:Type 不匹配,尤其是在调用API时容易出现。

  • API Change. API版本改变;

  • API Misuse. 错误使用了某个API

  • Confusion with Computation Model: 弄错模型的阶段

  • Incorrect Model Parameter or Structure (IPS) : 构建模型的错误,例如结构错误或者参数错误

  • Others. 与模型无关的一些错误

  • Structure Inefficiency (SI). 模型结构的问题会导致模型表现差。SI引起的是bad performance,IPS

    引起的是crash

  • Unaligned Tensor (UT):Tensor 向量维度出现问题

  • Wrong Documentation. 文档错误引发的结果

Effects of bugs

  • Bad performance:训练效果不好
  • Crash :模型崩溃
  • Data Corruption:数据在使用过程中崩溃
  • Hang:长时间训练但是精度并未得到提升
  • Incorrect Functionality:功能性错误
  • Memory out of bound:内存资源不够用

FREQUENT BUG TYPES

Data bugs

Statistics of Bug Types in Stack Overflow and Github

F1: Data Bugs appear more than 26% of the times.

Data bugs常见于预处理的阶段

Structural Logic Bugs

F2: Caffe has 43% Structural Logic Bugs.

大部分Caffe的bug都是在构建模型结构的时候发生的

API Bugs

F3: API Bugs:Torch, Keras, Tensorflflow have 16%, 11% and 11% API bugs respectively.

这个bug具有一定的广泛性。Keras and Tensorflow 相比更严重。

Bugs in Github

F4: All the bug types have a similar pattern in Github and Stack Overflow for all the libraries.

对于每一种类型的bug,我们把其在github和stackoverflflow上对于五个后端的分布进行T检验,对于NMSLB以外的所有错误类型,P值均大于5%,这表明它们具有相似的分布。

ROOT CAUSE

Statistics of the Root Causes of Bugs

IPS

后果最严重

Finding 5: IPS is the most malicious root cause resulting in average 24% of the bugs across the libraries.

SI

Finding 6: Keras, Caffe have 25% and 37% bugs that are resulted from SI.

SI问题通常影响的是QoS和非功能性需求,对服务质量有很大的影响。

UT

Finding 7: Torch has 28% of the bugs due to UT.

Absence of Type checking

Finding 8: Theano has 30% of the bugs due to the absence of type checking.

API Change

Finding 9: Tensorflow and Keras have 9% and 7% bugs due to API change.

Root Causes in Github data

Finding 10: Except API Misuse all other root causes have similar patterns in both Github and Stack Overflow root causes of bugs.

Relation of Root Cause with Bug Type

Finding 11: SI contributes 3% - 52% and IPS contirbutes 24% - 62% of the bugs related to model.

IMPACTS FROM BUGS

Effects of Bugs in Stack Overflow and Github

Crash

最重大的影响

Finding 12: In average more than 66% of the bugs cause crash of the programs.

Bad Performance

Finding 13: In Caffe, Keras, Tensorflow, Theano, Torch 31%, 16%, 8%, 11%, and 8% bugs caused bad performance respectively.

Incorrect Functionality

Finding 14: 12% of the bugs in average in the libraries cause Incorrect Functionality .

Effects of Bugs in Github

Finding 15: For all the libraries the P value for Stack Overflow and Github bug effects reject the null hypothesis to confirm that the bugs have similar effects from Stack Overflow as well as Github bugs.

对于所有库,Stack Overflow和Github Bug效果的P值都将拒绝原假设,以确认这些Bug与Stack Overflow和Github Bug具有相似的效果。

DIFFICULT DEEP LEARNING STAGES

Data Preparation

Finding 16: 32% of the bugs are in the data preparation stage of the deep learning pipeline.

占比最大

Training stage

Finding 17: 27% of the bugs are seen during the training stage.

很多IPS 和 SI 错误都来自于这一阶段

Choice of model

Finding 18: Choice of model stage shows 23% of the bugs.

IPS,SI , UT都来自这一阶段

COMMONALITY OF BUG

Correlation of Bug Types among the libraries

这些library的强相关系数接近1。 对于type of bug,Torch与其他库的相关性非常弱。

研究方式:随机研究了每个library中含有代码的30个posts,寻找可能导致这种错误类型强烈相关的antipattern。

Distribution of different antipatterns

Finding 19: Tensorflow and Caffe have a similar distribution of antipatterns while Torch has different distributions of antipatterns.

Tensorflow and Caffe 的分布类似, Torch与之截然不同。

在Tensorflow和Caffe中,30%+的antipatterns是Input Kludge。 另一方面,在“Torch”中,有40%的错误是由于“Cut-and-Paste Programming”导致的。 这可以分析correlation 之间的关系。

anti pattern的类型:

  • Continuous Obsolescence:API弃用
  • Cut-and-Paste Programming:复制粘贴编程
  • Dead Code:无效代码
  • Golden Hammer:开发人员和管理人员对现有的方法感到满意,不愿意学习和应用更适合的方法
  • Input Kludge:意外输入
  • Mushroom Management:一些情况下,为了完成他们的工作,开发人员必须做出假设,这可能导致伪分析,也就是说,在没有最终用户参与的情况下进行面向对象的分析。一些蘑菇管理项目完全消除了分析,并直接从高层需求进行设计和编码。
  • Spaghetti Code:软件结构也不够清晰。

EVOLUTION OF BUGS

Positive growth of Structural Logic Bugs

Finding 20: In Keras, Caffe, Tensorflow Structural logic bugs are showing increasing trend.

在Keras, Caffe, Tensorflow中, Structural logic bugs 有增长的趋势。

Decreasing trend of Data Bugs

Finding 21: Data Bugs slowly decreased since 2015 except Torch.

除了Torch之外,Data bugs都在减少

感受

1.这篇文章重新定义了:bug type 和 root cause, 应用到了DL领域;总结了现有的bug impact;

2.深度学习的seven stage pipeline: The stages are data collection, data preparation, choice of model, training, evaluation, hyper parameter tuning and prediction.

可以作为分析条件

3.可以看出 Tensorflow and Caffe 的bug分布是类似的,如果在今后的实验中,Tensorflow and Caffe 和 Torch 可能会出现差异的话,这里的结论可以用来解释;

4.这种类型的分析可以迁移到特定领域 (自动驾驶,NLP等)

5.IPS SI 检测 修复 (某种特定类型的bug)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,332评论 0 10
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,453评论 0 13
  • 焦点初16坚持分享第73天 20190817 星期六 晨读分享:建立良好构成目标的代表性问句是奇迹问句与假设问句,...
    L玲珑剔透阅读 197评论 1 1
  • 做梦是一种奇怪的旅程,在这个世界里,没有任何逻辑而言,都是潜意识,在这个世界里你几乎是不能控制自己的。然而感觉呢,...
    小武子阅读 371评论 0 1
  • 在记忆里,吃饺子的日子大多充满了温馨和幸福,但有时也有一些特别的记忆,当时看来很尴尬。 母亲包饺子的手艺虽然比不上...
    烟云留痕阅读 1,456评论 24 38