背景技术
人工智能在汽车软件开发中发挥着越来越重要的作用,包括高级驾驶辅助系统(ADAS)和自动驾驶系统(ADS)等。同时,在汽车软件开发中,安全是一个主要问题。ISO 26262从工业实践的角度系统地处理安全问题,该标准定义了汽车的安全生命周期,以及实现各阶段安全的方法。该标准提出了软件开发的安全遵循以下的安全确保原则:通过使用适当的严格规则进行开发,将软件故障造成的潜在危险降低到可接受的水平,但该标准的设计并未考虑对ADS等技术的适用性。
虽然对神经网络等人工智能技术的理解仍有许多挑战,这些人工智能技术已经被应用于高可靠性系统中。与传统编程从规范出发不同,人工智能通过对数据样本的学习来完成建模。在汽车软件开发中,高级功能(例如ADS等)需要对环境进行感知,并应用人工智能算法。这些高级功能不具备完全的规范性描述,需要和数据样本一起完成功能建模。在考虑汽车功能安全的发展时,我们必须将对人工智能算法的安全要求纳入考虑。为此,我们提出一种基于人工智能的应用的汽车软件功能安全设计方法,对于功能安全要求是否适用于基于人工智能的软件开发进行评估,并提供基于人工智能的软件组件开发流程。
基于人工智能的软件,存有实现安全确保原则的两个关键障碍:
缺少规范
许多类型的高级功能(如自动驾驶)需要感知环境,而这些功能不能完全规范化描述。例如,识别行人的规范是什么?使用规范(例如必要和充分条件)只能部分指定这些条件,我们还需要数据样本来帮助描述功能。由于类似感知的功能很难明确规范,我们需要使用基于人工智能的方法来实现软件组件,通过从样本进行训练而不是从规范出发通过程序化编程来实现软件组件。然而,缺少规范对功能安全的保证造成了障碍。
不可解释性
各种类型的人工智能模型都包含编码形式的知识,而这些编码通常不具备很好的可解释性。神经网络模型通常是不可解释的。越来越多的人工智能模型的能力通常以牺牲可解释性为代价,但也有一些研究工作的致力于减轻这种情况。不可解释性使得手动白盒验证方法无法使用,如走查和检验,造成对功能安全保证的障碍。人工智能算法模型的可解释性与其他安全活动,如正式验证或静态分析密切相关。为此,我们需要加强对模型的了解,以更好的解释人工智能的结果。
现代人工智能算法模型
现代人工智能算法中,深度神经网络、卷积神经网络、对抗生成网络、递归神经网络等现代算法,和传统人工智能算法如感知机、支持向量机、决策树、贝叶斯网络等一起,在数据挖掘、模式识别、图像处理、自然语言处理等领域得到充分的应用。因其特点性质不同,各种人工智能算法适用于不同的应用场景。如卷积神经网络具有平移不变性,所以应用在图像处理中,可以判别图像的局部性质;递归神经网络的结构则能够更好的表达语言中的前后文内容,因此更多应用在自然语言处理中。在汽车电子软件开发过程中,明确部分规范化描述的性质有助于我们基于各种人工智能的算法特征选取模型,进而提高开发效率和安全性。
发明内容
鉴于上述人工智能算法在应用中对功能安全带来的挑战,本发明提出一种基于人工智能的应用的汽车软件功能安全设计方法,将传统的软件功能安全开发流程通过编程规范(或使用基于模型的生成代码)的程序化开发方法推广到应用了人工智能算法的软件中,以便生成一种对于基于人工智能的软件的确保功能安全的软件开发流程。
在本方法中,我们尝试对于标准中对软件安全规定的要求进行重述,为基于人工智能的软件进行解释,评估其适用的程度;在可能的情况下,为不适用的标准规定提出新的要求和建议,推荐适用方法;并确定了与基于人工智能的软件相关,但未在标准中体现的安全要求。
对于人工智能算法的应用场景,我们假设人工智能仅用于实现单个软件组件,而不用于整个子系统,即子系统是传统的,具有一个明确设计的体系结构,由彼此连接的明确定义功能的组件组成,而非应用端到端学习的软件系统(端到端学习的软件系统中,传感器输入和执行器输出之间的复杂关系建模是直接从训练样本中学习得到的)。
图1 基于人工智能的软件开发流程图
图1展示了基于人工智能的软件开发流程图。
具体来说,根据标准规定的软件设计开发阶段,我们在各阶段对于人工智能算法的应用提出相应的安全要求:
项目启动阶段,采用人工智能决策门。
确定安全要求是否可能通过程序化的方法实现以解决故障,进行评估以确定安全要求是否必须由人工智能组件执行, 或是否可以使用程序化编程组件执行。如果后一种情况成立,安全要求可完全规范化描述, 则应从规范出发使用传统编程方法实现软件功能。如果安全要求不可完全规范化描述,则将软件组件拆分为程序化编程部分和人工智能部分。在一些情况下,通过加强对软件的安全要求,可以使软件完全规范化描述,如果此时仍然能够确保软件功能的正常执行,则应加强安全要求, 使其完全规范化描述,并以程序化编程组件方法开发。
软件安全要求阶段,规范化描述安全要求
在安全要求不可完全规范化描述的情况下,定义部分规范以描述安全要求,并最大程度地对软件的每个安全要求应进行规范化描述;对不可规范化描述的部分,需提供数据集以支持软件功能的开发,对数据集提出安全要求,并对此要求做出规范化描述。
软件架构设计阶段,采用容错设计方法。
使用容错机制以确保人工智能组件的安全,以弥补因不能完全规范化描述安全要求导致的开发严谨性缺失,提供软件组件的错误检测和恢复机制。
软件开发阶段,数据采集。
收集满足规范要求的数据集,以支持人工智能组件的训练、验证和测试。
软件开发阶段,模型选取。
选择模型类型以正确实现人工智能组件的功能,并考虑模型的可解释性,优先选择支持安全要求规范的模型。
软件开发阶段,模型实现。
通过分析选取与人工智能组件输出因果相关的特征进行建模,在训练过程中确保模型满足安全要求规范描述,并评估训练过程是否充分。
软件集成阶段,验证和测试。
利用测试数据集和测试用例对软件进行验证和确认测试,通过迭代开发确保软件的功能安全。
本发明的具体实施方式参考下表,表中提出的问题有助于诊断和修复导致失效的故障。
开发阶段 | 要求内容 | 问题 |
---|---|---|
项目启动 | 人工智能决策门 | 项目启动安全要求是否可能通过程序化的方法实现以解决故障 |
软件安全要求 | 要求规范 | 部分规范: 是否有一些先前的知识可以用来解决故障?数据要求: 数据集是否有能够解决故障的增强功能,以及这种增强是如何描述的? |
架构设计 | 故障容错 | 是否存在故障容错技术可以处理失效问题? |
软件单元设计实现 | 数据集收集和验证 | 如何收集因故障而增强的数据集项?是否有可用于生成增强数据集的数据增强技术? |
模型选取 | 是否可以通过更改模型处理失效问题? | |
特征选取 | 是否可以通过更改特征处理失效问题? | |
训练 | 是否可以通过更改训练程序或学习算法来解决故障?是否可以将因失败而导致的部分规格更改纳入培训过程? | |
数据集拆分 | 是否可以通过更改数据集拆分方法处理失效问题? | |
有效性确认 | 是否可以通过更改参数处理失效问题? | |
测试与运行环境 | 是否可以通过更好地保证测试与运行环境的一致性来处理失效问题? | |
测试结果解释 | 是否可以使用提高可解释性的技术来分析失效原因? | |
验证 | 是否可以根据针对故障的部分规范更改来验证训练的模型? |
来源:freebuf.com 2019-11-14 11:46:42 by: shanghaikongan
请登录后发表评论
注册