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