使用 MATLAB 和 Simulink 进行 AI 验证和确认

验证和确认工作流:W 形开发过程

AI 技术正在革新各行各业并改变我们的工作和生活方式。随着 AI 系统集成到安全关键行业,如航空航天、汽车和医疗(图 1),它们正在作出直接影响人类安全和福祉的决策。这催生了对严格验证和确认过程日益增长的需求,用以解释、验证和确认模型行为。

每个行业的代表符号:汽车行业为停车标志,航空航天行业为飞机,医疗行业为胸部 X 光片。

图 1. 图像分类网络应用于汽车、航空航天和医疗行业。

在 AI 认证中,验证和确认 (V&V) 方法通过证明 AI 模型与 AI 驱动系统遵守行业标准及法规来帮助识别和缓解风险。

传统的验证和确认工作流,如 V 周期,可能不足以确保 AI 模型的准确度和可靠性。为了更好地适应 AI 应用,这些工作流程也出现了相应的调整,例如 W 形开发流程(图 2)。

AI/机器学习系统开发的 V 模型调整,显示从需求到验证的各个阶段。

图 2. W 形开发过程。基于欧盟航空安全局 (EASA) 发布的原始图。(图片所有权:EASA)

以下各节将指导您完成 W 形开发过程的验证和确认步骤。要详细了解此过程,请参考以下资源。

实现 W 形过程:医疗案例研究

为了演示此过程的实际案例,本白皮书将引导您完成一个医疗 AI 系统的开发,该系统旨在通过检查胸部 X 光图像来识别患者是否患有肺炎。以下案例研究重点展示 AI 在安全关键型应用中的优势和面临的挑战,说明为什么图像分类模型必须既准确又稳健以防止有害误诊。

从需求到稳健建模

W 形开发过程的前半部分有助于确保 AI 模型满足必要的标准并在真实应用中可靠地执行。

分配给机器学习组件的需求管理

W 周期的第一步是收集特定于机器学习组件的需求。关键考虑事项包括模型的实现、测试和可解释性。Requirements Toolbox™ 可助力需求编写、链接和验证(图 3)。

需求编辑器,显示机器学习模型的测试精度需求。

图 3. 需求编辑器捕获机器学习组件的需求。

数据管理

W 周期的下一步是数据管理,这对于有监督学习至关重要,因为它需要标注数据。MATLAB® 提供标注 App,如图像标注器和信号标注器,用于交互式和自动化标注。通过使用 imageDatastore(它对图像文件进行结构化以实现可扩展性),您可以管理大型图像数据集,例如用于肺炎检测训练的图像数据管理:

trainingDataFolder = "pneumoniamnist\Train";

imdsTrain = imageDatastore(trainingDataFolder,IncludeSubfolders=true,LabelSource="foldernames");

countEachLabel(imdsTrain)

学习过程管理

在训练之前,必须最终确定网络架构和训练选项,包括算法、损失函数和超参数。深度网络设计器支持交互式设计和网络可视化。以下代码定义用于图像分类的卷积神经网络 (CNN) 架构:

numClasses = numel(classNames);
layers = [
 imageInputLayer(imageSize,Normalization="none")
 convolution2dLayer(7,64,Padding=0)
 batchNormalizationLayer()
 reluLayer()
 dropoutLayer(0.5)
 averagePooling2dLayer(2,Stride=2)
 convolution2dLayer(7,128,Padding=0)
 batchNormalizationLayer()
 reluLayer()
 dropoutLayer(0.5)
 averagePooling2dLayer(2,Stride=2)
 fullyConnectedLayer(numClasses)
 softmaxLayer];

找到最佳超参数可能很复杂,但试验管理器可以通过扫描或贝叶斯优化探索不同值来提供帮助(图 4)。多个训练配置可以并行测试,从而利用可用硬件来简化该过程。

试验管理器中超参数扫描设置和 CNN 层配置的截图。

图 4. 在试验管理器中设置问题以在深度网络设计器中从导出的架构中找到最佳超参数集。

模型训练和初始验证

训练阶段以在试验管理器中运行试验为开端,产生了具有良好准确度(在验证集上约为 96%)的初始模型。然而,它并未完全满足所有预定义需求,例如稳健性。由于 W 周期是迭代式的,需要进一步改进。

试验管理器截图:显示 CNN 超参数结果和肺炎检测的混淆矩阵。

图 5. 使用试验管理器找到初始模型。

学习过程验证

确保 AI 模型满足指定需求很重要,尤其是在安全关键型应用中。W 形开发过程的后续步骤涉及实现验证方法以确认模型性能符合期望。

测试和了解模型性能

模型是使用快速梯度符号方法 (FGSM) 对抗训练进行训练的,以便增强在对抗样本下的稳健性。它实现了高于 90% 的准确度,超过了预定义需求和基准。为了更好地理解其性能,我们使用了混淆矩阵来分析错误模式;与此同时,像 Grad-CAM (图 6) 这样的可解释性技术提供了视觉深入信息,从而提高了可解释性及其决策的可信度。

Grad-CAM 热图突出显示胸部 X 光中预测的肺炎相关区域。

图 6. 使用梯度加权类激活映射 (Grad-CAM) 理解网络预测。

对抗样本

对抗样本是指对输入进行的微小且难以察觉的改动,但这些改动却可能导致神经网络做出错误分类。这引发了人们对于 AI 在安全关键任务(例如医学成像)中稳健性的担忧(图 7)。

在添加细微对抗噪声后,肺炎患者的肺部原始 X 光图像被误分类为正常。

图 7. 对抗样本:输入扰动对图像分类的影响。

L-无穷范数

L-无穷范数用于理解和量化对抗扰动(图 8)。它定义像素值可以更改的范围。这会导致无数可能组合需要测试,使得评估所有方案很难。

X 光的放大视图,用矩阵显示神经网络中像素扰动的阶段。

图 8. L-无穷范数:可能的输入扰动的示例。

稳健性的形式化验证

形式化验证方法提供一种数学方法,该方法能够系统化地评估和确保神经网络针对广泛潜在对抗样本的稳健性。Deep Learning Toolbox™ Verification Library 提供形式化验证方法,如抽象解释。给定测试集中的一个图像,您可以选择扰动,为特定图像定义一个大型扰动图像集合(图 9)。

工作流显示 X 光图像输入、扰动集、模型和输出标签:已验证、未证明或违反。

图 9. 使用抽象解释的形式化验证。

对于每个图像,有三种潜在结果:

  • 已验证 - 输出标签保持一致。
  • 违反 - 输出标签更改。
  • 未证明 - 需要进一步验证工作或模型改进。

分布外检测

可信赖的 AI 系统应在已知上下文中产生准确预测。此外,它还应能够识别模型未知的示例并拒绝它们,或将其推迟给人类专家进行安全处理。使用 Deep Learning Toolbox Verification Library,您可以创建一个分布外 (OOD) 数据判别器,通过为每个观测值计算分布置信度分数来为网络预测分配置信度(图 10)。判别器还提供阈值,用于将分布内数据与 OOD 数据分离。

直方图:显示训练数据和各种扰动的置信度分数分布。

图 10. 原始和派生数据集的置信度分数分布。

从模型实现到需求验证

一旦学习过程经过验证,重点就转向调整 AI 模型用于真实应用。W 形开发过程的这些最后步骤涉及准备模型用于部署并确保其满足运营需求。

模型实现和代码生成

在 W 形开发工作流中,从学习过程验证到模型实现的转换发生在 AI 模型从细化转向真实应用时。使用 MATLAB 和 Simulink® 的代码生成会自动将训练模型转换为可部署代码(例如,C/C++ 或 CUDA®;请参考图 11),从而减少手动编码工作并尽量减少错误。

从 MATLAB 模型到 CPU、GPU、微控制器和 FPGA 目标的代码生成图。

图 11. MATLAB 和 Simulink 代码生成工具。

您可以使用 MATLAB 中的 analyzeNetworkForCodegen 函数来验证您的深度学习模型是否已准备好进行代码生成。这可以确保与目标库的兼容性,并且对于安全关键型应用,它支持您生成不依赖第三方的代码。自动代码生成可简化认证,提高可移植性,并实现跨多种平台的可靠部署。

analyzeNetworkForCodegen(net)

 Supported
 _________
 none "Yes"
 arm-compute "Yes"
 mkldnn "Yes"
 cudnn "Yes"
 tensorrt "Yes"

当部署需要优化内存、定点算术或计算效率时,Deep Learning Toolbox Model Quantization Library 非常有效。量化和剪枝等方法可以显著减小模型大小和计算负载。例如,当使用深度网络量化器将浮点转换为 int8 时,可将模型压缩 4 倍而准确度仅下降 0.7%(图 12)。

深度网络量化器截图:显示神经网络的动态范围统计和验证结果。

图 12. 使用深度网络量化器量化深度神经网络。

使用 MATLAB Coder™ 和 GPU Coder™,您可以生成 C++ 和 CUDA 代码以在速度和低延迟至关重要的实时系统上部署 AI 模型。这涉及配置目标语言和深度学习设置,例如使用 cuDNN 进行 GPU 加速。

cfg = coder.gpuConfig("mex"); 

cfg.TargetLang = "C++"; 

cfg.GpuConfig.ComputeCapability = "6.1"; 

cfg.DeepLearningConfig = coder.DeepLearningConfig("cudnn"); 

cfg.DeepLearningConfig.AutoTuning = true; 

cfg.DeepLearningConfig.CalibrationResultFile = "quantObj.mat"; 

cfg.DeepLearningConfig.DataType = "int8"; 

input = ones(inputSize,"int8"); 

codegen -config cfg -args input predictCodegen -report

推断模型验证和集成

推断模型验证和集成阶段可确保 AI 模型(例如用于肺炎检测的模型)在未见过的新数据上可靠执行并良好地集成到更大的医疗系统中。

在将模型转换为 C++ 和 CUDA 后,此阶段验证其准确度并将其嵌入综合系统中,与运行时监控、数据采集和可视化组件一起工作。通过在 Simulink 中仿真系统,您可以验证模型实时有效运行并在更广泛的系统中保持性能(图 13)。

AI 模型图:使用运行时监控和可视化进行信任评估。

图 13. 集成深度学习模型的 Simulink 框架。

运行时监控可以帮助区分熟悉和不熟悉的输入(图 14)。当数据与训练分布匹配时,它以绿色表示可信预测;对于 OOD 情形,它以红色标记潜在异常。此功能可以确保它不仅作出准确预测,而且能够识别并适当处理不熟悉的数据,从而增强 AI 系统的安全性和可靠性。

两个 X 光片图像显示正确和不正确的肺炎预测及置信度分数。

图 14. 运行时监控子系统输出的示例。

在此阶段,实现全面测试策略至关重要。使用 MATLAB Test™ 或 Simulink Test™,您可以创建自动化测试以彻底验证 AI 模型的准确度、性能和在整体系统内的集成。

独立数据和学习验证

独立数据和学习验证阶段可确保训练、验证和测试数据集得到适当管理、完整并代表应用的输入空间。它涉及在目标平台上验证推断模型后的独立评审。此阶段还确认学习验证(包括覆盖率分析)已圆满完成。

需求验证

需求验证阶段可确保所有需求完全实现和经过测试,从而结束 W 形开发过程。使用 Requirements Toolbox™,将函数和测试链接到其对应需求,从而完成开发闭环。从需求编辑器运行这些测试可验证所有需求都已成功满足(图 15)。

图 15. 从需求编辑器内部运行测试。

开发过程总结

在需求验证后,W 形开发过程即宣告完成。在这个医疗设备示例中,此过程涉及的彻底、细致步骤能够确保用于肺炎检测的 AI 模型准确、稳健并准备好进行部署。通过将需求链接到特定函数和测试,您将建立清晰的可追溯性并系统化地验证每项需求,确认模型满足医疗应用的严格标准。现在,可以部署可靠工具以支持改进的患者护理。