如何对人工智能系统进行测试|要点,方法及流程

当今社会,人工智能发展非常快。现在人工智能的发展已经渗透到了我们生活的方方面面,自动驾驶、或者我们手机里经常用到的一些应用都或多或少涉及到了一些人工智能的功能,比如说美图秀秀、新闻推荐、机器翻译以及个性化的购物推荐等等都涉及到了人工智能的一些技术。

在人工智能高速发展的今天,也暴露出了人工智能的一些问题。由于人工智能往往存在一些训练过程中的过拟合、欠拟合等等的一些原因,或者遇到了环境中的一些样本的偏差,使得它可能在一些情况下对输入的判断有一些偏差。

最典型的比如说2016年特斯拉的自动驾驶系统导致的车祸。在白天的时候由于光线的原因,它没有办法去识别一辆白色的大卡车,使得它以为前面没有障碍物,就撞了上去,造成了严重的车祸。



还有比如说这个在这个道路中,有一个天下一品的商标,有很多的自动驾驶看到这个商标之后,以为是一个“停止”交通信号标志,就会造成一个误判。


还有,近期人工智能系统大家都研究地比较热门的一个技术叫对抗样本技术也会对人工智能造成一个非常严重的干扰,特别是对于这种关乎性命攸关的系统,比如自动驾驶系统、医疗辅助诊断系统。我们希望在测试中能够测出这些人工智能系统存在的偏差,这也是为什么人工智能系统的测评非常地重要。

人工智能系统的测试与传统的软件测试

人工智能系统的测试和传统的软件测试之间的差异可以从两者之间程序设计上的范式去看待。

经典的程序设计是通过编程去输入一些算法规则和数据,然后再通过程序的算法去输出答案,这是经典程序设计的模式。但是对于人工智能来说不是这样,人工智能是先输入数据和答案,中间的规则是由AI系统的训练过程所得到的。

经典程序的规则是人为写进去的,人工智能系统的规则是从数据中学到的,不断有新的数据进来之后,它里面的规则也会进一步地进行改变。根据学到的规则再从你的输入的数据中得出一个结果。

人工智能系统不是通过编写明确的逻辑,而是通过数据来训练数据、训练规则。所以它的测试方法和传统软件的测试方法肯定是有所区别的。

传统软件测试我们知道了规则之后,根据这个规则去设计测试用例就可以了,但是人工智能系统很难通过设计用例的这种方式去进行测试,这也是人工智能系统测试为什么有挑战性的一个根本性的一个原因。

总结来说,由于编程模式的改变,使得人工智能的程序会有很多的特性,导致其无法用传统的方法去进行测试。首先它输出的结果具有一定的随机性。因为它是从训练数据中所训练出的一个逻辑规则,使得它输出的结果和你的输入数据是非常相关的。

比如说对于一个图像分类的例子,它的输出往往是具有统计规律的一组概率值,这个概率值是无法事先预测的。我们传统的软件测试往往是有一个先验条件的,比如说我一个确定的输入,得出一个确定的输出,我再用这样的标准去验证传统软件的正确性。这条路在人工智能系统里面很难走通。


再一个就是人工智能系统通过的准则很难去确定,我怎么判断这个人工智能系统的测试是符合我的要求的?这个是非常难以判断的。从另外一个角度说,我很难判断人工智能系统它的输出还不是正确的。这个在测试领域也有一个专门的名词叫做“test oracle”的问题。也就是说我很难确定测试的结果到底是不是对的。

下面这两幅图是医学辅助诊断领域的样例图,是皮肤上的疤痕的拍片的一个图,其中一张是真实的医院拍摄的图像,另一张是模仿医学图像去自动生成的一张新的图像,比如说我们现在要测试这样一个功能,测试我们的计算机生成的图片到底好不好,我们怎么来确定呢?我们很难通过一个量化的指标去确定,只能通过人的肉眼去做一个定性的判断。很难去判定我生成的图片是不是足够好,很难有客观的判定的准则。

接下来的一点是,我们刚才也说过,人工智能系统的规则是通过数据训练出来的,它的性能也就严重依赖于我们输入的训练数据的质量,数据的规模、数据的质量、数据的差别都会影响人工智能系统的性能。


特别是在很多时候,人工智能系统可能会表现出一个过拟合的现象,也就是说在训练阶段表现得很好的一个模型,可能在测试阶段表现并不是特别好,这样就造成我们在测试的时候,对数据的把握就非常的重要

最后一点就是人工智能系统它的输出结果,除了刚才说的不确定性之外,也是可能会随着时间进行变化的。一般来说,我们大多数企业中的人工智能系统是一个不断更新迭代的过程。先由一定的原始数据训练出一个模型出来,之后根据业务的调整,或者说随着用户数据的一些变化,一段时间之后,原来的模型准确率可能无法满足业务要求,企业往往会对模型进行一个更新的训练。这样这个系统输出的结果会随着你不断更新数据会产生变化。每次更新之后,可能会对这个系统进行一个重新的评估测试。

所以人工智能系统需要一个更高效、持续的测试方法

人工智能系统随着时间的变化,数据的演化,性能、输出结果也会发生变化,因此需要一个可持续的、可循环迭代的测试方法。能够尽快地去训练、测评、部署更新版的模型。这也是人工智能系统测试需要遵循的一个原则。

人工智能系统测试流程和方法


接下来我们一起来看一下,人工智能系统究竟应该用什么样的流程和方法去进行测试呢?首先我们一起来看一下,一个企业的人工智能产品部署和发布的一个流程,首先企业会从历史数据库中,利用数据去训练出一个初始的模型,这个初始的模型首先会进行一个offline testing,也就是说一个离线的测试。离线的测试就是针对现阶段训练出来的模型进行一些功能、性能方面的测试。

离线测试通过之后,就会把这个模型部署到线上的一个具体业务当中去。部署到线上之后,我们的数据也会进行实时的更新,随着用户访问这个人工智能系统越来越多之后,数据也会随着业务开展变得越来越多。这时候,在线上进行业务的同时,我们会对这个人工智能系统模型进行一个线上的测试,也就是online testing

线上的测试和线下的测试有什么主要的区别呢?第一个是线上测试会接触到更多的新的一些数据,有些数据可能是一些非法的,有的可能是造成一定影响的,都是有可能发生的,这个对于线下的测试来说一般是很难做到的。

第二点,线上的测试除了线下测试需要考虑的模型的一些参数之外,还可能会考虑到一些性能方面的问题。比如说用户的响应时间等。

在进行线上测试之后,我们会收集到一些新的线上用户的一些数据,这些数据一般来说都会更新到原来的数据库当中去。这样就形成了一个循环迭代的过程。也就是说,不断的用这个数据库去训练这个模型,再从新的数据中去更新这个模型,去不断地进行线下和线上的测试这样一个过程。

从这个过程中我们也可以看到,整个人工智能测试是一个循环迭代更新的一个过程,对于数据的更新也是非常重要的一环。


测试的步骤具体来说到底是怎么做的呢?我们经过大量的时间和研究总结出来了人工智能测试的生命周期。基本上它也是一个循环迭代的一个过程,需要经历测试需求的分析、测试环境的准备、数据的准备与验证、测试的执行预分析以及上线后的监控这样一个过程。
 

接下来我们详细讲一个各个环节需要注意的地方。


测试需求分析

首先从测试需求分析阶段,这个可以借鉴我们测试需求分析的一些方法,我们需要明确测试的对象、测试的范围、测试的方法和工具等。对于人工智能系统的测试来说,有两点是需要特别注意的:


1、AI系统测试通过的准则,不再仅仅是测试团队的任务,而需要算法开发人员、测试人员、系统运营人员共同参与讨论测试通过准则。


我们刚才也说过,针对人工智能的测试我们很难去确定它的测试到底怎么样才算是通过,怎么样才算是不通过,也就是所谓的“test oracle”的问题。还涉及到一个问题,测试的充分性的问题。在后面的测试技术板块我们会专门讲这两个问题。


我们如何确定测试通过的准则,需要我们的测试团队结合人工智能系统的一些应用场景,进行一些共同参与、讨论,不同的应用场景,测试通过的准则是不一样的。比如一些关乎性命攸关的系统,它测试的准则往往要求会非常的严格,而对于无关性命的系统,它的测试准则就会相应地放宽一些。

2、AI系统的行为或结果无法完全确定或预测,因此还需要开发、测试和系统运营人员共同定义可允许的风险,风险可根据技术的限制和社会共识来确定。

这个跟我们上面讲到的也是相关联的,比如说一个医疗诊断系统,允许的风险就必须要降到非常低,比如说系统的准确率必须要达到99%以上,即使有1%的差错,也有可能导致医疗事故。

但是对于一个一般的人工智能系统,与生命没有什么关系的人工智能系统,比如说识别一个人的年龄、识别花花草草,这种应用即使出错危险也不会特别大。所以一定要根据具体的业务去分析人工智能测试可能带来的风险可能会有哪些,根据这个风险我们再去设计测试通过的准则有哪些。

以上就是需求分析阶段所需要注意的问题,第二个阶段我们需要进行一个测试环境的准备。

测试环境准备


这里通常有三大因素,第一个我们需要考虑数据量、计算量、测试时间等因素。对于人工智能的一个系统来说,往往我们需要输入一些特定的测试数据,这个在接下来的一步我们会具体谈到。这个时候我们就需要考虑我们的测试环境能不能顺利地运行这些测试数据的推断和功能。

第二个是需要测试团队具备环境快速部署的能力,因为人工智能系统的部署开发往往是一个循环迭代的一个过程,这时候需要我们在构建测试环境的时候,需要能够快速地更新和部署。

由此,我们结合以前研究的一些经验,我们发觉DevOps的一些相关技术,尤其是容器技术(Docker+Kubernetes)越来越多地应用于人工智能公司当中,被用于人工智能系统测试的快速测试与部署。因为用容器的方式以及Kubernetes的方式能够快速地去部署我们AI测试所需要的环境。

数据准备


第三阶段主要数据准备阶段,测试数据准备往往是影响最终测试结果的一个重要的指标,对于测试数据集的选择也是非常有讲究的。

首先,测试人员使用的测试数据集,需要尽可能的覆盖真实环境用户产生的数据情况。比如说真实环境下用户上传图像是用手机拍摄的?还是分辨率比较高的?像这种问题肯定是需要考虑进去的。
测试数据集的验证可遵循以下原则:

测试数据与训练数据的比例要合适,这个比例应根据实际算法和应用场景确定;

这个往往发生在离线测试的情况,比如说我们训练好了一个人工智能模型之后,我们需要进行离线测试的时候,我们这个时候的测试数据可以和原来的训练数据成一定的比例关系。这个比例关系可以根据实际的算法和应用场景来确定。

测试数据与训练数据需要独立同分布;

关于同分布这一点,要看具体的需求,如果说真实环境集下和训练数据差得非常远的话,也是建议构建测试数据集的时候需要考虑一下真实环境下的比例分布。比如说正负样本的比例需要和真实的环境尽量可以保持一致。

但是我们在离线测试的时候,如果那时候还没有足够真实环境的数据的话,我们可以考虑先构建一个测试数据和训练数据分布尽量保持一致的测试数据。这样可以比较好地进行一个离线的对人工智能系统的判断。

对于监督模型,测试数据的标签需要保证正确。最后是对于监督的模型,所谓监督的模型就是说我训练的时候,我训练的数据是经过人为的标注的,就叫做可监督的学习,对于这种学习出来的模型,我们测试数据的标签也要尽量保证它的正确性。因为不这样的话,我们最后测试出来的一些结论可能也是错误的。

以上说的测试环境、测试数据都准备好了之后,我们就可以进行具体的人工智能的测试工作了。这里面又可以分为很多种测试的流程,比如说刚才说到的有模型离线的评估、系统的测试、性能的测试、可靠性的测试、A/B测试,最后我们还要针对我们的测试结果进行一定的分析。

模型的离线评估

比如说对于模型的离线评估来说,在人工智能测试中主要是用来评测AI模型对未知新数据的预测能力,即泛化能力。通常而言,泛化能力越好,模型的预测能力就越好。衡量模型泛化能力的通用评测指标包括:均方根误差RMSE、平均绝对误差MAE、准确率Precision、召回率Recall及F-measure等。

衡量泛化能力的标准有很多,通常对于不同的应用场景来说,它的指标也有可能会不同,比如说对于典型的图像分裂的场景,我们有准确率、召回率、MAE值等。对于别的场景也有可能会有别的指标,待会我们也会讲到,比如说对于目标监测的应用场景来说,也有会有其他的计算指标,像均方根误差、绝对误差等等,这个是根据具体的业务应用来定的。


系统测试

模型的离线评估之后,我们也可以进行一个系统的测试,这个时候跟传统的软件测试是有一定的重合的,比如说我们会测试系统整体的业务流程,测试模块之间 数据流动以及测试一些真实用户的使用场景。

在系统测试的过程中我们也可以包括进去一些性能测试、可靠性测试。

性能测试

性能测试我们也是可以考虑负载和压力,或者用户并发这样的一些测试。如果说这个人工智能系统用户访问量非常大的话,我们就可以进行一些性能方面的测试,因为人工智能推断的相应时间也是可以影响到我们整体的系统的相应指标。


可靠性测试

人工智能系统的可靠性包括了鲁棒性、可用性、容错性、易恢复性等指标;特别是我们需要去测试一些鲁棒性、容错性。对于无人驾驶、人脸识别等安全攸关的人工智能系统,需尽可能采用异常数据来进行测试,如对抗样本、易出错的样本等去进行一些测试。这个对于对于人工智能系统的安全和鲁棒是非常重要的。具体的测试技术我们之后会进行一个介绍。


A/B 测试

除了以上这些测试之外,我们也可以进行一个A/B测试。人工智能系统的模型往往是不断迭代更新的,我们如何确定迭代更新之前和之后这两个模型有没有提升?这时候我们就可以用A/B测试去比较两个模型、或者多个模型的差别。

当我们的模型改动之后,我们可以和前面的模型进行一个比较,看看它到底是有优化还是有衰退。来确定我们究竟是用哪一个模型来上线。

测试分析

我们通过上面的一系列的测试之后,我们需要对测试的结果进行分析,需要对AI系统各类测试的质量特性进行深入分析;在模型离线评估阶段,需要分析模型泛化能力是否满足应用的需求;在性能测试阶段,需要分析应用响应时间是否满足需求;在可靠性测试阶段,需要分析系统是否可以抵御对抗样本的攻击,及输入异常数据时系统的表现;在A/B测试阶段,则需要通过统计分析,评判新模型是否到达了预期。

以上就是人工智能系统测试整体上的流程和方法论。这里面还有几点需要我们注意:

AI模型上线后,测试人员需要以固定间隔监控模型的实时表现,根据实际业务每隔几天或几星期,对模型各类指标进行评估;

上面我们也讲到过,除了我们要进行不断迭代的测试之外,我们也需要对模型进行一些固定的时间间隔或者实时的监控。为什么呢,之前也有一些新闻讲到,有些模型如果它是根据用户新输入的一些数据去进行一个实时的训练的话,用户新输入的这些数据往往会对模型的性能造成一定的负面影响。

如果模型随着数据的演化而性能下降,说明模型在新数据下性能不佳,就需要利用新数据重新训练模型,更新模型参数;比如说用户习惯突然有了一些变化,用户输入的特征有所变化的话,以前模型的性能可能就没法满足现在的业务要求,也是要不断的监控去探测。

在一些场景中,我们还需要对用户输入数据进行监控。除了在模型监控之外,对用户输入数据进行监控也是非常重要的。特别是对实时用户新增的数据去进行训练、更新的系统来说尤为重要。

比如说2016年微软在Twitter上发布的一款聊天机器人,他说根据用户不断地聊天数据去训练数据,来进行不断地更新。这样就导致有的人输入一些脏话、或者反动的一些话语,对这个机器人进行不断的调教之后,就导致了这个聊天机器人会表达一些法西斯的思想或者脏话连篇的现象,最后不得不宣布让这个聊天机器人的模型重置。

所以说对这类系统来说,我们也要不断地去监控模型的一些实时的表现,以及用户输入数据的一些实时的表现,防止人们把模型“教坏”的情况。

后面的文章会继续为大家详细介绍人工智能系统测试相关的具体技术,欢迎继续关注。

谢绝转载,更多内容可查看我的主页,本文章整理自优品软件培育计划公益直播,可私信我获取直播回放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392574.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频监控汇聚平台LntonCVS视频监控管理平台解决方案和常见的接入方式

一、视频融合平台 LntonCVS是一款支持多种协议和设备接入的视频汇聚流媒体平台。它能够统一管理和整合不同品牌、不同协议的视频资源,构建视频数据资源池,并通过视频资源目录为各类业务场景提供丰富、实时、高清的视频资源。 二、接入方式 1. 前端设备…

视频汇聚平台EasyCVR接入移动执法记录仪,视频无法播放且报错500是什么原因?

GB28181国标视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。视频智能分析平台EasyCVR支持多协议接入,兼容多类型的设备,包括IPC、NV…

【unittest】TestSuite搭建测试用例示例二

1.1 打开串口示例 常用的模组则包含AT指令测试,或串口数据测试,则可添加串口配置,将指令通过串口发送出去,如下所示: import serial def open_serial_port(port, baudrate115200, timeout2): try: # 创建并配置串…

Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束

现在游戏基本能完了, 飞机能发射子弹,打了敌机,敌机也能炸; 接下来要做计分了; 步骤: 搞出一个lable让lable显示炸了多少飞机 开搞: ①创建一个Lable标签 ② root.ts文件 添加 property(Label) player_score: Label; // 标签属性 标签绑定 ③ 代码添加 注册 然后回调 contac…

计算机网络-数据链路层

基本概念 数据链路和链路 链路:指的是从一个节点到相邻节点的一段物理线路,且中间没有任何其他的交换节点 数据链路:传输数据时,除了一条物理线路,还需要一些必要通信协议来控制这些传输。 数据链路层的三个基本问…

【架构】客户端优化

这篇文章总结一下服务器网关及之前部分的优化,如客户端的优化,CDN/DNS等。 这里我们先谈一谈客户端缓存优化的手段。一般我们后端在说到缓存,第一时间想到的往往是redis,其实缓存在架构层次还有很多其他可以实现的地方&#xff0…

度言软件介绍

度言软件管理员操作后台 https://www.duyansoft.com企业后台为公司管理员操作后台,共计有七个功能版块 控制台 成员管理——员工管理 成员管理——员工管理(添加员工) 成员管理——团队管理 公司管理员可以新建/编辑/删除团队&#xff0c…

SSM整合快速学习

目录 步骤: 一、环境搭建 1.创建JdbcConfig配置类 2.创建JdbcConfig配置类 3.创建MybatisConfig配置类 4.创建jdbc.properties 5.创建SpringMVC配置类 6.创建Web项目入口配置类 二、功能模块开发 步骤1:创建数据库及表 步骤2:编写模型类 步骤3:编写Dao接…

Java面试题--JVM大厂篇之Java中Parallel GC的调优技巧与最佳实践

目录 引言: 正文: 1. 理解Parallel GC的工作原理 2. 常见痛点与解决方案 痛点一:长时间暂停 痛点二:频繁的Minor GC 痛点三:内存溢出 3. 调优参数推荐 4. 实战经验分享 结束语: 引言:…

定时任务-xxl-job

一. 为什么定时任务可以定时执行 定时任务可以定时执行的原理是通过操作系统提供的定时器实现的。 以下是定时任务能够准时执行的基本原理和相关技术: 操作系统的调度器: 操作系统(如Linux、Windows等)内部都有一个调度器&#x…

electron 配置、打包 -报错解决

目录 一、配置途中遇到的问题: 二、 make 配置好后开始打包 三、Electron-builder 打包报错 一、配置途中遇到的问题: 1. 安装 yarn add electron -D 一直卡在这里失败 一直卡可以使用下面这个,然后再重新装依赖 1. 采用新的镜像地址 npm …

机械学习—零基础学习日志(高数22——泰勒公式理解深化)

核心思想:函数逼近 在泰勒的年代,如果想算出e的0.001次方,这是很难计算的。那为了能计算这样的数字,可以尝试逼近的思想。 但是函数又不能所有地方都相等,那退而求其次,只要在一个极小的范围,…

Modbus-RTU详解

目录 Modbus-RTU协议 帧结构示例 CRC16校验算法 CRC16算法的过程 modbus-rtu的使用 发送数据 接收数据 tcp网口完整实现modbus-rtu协议 使用NModbus4实现modbus-rtu协议 安装NModbus4库。 串口实现NModbus4 Modbus-RTU协议 Modbus RTU 协议是一种开放的串行协议,广…

GroupMamba实战:使用GroupMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

26集 ESP32 AIchat启动代码分析-《MCU嵌入式AI开发笔记》

26集 ESP32 AIchat启动代码分析-《MCU嵌入式AI开发笔记》 这集我们分析代码如何组织起来,如何编译 先用sourceinsight把代码加进工程。 新建一个sourceinsight工程,把AI-CHAT代码加进来,之后把ESP IDF代码加进来,之后把ESP-ADF加…

大语言模型(LLM)文本预处理实战

大语言模型(LLM)文本预处理实战 文章目录 大语言模型(LLM)文本预处理实战2.1 理解词嵌入2.2 文本分词2.3 将 token 转换为 token ID2.4 添加特殊上下文 token2.5 字节对编码 (BytePair Encoding, BPE)2.6 使用滑动窗口进行数据采样…

sql注入部分总结和复现

一个端口对应一个服务 联合查询注入 所有的程序中,单双引号必须成对出现 需要从这个引号里面逃出来 在后面查询内容 ?id1 要查库名,表名,列名。但是联合查询要知道有多少列,所以通过order by 去查询 order by # 通过二分法…

Cartopy简介和安装

Cartopy 是一个开源免费的第三方 Python 扩展包,由英国气象办公室的科学家们开发,支持 Python 2.7 和 Python 3,致力于使用最简单直观的方式生成地图,并提供对 matplotlib 友好的协作接口。初学Cartopy,欢迎指正&#…

算法回忆录(3)

11. 假设有7个物品&#xff0c;它们的重量和价值如下表所示。若这些物品均不能被分割&#xff0c;且背包容量M&#xff1d;150&#xff0c;设计算法求解怎么装才能使得获取的价值最大&#xff1f;请写出伪代码。 #include <stdio.h>#define MAX_ITEMS 100 #define …

新手小白嵌入式单片机教程,ESP32

1.什么是ESP32。 ESP32是一款由乐鑫信息科技&#xff08;Espressif Systems&#xff09;推出的高度集成的低功耗系统级芯片&#xff08;SoC&#xff09;&#xff0c;它结合了双核处理器、无线通信、低功耗特性和丰富的外设&#xff0c;特别适用于各种物联网&#xff08;IoT&am…