引言
浅析机器学习如何保证安全性
机器学习是使计算机能够通过使用数据而不是通过人类可理解的规则编程,来完成学习任务。机器学习已在许多领域得到广泛应用,主要归因于更强大的GPU实现和大量可用数据。因为其强大的性能提升,自动驾驶也依靠机器学习解决感知和运动规划方面的挑战性任务。
对于传统的基于模型的系统开发已建立的安全工程流程和实践,但对机器学习目前没有专有评估方法。同时机器学习的引入,也带来了很多安全性问题。
Note:机器学习是一类实现人工智能的方法总称(也可说是学科)。神经网络是一种模型,模型只是实现机器学习的要素之一。可以参考下图。
➡本文(约4500字,13钟阅读)
ML(machine learning) 开发过程中常见的问题包括:
- ML 模型的设计规范通常是不够的,因为模型学习数据中的模式以区分或生成新的未知输入的分布,同时也无法仅通过查验源代码来评估ML的安全性;
- 训练数据集不完整或训练参数验证不足(例如,真实世界的数据受到各种环境干扰,与理想的训练数据可能不一致);
- 训练数据集选择影响ML的性能(例如,训练数据中的偏差可能导致错误学习的相关性);
- 测试数据集选择可能影响准确评估ML性能,也就是训练数据与测试数据偏差过大会出现泛化错误(例如,不当测试数据分区可能导致过高/过低估计);
- 深度神经网络的学习过程不透明,无法提供很好的可解释性,且无法人为控制(例如错误学习的相关性);
- 测试验证的充分性难以保证,对传统算法可以根据安全完整性级别,通过分支覆盖或修改条件与决定覆盖来确认单元测试的充分性,而对于DNN来说,验证其正确性是一项挑战;
- 违反直觉的预测(例如对抗性攻击,属于网络安全范畴)。
因此本文将结合ISO4804 ,ISO21448以及其他相关文献,给出一些解决方案参考。
数据定义
数据集代表了ODD中的场景,它是对现实世界的有限近似采样,如前所述,其选择极大地影响了ML的鲁棒性。
如下图,数据包括训练数据,验证数据,测试数据。它们有不同的用途。需要避免数据集之间的信息泄漏,尤其是在训练数据集和测试数据集之间,其中测试数据集主要用于评估ML模型安全性与鲁棒性。训练和验证集则用于ML模型的训练过程。ML的训练过程是就是调整超参数的循环,训练数据连续输入到模型中,同时根据输出误差的梯度调整其参数_(例如神经网络权重)_,直到达到预定的Pass/Fail 标准,例如目标检测或分类中可接受的误报率和漏报率。
图1:离线ML训练流程示例[2]
数据集可以来源于多方面,可以来自有规划的道路采样,车队试验,第三方等,也可以通过数据泛化和人工合成。
在数据集选择方面需要注意以下几点:
- 数据集的分布是否包括训练,测试,验证,是否保证充分的独立性;
- 数据集的类型及属性是否合理,充分;
- 需要论证数据集的充分性,是否涵盖ODD 场景的等价类,corner case的数量,是否包括干扰场景,是否涵盖在生命周期内产品特性的变化_(如传感器老化)_等;
- 需要建立数据相关的开发流程,并与产品开发流程相匹配;
- 随着新的功能需求,数据也需要持续迭代。
数据标注
数据标注过程主要目的是确保充分定义标签特征,并能有效地与目标任务相关。如果数据标注过程出现问题,会影响DNN识别算法的安全性。
标注过程中有很多难点:类型难以分离,比如小孩和成年人,商业车辆和卡车;类型太稀疏,比如动态目标物;标注数据量大,自动化标注可能出现差错等。
常见标注错误有[1]:
- 对象分类不正确;
- 被人类注释器忽略的对象;
- 边界框定位错误;
- 尺寸或姿势错误的边界框;
- 由于部分遮挡而拆分边界框。
因此在标注过程中需要对以上的问题制定详细解决方案,如自动化标注算法的选择,人工标注过程中human error的流程检查等等。
DNN的外部架构设计
DNN是一个很广的概念,CNN_(卷积神经网络)_、RNN_(递归神经网络)_等都属于其范畴之内。CNN多用于网络结构数据类型的任务,如图像;RNN多用于时间序列类型的任务,如音频、文本_(NLP)_等。
DNN神经网络的组成:
- 输入层:神经网络的第一层,原始的样本数据
- 隐藏层:除了输入层,输出层,中间的都是隐藏层
- 输出层:神经网络的最后一层,最终的计算结果
我们也可以通过改进 DNN的架构设计来减少DNN的非期望表现带来的风险。如下是ISO4804推荐的一些架构层面的安全解决方案。
图2:DNNs的架构设计[2]
1. Observer:监控模块可通过观察器_(observer)_测量DNN的内部状态和/或监控DNN的输出进行合理性推断。
2. Uncertainty concepts:不确定性包括任意不确定性与认知不确定性。前者来自真实世界的不确定性,可以在定义功能时考虑;认知不确定性来自DNN内部推算的不确定性,可以通过增加数据集训练,也可以通过在线不确定性推断来解决。
如图是,贝叶斯深度学习用于语义分割。通常,深度学习模型进行预测_(b)_,而不考虑不确定性_(c)_。此方法建议估计每个层的不确定性_(c)_,以向后沿着贝叶斯 pipeline 传递。_(b)_显示了语义分段,其中目标类别是单独着色的。_(c)_显示不确定性,其中深蓝以外的颜色表示像素更不确定。模型在分类边界、距离更远和陌生的对象方面有更低的置信度。
3. Redundancy:增加与DNN本身并行工作的冗余软件组件,用于监督DNN在安全方面的行为。可以通过以下方法:
1) 合理性校验:检查模型输出一致性的合理性检查方法_(例如,检查目标对象的不合理位置、大小、动态特性)_;
2) 检查输入或其特征在统计上与训练数据集接近,现在有研究可以通过神经网络识别 out of distribution(_与训练数据分布不一致)_的数据,来进行筛查;
图4:基于预测置信度的分布外样本检测[4]
如图,研究者使用监督学习_(使用标记的 in-distribution 训练样本)_和自监督学习_(使用未标记 Out of distribution,OOD自然样本)_两个步骤训练神经网络最后一层中的拒绝函数_(reject function)_,来对分布外的样本进行识别。评估结果表明,所提出的OOD特征自监督学习可以很好地推广到拒绝其他不可预知的分布。
3) 通过显著图检查DNN对输入区域的敏感性,并对神经网络 failure 进行预测;
图5:基于显著性图的模型故障预测模型[4]
如图,采用了 main model 中显著图与 steering error 作为 failure predictor 模型的输入,来训练失效预测模型,以提高main model的故障预测性能。
其他方法还有[1]:
1.采用冗余的多个DNN模型推论生成聚合结果,还可以应用基于规则的简单算法来执行基本安全功能,如下图使用几个expert的输出进行对比校验,在通过门控制最终输出DNN预测结果;
图6:混合专家聚合结构[5]
2.对异常神经元行为或异常输入数据检测_(例如合理性检查)_,可识别潜在的故障情况;
3.可以使用热力图_(heat map)_等机制来控制关键输入对模型输出的影响;
4.设计安全边界概念,典型的例子是定义DNN输出结果的安全和不安全区域。系统通常在安全区域内运行,一旦DNN的输出结果超出安全边界,则输出将被抑制。
此外,总体基于DNN的软件架构还可能包括输入数据预处理步骤,如重定尺寸、重采样等。同样,也需要后处理步骤,以确保DNN输出与后续组件的接口兼容。
DNN的内部架构设计
DNN 本身的架构定义对安全输出也有较大影响。架构_(architecture)_中DNN layers的组合与类型是根据用例和规范来配置。
在DNN架构方面,需要考虑因素可能包括[1]
- 输入和输出_(数据类型和维度)_以及关于模型大小和类型配置;
- 由于激活函数在函数加速收敛起着重要作用,因此需慎重选择激活函数;
- layer的具体类型:池化类型、上采样类型,卷积层超参数等;
- 正则项_(避免模型过度拟合)_:批标准化,dropout;
- 更新参数:求解器,学习速率_(影响模型收敛速度)_,batch size_(影响模型泛化性能)_;
图7:用于回归学习的神经网络的结构实例 [6]
此外,损失函数的选择和正则化可能会对生成的网络的鲁棒性产生重大影响。它基本概念是:以交叉熵、均方差等方法来测量模型输出和标记真值之间的差异,在对训练数据集样本进行误差平均后,通过针对DNN模型的相应梯度_(例如随机梯度下降)_的反向传播来改变模型参数,以最小化训练损失。一个可行的方案是在损失函数中增加表示可测量安全要求的附加指标来训练网络,通过观测安全指标是否达到,而非损失函数本身来达到最终训练结束的标准。
实施阶段
DNN实际运用中会使用迁移学习,它将从一个DNN学到的知识传递给另一个DNN,以完成不同的任务。迁移学习通常用于加快学习过程,但可能会对功能安全产生负面影响。因此需要记录任何类型的迁移学习的使用,且迁移学习训练的DNN需经过反复验证、测试和再培训,来发现失效案例。
另一方面,DNN的优化也值得注意。DNN在训练后为达到实时性和内存占用要求,需要进行优化。DNN 优化是一个迭代过程,通常采用如:量化DNN 参数和计算以减少参数带宽,从DNN模型中删除不太重要的参数,采用特定硬件的计算加速等。具体优化方法的选择会极大地影响结果模型的鲁棒性。因此,需要跟踪安全相关关键KPI的实现。
在相关KPI评估的过程中,以及考虑其与安全需求的关联时,通常包括以下措施[1]:
- 基于模型输出或内部状态_(如输出方差、神经元激活模式)_的计算;
- 模型输出与带有标签的其他数据、不同模型输出的比较;
- 修改输入或输出数据流_(例如,添加噪声)_;
- 内部网络结构的修改_(例如,dropout)_;
- 通过网络反向传播信息_(例如梯度、反向激活)_;
- 使用额外的软件或知识源_(例如,数据集中的先验知识、额外的成本函数)。_
部署和监控阶段
由于无法在设计阶段充分考虑所有动态变化场景,因此售后市场监控是很有必要。尤其当ODD的场景数据分布与训练集的数据分布偏移,出现新的目标物/规则等情况时,需要增加额外的训练数据集。此外,也需要持续监控KPI测试结果,持续发现corner case。在发现问题后,可以开发新的安全机制或改进现有的安全机制,更新数据集特征来重新迭代DNN算法架构。
小结
本文首先介绍了机器学习在自动驾驶应用中存在的挑战,然后从数据定义,数据标注,DNN算法架构,DNN算法内部架构,实施阶段和部署与监控阶段几方面介绍各阶段可能发生的失效类型以及应对的安全措施,其中展示了目前对DNN算法安全架构的一些研究现状。笔者也是初识预期功能安全和机器学习,有疏漏之处,还请各位专家包涵。
作者:小南郭
文章来源:sasetech
推荐阅读
更多物联网安全,PSA等技术干货请关注平台安全架构(PSA)专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入PSA技术交流群,请备注研究方向。