随着神经网络等技术的快速发展, 人工智能被越来越多地应用到安全关键或任务关键系统中, 例如汽车自 动驾驶系统、疾病诊断系统和恶意软件检测系统等. 由于缺乏对人工智能软件系统全面和深入的了解, 导致系统 时常发生严重错误. 人工智能软件系统的功能属性和非功能属性被提出以加强对人工智能软件系统的充分认识和 质量保障. 经调研, 有大量研究者致力于功能属性的研究, 但人们越来越关注于人工智能软件系统的非功能属性. 为此, 专注于人工智能软件系统的非功能属性, 调研了 138 篇相关领域的论文, 从属性定义、属性必要性、属性示 例和常见质量保障方法几个方面对目前已有的研究工作进行系统的梳理和详细的总结, 同时重新定义和分析了非 功能属性之间的关系并介绍了人工智能软件系统研究中可以用到的开源工具. 最后, 展望了人工智能软件系统非 功能属性的未来研究方向和挑战, 以期为该领域的研究人员提供参考. 关键词: 人工智能软件系统; 非功能属性; 质量保障; 神经网络 中图法分类号: TP311 中文引用格式: 叶仕俊, 张鹏程, 吉顺慧, 戴启印, 袁天昊, 任彬. 人工智能软件系统的非功能属性及其质量保障方法综述. 软件学 报, 2023, 34(1): 103-129. http://www.jos.org.cn/1000-9825/6409.htm 英文引用格式: Ye SJ, Zhang PC, Ji SH, Dai QY, Yuan TH, Ren B. Survey on Non-functional Attributes for AI-enabled Software Systems and Quality Assurance Methods. Ruan Jian Xue Bao/Journal of Software, 2023, 34(1): 103-129 (in Chinese). http://www.jos. org.cn/1000-9825/6409.htm Survey on Non-functional Attributes for AI-enabled Software Systems and Quality Assurance Methods YE Shi-Jun, ZHANG Peng-Cheng, JI Shun-Hui, DAI Qi-Yin, YUAN Tian-Hao, REN Bin (College of Computer and Information, Hohai University, Nanjing 211100, China) Abstract: With the rapid development of neural network and other technologies, artificial intelligence has been widely applied in safety- critical or mission-critical systems, such as autopilot systems, disease diagnosis systems, and malware detection systems. Due to the lack of a comprehensive and in-depth understanding of artificial intelligence software systems, some errors with serious consequences occur frequently. The functional attributes and non-functional attributes of artificial intelligence software systems are proposed to enhance the adequate understanding and quality assurance of artificial intelligence software systems. After investigation, a large number of researchers are devoted to the study of functional attributes, but people are paying more and more attention to the non-functional attributes of artificial intelligence software systems. This paper investigates 138 papers in related fields, systematically combs the existing research results from the aspects of attribute necessity, attribute definition, attribute examples, and common quality assurance methods, and summarizes the research work on non-functional attributes of artificial intelligence software systems. At the same time, a summary and relationship analysis are presented on the non-functional attributes of artificial intelligence software systems. The open source tools that can be used in the research of artificial intelligence software system are surveyed. Finally, the thoughts on potential future research directions and challenges are summarized on non-functional attributes of artificial intelligence software systems, which, hopefully, will provide references
基金项目: 国家重点研发计划 (2018YFC0407901); 江苏省自然科学基金 (BK20191297); 中央高校基本科研业务费 (B210202075) 收稿时间: 2020-12-17; 修改时间: 2021-03-15, 2021-06-17; 采用时间: 2021-06-29; jos 在线出版时间: 2021-08-03 CNKI 网络首发时间: 2022-11-15 软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn Journal of Software,2023,34(1):103−129 [doi: 10.13328/j.cnki.jos.006409] http://www.jos.org.cn ©中国科学院软件研究所版权所有. Tel: +86-10-62562563 for researchers interested in the related directions. Key words: artificial intelligence software systems; non-functional attributes; quality assurance; neural network 随着计算机硬件、云计算和移动互联等领域的重大突破, 人工智能 (artificial intelligence, AI) 被逐渐应用于包 括癌细胞识别、农业土壤监测、广告精准投放、金融欺诈识别、信用评价以及自动驾驶汽车等 [1]安全关键或任 务关键系统中. 本文将这类模拟人的某些思维过程进行学习、推理、规划、思考等智能行为的系统统称为人工智 能软件系统. 人工智能软件系统具有较为复杂的结构, 如数字图片识别系统中一个简单的 4 层卷积神经网络就具 有超过 13 000 个参数, 一些人类无法发现的微小扰动就有可能导致神经网络出现相反的判断. 不幸的是, 由于缺乏 对人工智能软件系统的全面认识和评估标准, 导致在高风险应用中时常发生一些重大错误, 引起了人们对于人工 智能软件系统质量保障问题的关注和研究. 研究者从人工智能软件系统的分析、测试、验证等方面对人工智能软件系统的质量保障进行了探索 [2]. 依据 测试、验证的结果, 研究人员可以有依据、有方向地提出保障思路. 当前, 针对人工智能软件系统相比传统软件存 在的差异问题, 研究人员对传统软件测试方法进行改进和创新, 产生了各式各样的测试方法. 如 Pei 等人提出了一 种深度学习系统白盒测试方法——DeepXplore[3], 该方法通过使用生成的测试用例对模型进行重新训练来提高模 型的准确率, Pei 等人在实验中首次使用神经元覆盖率作为对抗性样本生成的度量指标, 同时他们以错误行为发现 次数和训练数据污染抵抗能力作为模型度量指标; Cisse 等人引入一种名为 Houdini 的对抗性示例生成方法 [4], 该 方法可基于语音识别、自然语言处理等应用模型的测试评估指标生成对抗性示例, 并且在实验中使用 PCKh (percentage of correctly detected keypoints)、结构相似性指数 (structural similarity index, SSIM) 和可感知性 (perceptibility) 作为模型方法的度量指标; Kurakin 等人利用快速梯度符号法 (fast gradient sign method, FGSM)、基 础迭代法 (basic iterative method, BIM)、最相似迭代法 (iterative least-likely class method, ILCM) 等算法生成对抗 性样本 [5], Kurakin 等人还将所生成的对抗性样本打印并通过模拟真实世界中的目标分类场景进行测试, 并在实验 中使用重构率 (destruction rate) 作为模型性能的度量指标. 测试、验证等方法多样化的同时也产生了系统评估标准不统一的问题, 为此研究人员在基于传统软件评估指 标基础上逐渐形成了人工智能软件系统的属性指标. 该指标的提出一方面加强了从业人员对人工智能软件系统的 认知, 另一方面提高了人工智能软件系统的质量保障力度. 人工智能软件系统的软件属性是指其为帮助用户实现 目标或处理问题所需要的条件, 也是人工智能软件系统及其组件要满足标准和规范所要具备的要求. 这些属性指 标对人工智能软件系统的性能维护和质量保障起到指向性的重要作用, 具体可分为功能属性 (functional attributes, FAs) 和非功能属性 (non-functional attributes, NFAs). 其中功能属性描述系统功能, 它是指人工智能软件系统为实 现用户需求和业务需求所必须具备的能力. 而非功能属性反映系统质量、特性和约束. 作为功能属性的补充, 非功 能属性是依赖于功能属性而存在的属性, 它们紧密约束和限制着人工智能软件系统, 对系统的质量保障具有非常 重要的作用. 对人工智能软件系统使用非功能属性指标进行评估能指出系统存在的不足; 即人工智能软件系统需要在什么 方面改进才能保障系统模型的质量. 当前研究中, 包括文献 [6,7] 在内的一些工作对人工智能软件系统的功能属性 已进行一定程度的概括, 但尚且缺乏对非功能属性进行系统研究的相关工作. 为了填补这个空白, 本文将以人工智 能软件系统非功能属性作为研究对象, 如图 1 所示, 详细地总结包含鲁棒性、安全性、数据隐私性、公平性、可 解释性和可用性在内的非功能属性. 目前王赞等人 [1]、Zhang 等人 [6]和 Vinayagasundaram 等人 [7]在针对人工智能领域的测试工作进行系统总结的 同时, 对人工智能软件系统的非功能属性也进行了一定程度的讨论. 王赞等人从包括测试度量指标在内的多个角 度来系统梳理深度神经网络测试的相关工作; Zhang 等人从范围更广的机器学习测试方面进行总结, 对机器学习 测试流程、测试组件、测试属性和应用场景等部分作出总结; Vinayagasundaram 等人则从整个人工智能软件系统 的体系结构角度对度量标准进行定义, 以衡量系统软件质量. 此外还有 Gilpin 等人 [8]和 Mehrabi 等人 [9]对人工智能 软件系统的单个非功能属性进行系统地梳理和说明. 令人遗憾的是, 这几项相关工作的内容主要讲述人工智能研 104 软件学报 2023 年第 34 卷第 1 期 究领域的测试和人工智能的体系结构, 对人工智能非功能属性的研究并未形成系统、有效的覆盖性总结. 本文将 关注人工智能软件系统的非功能属性. 如图 2 所示, 将从属性定义、属性必要性、非功能属性的示例以及常见质 量保障方法几个方面系统地梳理人工智能软件系统中常见的非功能属性. 其中, 属性定义以文字描述和公式表示 两种形式给出非功能属性的定义; 属性必要性讲述非功能属性在人工智能软件系统开发中的重要性; 属性示例中 以汽车自动驾驶系统等例子来呈现非功能属性; 常见质量保障方法部分总结现有的人工智能软件系统非功能属性 的质量保障方法和研究思路. 本文还将对非功能属性之间的关系进行定义和总结分析, 并展望人工智能软件系统 非功能属性的未来研究方向和挑战, 以期为该领域的研究人员提供参考. 为了对该研究问题进行系统的梳理和分析, 本文首先将“Non-Functional Attributes/Properties for Artificial Intelligence”“Robustness/Security/Data Privacy/Fairness/Interpretability/Usability of Artificial Intelligence”等设为搜索 关键词, 在国内外重要的学术搜索引擎 (例如 Google 学术搜索、Springer、DBLP、CiteSeerX、CNKI 等) 中检索 出相关论文; 随后, 我们筛选并移除了与该综述问题无关的论文. 有 3 名熟悉人工智能软件系统的研究人员参与了 这一过程, 并通过讨论来消除分歧; 接着, 通过查阅论文中的相关工作和研究人员的已发表的论文列表, 以及通过 已搜索到的文献的引用和被引用获取更多相关论文; 本文最终确定并引用了有关论文 138 篇. 论文的发表时间概 况如图 3 所示, 最终所选中的论文有 75 篇发表在 CCF 评级为 A, B 的各领域顶级期刊和会议上, 其中人工智能领 域 (38 篇)、软件工程及系统和程序设计语言领域 (15 篇)、计算机科学理论领域 (1 篇)、网络与信息安全领域 (18 篇)、计算机体系结构及平行分布计算和存储系统领域 (1 篇)、数据库及数据挖掘和内容检索领域 (1 篇)、人 机交互与普适计算领域 (1 篇). 除此之外, 本文引用的文献还包括 arXiv (17 篇)、CCF 评级为 C 类会议期刊论文 (7 篇)、软件学报 (2 篇)、其他 CCF 未收录的会议和期刊论文 (32 篇) 和相关书籍 (5 本). 图 4 展示了不同非功能 属性的论文分布情况.棒性 安全性 数据隐私性 公平性 可解释性 可用性 人 工 智 能 软 件 系 统 功 能 属 性 图 1 人工智能领域常见非功能属性功能属性 属性定义 属性必要性 属性示例 常见质量保 障方法 图 2 非功能属性研究范畴50 41 12 21 21 23 20 40 30 文献数量 20 10 0 年份 2000- 2016 2017 2018 2019 2020 2015 图 3 论文发表时间概况棒性 公平性 可解释性 安全性 数据隐私性 可用性 14% 15% 20% 11% 23% 17% 图 4 不同非功能属性研究工作占比 叶仕俊 等: 人工智能软件系统的非功能属性及其质量保障方法综述 105 本文第 1 节从属性定义、属性必要性、示例和常见质量保障方法几个方面对人工智能软件系统的非功能属 性进行详细的总结梳理; 第 2 节对人工智能软件系统非功能属性进行归纳, 并对它们之间存在的关系进行探讨; 第 3 节对本文所列举的人工智能软件系统非功能属性的现有工具或开源项目进行总结; 第 4 节总结全文, 并展望 非功能属性的未来研究方向和挑战. 1 人工智能软件系统非功能属性 在人工智能软件系统发展前期, 人们过于关注人工智能软件系统的功能属性, 从而对于非功能属性的认知远 远低于功能属性, 这不利于对人工智能软件系统的认知和保障工作. 近年来, 人们越来越关注非功能属性的研究, 将其作为人工智能软件发展的新突破. 常见的人工智能软件系统功能属性有正确性 (correctness) 和过拟合程度 (overfitting). 正确性是系统能够正确 处理各种输入并产生正确输出的能力 (概率)[6]. 正确性的研究主要集中于数据 [10]、模型 [11]和统计方法 [12,13]这 3 个 方面. 过拟合程度是衡量模型算法由于过度的拟合当前可用数据而导致无法很好地拟合未来数据或者可靠地 预测未来结果的程度指标 [14]. 关于过拟合的研究主要集中于产生过拟合的原因 (复杂的模型 [15]、稀疏的样 本 [16−18]) 以及模型过拟合验证 [19,20]两个方向. 功能属性描述了人工智能软件系统所具有的实现各种需求的能力. 而非功能属性依赖于功能属性, 是系统特 性和约束的表征. 人工智能软件系统常见的非功能属性有鲁棒性、安全性、数据隐私性、公平性、可解释性和可用 性等. 本节将以属性定义、属性必要性、属性示例和常见质量保障方法 4 个方面对以上非功能属性进行详细的阐述. 1.1 鲁棒性 1.1.1 鲁棒性定义 当前, 不同的研究对鲁棒性 (robustness) 有不同的定义.#(S )E(#(S )) (1) 鲁棒性在 IEEE 软件工程标准术语中定义为 [21,22]: “在无效输入或者压力环境下, 系统或者系统组件可以正 确运行的程度.” 借鉴这一定义, 用公式 (1) 给出鲁棒性在人工智能软件系统中的定义; 假设 S 为人工智能软件系统; E(S) 是 S 的正确性; 是对人工智能软件系统 S 的任意组件 (例如数据、学习程序或者框架) 经过干扰后的系 统, 则人工智能软件系统 S 的鲁棒性 r 就是 E(S) 和 之差的度量, 即:r = E(S ) - E(#(S )) (1) 因此, 鲁棒性衡量了人工智能软件系统对干扰的抵抗能力. (2) Huber 从统计学的角度系统地给出了鲁棒性 3 个层面的概念 [23]: ① 对于人工智能软件系统中所有学习模型的基本要求; 模型具有较高的精度或有效性; ② 对于模型所出现的较小偏差, 只能对算法性能产生较小的影响 (主要是噪声, noise); ③ 对于模型所出现的较大偏差, 不可对算法性能产生“毁灭性”的影响 (主要是离群点, outlier). (3) 对抗鲁棒性是鲁棒性的常见类别, 其主要利用对抗性输入来增强系统的鲁棒性. 参照 Katz 等人 [24]的工作 可将对抗鲁棒性分为局部对抗鲁棒性和全局对抗鲁棒性如公式 (2), 公式 (3) 所示. 首先是局部对抗鲁棒性, 假设: x 是人工智能学习模型 h 的一个测试输入; x’是通过对 x 进行对抗扰动而生成 的另一个测试输入; h(x) 和 h(x’) 是 x、x’在模型 h 上的输出. 对于任意 x’如果满足公式 (2), 则称模型 h 在输入 x 处 是 -局部鲁棒性的.∀x’ : ||x - x’||p ≤ → h(x) = h(x’) (2) 局部对抗鲁棒性要求在给定输入的领域内的所有样本都使用相同的标签进行分类. 换言之, 局部对抗鲁棒性 所关注的是对一个特定测试输入的鲁棒性, 而全局对抗鲁棒性是针对所有输入的鲁棒性." 全局对抗鲁棒性定义如下, 假设: x 是人工智能学习模型 h 的一个测试输入; x’是通过对 x 进行对抗扰动而生 成的另一个测试输入; h(x) 和 h(x’) 是 x、x’在模型 h 上的输出. 如果任意的 x 和 x’满足公式 (3), 则称模型 h 是 -全 局鲁棒性的: 106 软件学报 2023 年第 34 卷第 1 期 ∀x; x’ : ||x - x’||p ≤ → h(x) - h(x’) ≤ " (3)上述工作皆表明: 与正确性和过拟合程度不同, 鲁棒性是衡量系统在存在噪声干扰下的正确性 [6,25], 即一个具 有优异鲁棒性的系统在噪声干扰下应该能够很好地抵抗干扰、保持自身性能. 1.1.2 鲁棒性必要性 鲁棒性是人工智能软件系统的一种重要非功能属性 [26,27]. 随着人工智能逐渐在决策和自主系统中扮演至关重 要的角色, 例如在自动驾驶系统、恶意软件检测系统和医疗诊断系统中, 人工智能软件系统被发现在测试和应用 中时常由于环境、输入等因素的变化导致系统出错. 正如 Hamon 等人的工作提出; 当前正在开发的人工智能系统 距离实现自治系统所具有的最低鲁棒性、安全性要求还很遥远 [28]. 如何提高系统鲁棒性以减少系统出错成为亟 待解决的问题. 1.1.3 鲁棒性示例 为更清楚地解释鲁棒性, 本文以汽车自动驾驶系统 (autonomous driving system, ADS) 为示例. PC Magazine 将 自动驾驶汽车定义为“由计算机控制的自动驾驶的汽车”[29]. 自动驾驶系统被应用于汽车上来保证在无人操作情况 下, 汽车能够感知周围环境并且安全行驶. 关于自动驾驶系统的研发试验始于 20 世纪 20 年代, 并于 1977 年成功 在日本实验了第一款半自动汽车. 近年来, 快速发展的自动驾驶汽车呈现出实用化趋势. 就在人们欣喜于汽车自动驾驶系统的市场化时, ADS 却经常暴露一些致命漏洞. 自动驾驶系统中的识别功能 是汽车行驶过程中所做决策的重要依据之一, 包括了标志识别、人物识别和道路识别等. 但本田汽车公司所研发 的汽车自动驾驶系统在一次测试中被发现; 日本拉面“天下一品”的商标和交通标志“禁止驶入”会被汽车错误识别 为同一种标识; 在 2018 年亚利桑那州所发生的无人驾驶汽车致命事故 [30]中, 系统模型将行人错误地识别为物体, 从而导致了错误的行驶决策. 本节所要研究的鲁棒性就是能够表示系统在干扰环境下维持本身正确性的属性. 1.1.4 常见质量保障方法 当前人工智能软件系统鲁棒性质量保障的主流方法为对抗学习, 依据现有的工作可以将对抗学习分为以下 2 种. (1) 对抗性样本生成 基于 Szegedy 等人 [31]和 Wang 等人 [32]的工作, 攻击者通常可以通过对少量正确标记的输入进行扰动来构造使 系统错误输出的输入, 这些输入被称之为对抗性样本. 现有的方法大都是通过研究和构造对抗性样本来增强系统 模型的鲁棒性 [33−35]. Carlini 等人 [36]依据距离度量方法创建了一组攻击样本, 该方法对当前多种防御方法具有很强 的攻击能力; Tjeng 等人 [25]提出使用测试输入与其最接近的对抗示例之间的距离来衡量鲁棒性. (2) 对抗性学习训练 这类方法通过在人工智能软件系统模型优化过程中增加噪声、随机性或对抗性损失来实现, 目的是使训练后 的模型更加鲁棒. 比如 Gao 等人通过识别和删除 DNN 模型中不必要的功能来限制攻击者生成对抗性样本的能 力 [37]; Cheng 等人通过对抗稳定性训练来提高 NMT 模型的鲁棒性 [38,39], 他们对神经机器翻译模型 (neural machine translation, NMT) 中的编码器和解码器加入词汇级别和特征级别的扰动, 训练的结果显示 NMT 的鲁棒性和翻译 性能被大幅度地提升; Gehr 等人 [40]和 Ross 等人 [41]分别使用经典抽象解释和输入梯度正则化来增强模型的鲁棒性 和可解释性; Kwiatkowska 等人 [42]对深度神经网络的对抗性扰动进行研究, 他们介绍了针对深度神经网络所开发 的自动验证和测试技术并利用该技术确保模型决策在有限输入扰动时的安全性和鲁棒性. 除对抗学习外, 还包括对人工智能软件系统鲁棒性建模和构建指标的方法. 比如 Fawzi 等人 [43]对一般噪声情 况下非线性分类器的鲁棒性进行了首次定量分析并证明了实验结论对于各种最新 DNN 和数据集的优异泛用性; Bastani 等人 [44]提出了 3 种用于度量神经网络鲁棒性的指标, 并基于鲁棒性编码的线性程序设计了一种新算法来 近似这些指标; Banerjee 等人 [45]探索了使用贝叶斯深度学习来建模深度神经网络内部的误差传播, 从而在不进行 大量故障注入实验的情况下, 对神经网络对硬件错误的敏感性进行数学建模. 现有的针对人工智能软件系统鲁棒性的质量保障方法研究仍然存在一些方面的问题. 一方面是方法的研究方 向比较单一, 主要的研究基本聚焦于通过对抗学习来提升系统的鲁棒性, 同时大部分研究在关于对抗攻击、数据 叶仕俊 等: 人工智能软件系统的非功能属性及其质量保障方法综述 107 集规模和消耗时间的权衡上也存在不足; 另一方面, 无论是对抗性样本的生成过程还是在对抗学习的训练过程中, 研究者们提出的算法过于地依赖某个特定的模型或环境, 虽然在该模型上能取得较好的效果, 但是算法在其泛用 性和迁移性上存在一定的问题. 1.2 安全性 1.2.1 安全性定义 Zhang 等人在其工作中将安全性定义为 [6]: 人工智能软件系统的安全性 (Security) 是指系统抵御通过操纵或 非法访问模型学习组件造成的潜在伤害、危险或损失的能力. 同鲁棒性相似的是, 安全性也存在抵御外部攻击的要求; 不同的是, 鲁棒性是衡量系统受干扰后保持自身正确 性的能力, 安全性则衡量保护系统内部组件不受破坏或降低破坏程度的能力. 也就是说, 鲁棒性的衡量将依据噪声 等因素干扰下系统的正确性的程度, 而系统安全性的评估则更多地依赖于外部攻击对模型本身的破坏程度.Seval(S )S(S )eval(S )eval((S )) 人工智能软件系统的安全性公式定义如公式 (4) 所示, 假设: 为人工智能软件系统; 是系统 的安全 评估函数; 是被操纵或非法访问系统模型学习组件 (例如数据、学习程序或者框架) 之后的人工智能软件系统; 则系统的安全性为 和 之差的度量:s = eval(S ) - eval((S )) (4) 1.2.2 安全性必要性 自动驾驶汽车的市场化虽然令人期待, 但目前的自动驾驶系统仍然存在许多问题, 包括系统无法在任意环境 中保持绝对的决策正确性以及无法在任何情况下保证系统组件和功能安全. 前者属于鲁棒性的研究动因, 后者属 于本节安全性的研究范围. 可以说, 安全问题是自动驾驶系统研发试验的核心. 对于安全关键或任务关键领域的人工智能软件系统来说, 安全性一直是衡量系统性能的一个非常重要的指标. 1.2.3 安全性示例 以汽车自动驾驶系统为例, Uber 和 Tesla 的自动驾驶汽车皆发生过由于识别系统故障而导致的严重交通安全 事故. 频发的自动驾驶汽车事故, 引发了人们对于高风险人工智能应用的安全性担忧. 在传统的交通工具中, 汽车的行驶安全主要是人为操控, 再辅以另外一些安全功能 (例如车道保持, 紧急制动 等) 设计, 以帮助和减少风险. 即人为控制和安全机制组成了传统汽车的安全保障体系. 在自动驾驶汽车中, 人工智 能应用于包括感知、控制、路由等多个系统模块中. 自动驾驶系统采取的是归纳训练, 即没有明确的要求或设计 见解. 这导致系统不可能涵盖所有未知案例, 当汽车行驶过程中出现未知案例时就有可能导致事故的发生. 当前自动驾驶汽车主要采用危险方位报警指示器来增加安全性, 采取了包括故障树分析 (FTA)、向前向后搜 索 (FBS)、失效模式和影响分析 (FMEA)、危险与可操作性研究 (HAZOP) 在内的多种组合算法和策略. 1.2.4 常见质量保障方法 本小节将当前人工智能软件系统安全性质量保障的研究工作主要分为 3 类. (1) 第 1 类对人工智能软件系统中常见的攻击方式进行研究, 以此来防御针对系统的大部分攻击. 第 1 种攻击为模型反演攻击. 当前许多互联网公司都推出了人工智能服务即开发平台, 为众多开发者提供便 利的人工智能技术支持, 但同时也为攻击者提供了新的攻击方式. 由于模型是由一系列参数所决定, 攻击者可通过 求解模型参数的攻击方式来实现模型剽窃, 从而对模型持有者造成损失. 这种攻击被称为模型反演攻击.n + 1 Tramèr 等人 [46]在 2016 年的工作中提到这种攻击方式; 对于一个输入为 n 维的线性模型, 依据解方程的思想 (即一个 n 元方程, 至少拥有 n 个等式就能求解), 攻击者只需要通过 API 接口进行 次查询便可以窃取到这个 模型; Batina 等人 [47]也证明了假设攻击者已知所使用的神经网络结构, 便可仅通过单发边信道测量就可以对神经 网络的输入进行逆向工程; Yang 等人 [48]通过辅助集和截断技术的有效结合, 提出了一种即使目标模型为黑盒也能 进行模型反演的攻击方法. 第 2 种常见攻击方式是完整性攻击, 常见的完整性攻击有数据下毒攻击 [49]和对抗样本攻击. 下毒攻击多发生 108 软件学报 2023 年第 34 卷第 1 期 在模型的训练过程, 表现为攻击者修改模型现有的训练集或者增加额外的恶意数据 [49], 最后影响模型的完整性和 模型训练的结果; 对抗样本攻击发生在模型的预测阶段, 表现为在预训练数据中添加肉眼无法识别的微小扰动, 使 模型的结果发生错误. (2) 第 2 类从人工智能软件系统构建出发, 通过建立安全性论证体系、威胁分析及保护机制和安全性系统设 计原则来加强人工智能系统的安全保障. 改进人工智能软件系统安全性贯穿于系统构建全过程. 即开发者要建立安全性论证体系; 识别相关的危害和 安全要求、确定潜在的危害根源、针对每个危害制定一个缓解策略、提供证据证明缓解措施得到适当的实施. 在人工智能软件系统构建过程中, 开发者需要针对所设计的系统进行详尽的安全性考虑. 包括系统的安全需求 (策略)、威胁模型分析、攻击面分析和系统保护机制分析. Papernot 等人 [50]在其工作中对攻击面和威胁模型进行了 讨论, 他们将系统决策过程中的攻击面分成了 4 个阶段; 获取物理世界信息阶段、信息转换成数字化表征形式阶 段、表征进入机器学习模型训练阶段、模型返回物理世界进行推理预测阶段. 以汽车自动驾驶系统为例, 4 个攻 击面对应于: 1) 利用行车传感器获取诸如停车的交通标志 (获取物理世界信息阶段); 2) 将得到的信息转化成图片 进入预处理阶段 (转化成数字表征), 再将图像转化成 3 维的张量 (表征转化); 3) 应用模型对其进行分类置信度的 计算 (表征进入机器学习模型训练阶段); 4) 反馈到物理世界中, 让车辆刹车 (模型返回物理世界进行推理预测阶段). 关于威胁模型, Suresh 提出了建立威胁模型的 5 个步骤 [51]. 第 1 步是分析系统、定义外部实体和要保护的资产. 安全性设计的第 1 步是为了了解系统运行的环境以及攻 击者所要攻击的资产目标. 以汽车自动驾驶系统为例, 资产包括系统固件、系统数据和学习模型等, 外部实体则包 括了将与人工智能软件系统交互的用户和潜在的攻击者或对手. 第 2 步是识别潜在对手、攻击面和威胁. 对于大部分人工智能软件系统来说, 潜在对手主要为远程软件攻击 者和网络攻击者, 除此之外还包括通常很容易被忽略的恶意内部攻击者和攻击方式非常复杂的高级硬件攻击者. 威胁和系统安全级别的设置主要根据攻击的严重性来决定的. 目前确定系统安全威胁一般使用 STRIDE 模型 (欺骗身份、篡改数据、否认、信息泄露、拒绝服务和提升权限), 通过分析 STRIDE 威胁模型, 可以揭示应用程 序的泄漏和被攻击的范围. Yang 等人 [52]在其工作中对 STRIDE 威胁模型的 6 种威胁类型进行了详细的讨论. 评估 攻击的严重性可以使开发者能够适当的分配有限的开发资源, Houmb 等人 [53]提出一种风险水平估算模型, 该模型 可将风险水平作为频率和影响估算的条件概率得出. 频率和影响估算值是从“通用漏洞评分系统 (CVSS)”中得出 的. 该模型适用于漏洞级别 (就像 CVSS 一样), 并且能够将漏洞组成服务级别. 第 3 步是确定应对威胁的高级安全目标. 针对不同的对象, 开发者可以设定不同的安全目标来保持系统的 6 个安全要素; 保密性、完整性、可利用性、真实性、安全生命周期以及不可否认性. 依据对人工智能软件系统发 起的攻击类型来判断每个要素的风险. 基于以上信息, 开发者就基本可以确定人工智能软件系统将面对的威胁和 可采取的对策. 第 4 步是为每个安全目标定义安全需求. 例如从“安全生命周期”的目标出发, 开发者可以确定系统的最小权 限和孤立性原则、维持安全的系统状态、系统访问控制策略以及安全系统的初始化执行. 第 5 步是将所有信息整合进威胁摘要表. 将基于前 4 步工作得到的信息合并到威胁摘要表中, 最终得到当前 人工智能软件系统的威胁模型. 开发者在设计系统时须遵守基本的安全设计原则. ● 最小权限原则; 应该给予系统组件实现其功能所需的最低权限. 目的是最大限度地降低受损组件的影响. ● 孤立性原则; 组件之间的交互作用不应超过必要的程度. 目标是减少可信计算基数 (TCB) 的大小. 最小权限原则将通过减少每个系统组件的非必要权限, 防止高权限组件受损引发系统崩溃. 即防止如图 5 所 示, 当网络组件受到木马病毒等攻击而受损时, 由于网络组件的高权限将会导致整个系统的运行陷入混乱或停滞 的情况. McGraw 等人在论述软件安全时提到在设计和架构层次上, 系统必须是一致的, 并呈现一个考虑到安全原 则 (如最小特权原则) 的统一安全架构 [54]; Gollmann 等人在其关于计算机安全的工作中 [55]强调安全系统的设计应 该遵循 Ref13 所制定的最小特权原则等保护原则. 叶仕俊 等: 人工智能软件系统的非功能属性及其质量保障方法综述 109 孤立性原则要求尽量降低组件间的耦合度, 减少人工智能软件系统 TCB (trusted computing base) 的大小. 如 图 6 所示, 由于组件间的低耦合, 网络组件遭受破坏所产生的影响将会被限制在有限的非 TCB 中, 不会对人工智 能软件系统的安全造成实质的威胁. TCB 是系统中负责建立安全需求的组件, 如果任一 TCB 遭到破坏表示系统安 全受到威胁, 相反非 TCB 组件遭到破坏但系统安全性仍然保留, 因而在较差的系统设计中, TCB 等同于整个系统. (3) 第 3 类工作致力于为人工智能软件系统设计特定于任务的自定义安全协议. 由于经典的通用安全计算协议无法扩展至现实世界的人工智能应用中, 为了解决这个问题, 机器学习领域近 几年的工作结合了不同的安全计算基数来设计特定于任务的自定义协议. 包括约束优化 [56]和 K 近邻分类 [57]等. Agrawal 等人 [58]对 DNN 训练算法和安全协议两方面进行了优化, 提出了 QUOTIENT 方法. 该方法采用了归一化 和自适应梯度法, 不仅在安全性上提升显著, 在训练速度方面相较之前的工作 [59−61]也有明显的改善. 现有的针对人工智能软件系统安全性的质量保障方法研究存在几个不足. 首先, 虽然现有的研究已经提出了 各种方法来增强人工智能软件系统的安全性, 但是对于安全性基准的研究依然缺少. 例如当研究人员在不同工作 中使用了不同数据集时, 很难比较这些方法的优缺点. 其次, 过高的安全性将会带来更大的算法开销、更低的泛化 性能问题, 这 3 个方面如何进行适当的平衡是在设计和构建人工智能软件系统时需要注意的. 1.3 数据隐私性 1.3.1 数据隐私性定义 人工智能软件系统中的隐私性 (privacy) 是系统保留私有数据信息的能力 [50].D1D2"" 对于数据隐私性的公式定义, 本文采用 Dwork 等人工作中的差分隐私来定义 [62]; 如公式 (5) 所示, 假定 A 是 随机算法; 和 是两个仅在一个实例上不同的训练数据集; S 是 A 的输出集的子集; 参数 是隐私预算 (较小的 预算会产生更强的隐私保证); 参数 是故障率 (可以决定对于由 所定义的边界不成立的容忍程度). 则差分隐私 可用下列公式表示:Pr[A(D1) ∈ S ] ≤ e" ∗ Pr[A(D2) ∈ S ] + (5)D1D2D1D2 基于上述定义, 可知差分隐私可以确保 和 仅在一个实例中有所不同时, 学习者不应该从 中获得比从 中更多的信息. 1.3.2 数据隐私性必要性 在传统的机器学习领域, 研究者们关注模型对于结果预测的准确性, 同时又希望模型在不同场景中都有较强 的泛化能力 (指应用能力). 但在大数据时代, 数据的来源是复杂且敏感的, 个人的数据信息将直接同个人的隐私相 关. 模型在增强泛化能力的同时扩大了使用范围也增加了泄露数据和信息的危险度. 为此欧盟通用数据保护法规 (GDPR)[63]和加利福尼亚 CCPA[64]等监管法规相继出台来保证人工智能软件系统用 户 输 入 网 络 人工智能软件系统 网 络 网 络 网 络 人工智能软件系统 文 件 系 统 用 户 输 入 文 件 系 统 文 件 系 统 文 件 系 统 用 户 设 备 用 户 设 备 图 5 最小权限原则用 户 输 入 网 络 网 络 文 件 系 统 用 户 输 入 网 络 文 件 系 统 文 件 系 统 用 户 设 备 网 络 文 件 系 统 用 户 设 备 图 6 孤立性原则 110 软件学报 2023 年第 34 卷第 1 期 应用的数据隐私性. 1.3.3 数据隐私性示例 人工智能已经形成了一个商业模式, 机器学习即服务 (MLaaS) 领域的发展和应用为大量非专业的数据持有者 提供了构建私有模型的快捷方式, 但随之也增加了用户隐私暴露的危险性. 原因在于数据持有者在使用 MLaaS 时 可能使用到攻击者设计的可窃取数据的预训练模型, 攻击者可以通过解码模型参数轻松得到用户的隐私数据. 文 献 [65] 中的工作也提到; 尽管机器学习平台是安全可靠的, 但机器学习模型提供者提供的算法未必可信. 在医学领域中, 人工智能技术主要被用于医疗诊断和药物推荐. 训练模型所需的大量医疗数据和病人的隐私 信息联系紧密, 因而保护这些数据的隐私性是必要的. 但是, Fredrikson 等人在 2014 年针对药物推荐系统的研究工 作却发现可以通过基于机器学习模型和病人的人口属性统计信息逆向推理得到病患的遗传资料 [66]. Fredrikson 等 人在 2015 年的研究工作中介绍了如何给定模型的输出结果去推断模型的输入数据 [67]. 他们利用系统提供的查询 接口进行大量的查询, 根据查询的输入和返回的输出构建了一个无限逼近原始模型的新模型, 最后基于新模型逆 向恢复原始模型的训练数据. 除医学行业以外, 数据的隐私性对于汽车行业也是非常重要的. 未来自动驾驶汽车市场化后, 汽车行业将不仅 成为数据的消费者, 还将成为数据的主要生产者. 据 Google 公司统计, 在其自动驾驶汽车实验中, 平均一辆汽车每 秒产生了超过 1 GB 的数据. 如此庞大的数据涉及到汽车使用者非常详细的个人隐私信息, 这些数据对于汽车制 造商、移动运营商、保险公司、酒店和其他希望与自动驾驶汽车或汽车使用者打交道的服务和产品提供者来说, 具有巨大的价值. 1.3.4 常见质量保障方法 目前人工智能软件系统数据隐私性的质量保障有以下几种常见方法. (1) 对数据进行匿名化处理 这类方法主要用于一些涉及微数据的应用程序 (包括医学数据保护方面), 大多基于系统全局记录、本地记录 和群集的匿名化方式使得系统中的数据记录无法相互区分来达到隐私保护的目的. Sweeney 等人提出了一种名为 k-anonymity 的隐私保护模型 [68], 这种模型可以使得数据的持有者在保证数据仍然可用的前提下, 在发布其私有数 据时他人无法从中得到敏感的个人信息. 匿名化方法的缺点在于匿名数据分析的工作量非常大, 因而这种方法无 法总是实现有效的数据匿名, 并且现有的大部分方法未充分地考虑数据属性的实用性. 目前也有研究人员在进行 数据匿名化方法的改进研究, 例如 Gao 等人基于多维匿名化的概念, 提出了一种基于属性顺序敏感的实用性匿名 化方法 [69]. (2) 防