AI测试 AI 算法项目的测试探索 -- 深圳线下沙龙第六期

凌晨两点半 · 2018年05月14日 · 最后由 孙志强 回复于 2023年11月09日 · 7752 次阅读

开场白

大家好,我叫 ,目前主要负责推荐系统和机器学习相关的项目的质量保证,今天分享的主题是 AI 算法项目的测试探索。
首先介绍人工智能的一些基本概念,接着说明人工智能和机器学习的关系,然后再叙述机器学习相关的基本概念,包括监督学习,无监督学习,会重点说监督学习。再介绍机器学习算法项目的测试。最后会介绍算法项目测试的学习入门。

人工智能

近些年,人工智能受到了极大的关注,其主要还归功于深度学习的兴起,极大地推动了智能机器人、计算机视觉、自然语言处理等领域的发展。
有一次我问 5 岁的侄女 “你知道人工智能吗”,她回答:“人工智能好吃吗?” 从小就是一个吃货,人工智能不能吃,那它能做什么,会怎么影响我们的生活呢?
大家看这是人工智能定义。人工智能的 “智能” 就是让机器可以像人类一样智能。
和人类一样思考,人类一样听懂明白语义的意思,可以看懂图片或视频中的事物,人类一样动起来。

一个优秀的人工智能系统,应该具有三个方面的特征:知识运用的能力、从数据或经验中学习的能力、处理不确定性的能力。

知识运用能力:

知识是智能体现的一个最重要的维度。听说看能力如果不考虑内容的深度,则仅仅是停留在感知智能的层面,只能与环境交互和获取环境的信息,其智能表现的空间非常有限。一个智能系统应该能够很好的存储与表示、运用知识,并基于知识进行归纳推理。

学习能力:

从数据中或过去的经验中学习的能力,这通常需要运用机器学习算法。具备一个不断进化和进步的学习能力,那么就可能具备更高的智能水平。同时,学习过程应该能够融入尽可能多的知识类信息,才能够达到支持智能系统的要求。

不确定性处理能力:

能够很好地处理数据中不确定性,像噪声、数据属性缺失,模型决策的不确定性,甚至模型内部参数的不确定性。无人驾驶系统就需要处理各种各样的不确定性如环境的不确定性、决策的不确定性。
目前,绝大多数人工智能的系统,还都或多或少地缺少这些特质。

人工智能的应用目前有很多,像图中这些
这里简单介绍三个人工智能的主要应用领域:
智能机器人
传统机械领域与人工智能的结合产生了机械智能。这些机器人产品体现了各种人工智能技术的综合运用。随着未来人工智能及相关技术的逐步完善和成熟,服务机器人必将走进千家万户,人与机器人和谐并存的社会虽然还需时日,但可以期待。

智能驾驶
谷歌、特斯拉、百度等公司都在无人驾驶上进行了布局和投入。无人驾驶是典型的人工智能技术的综合运用,需要处理复杂的目标识别、环境感知与建模、规划与控制、综合决策等问题,对于智能系统的鲁棒性、不确定性决策、安全性提出了更高的要求。

个性推荐:
比如亚马逊的商品推荐,今日头条的内容推荐算法。
人工智能已经正在改变一些行业。

人工智能和机器学习的关系

机器学习是人工智能研究与应用的一个分支。
人工智能涵盖的领域很广,除了机器学习外,还包括专家系统、多代理、进化计算、模糊逻辑和粗糙集、机器学习、知识表示、推荐系统等。人工智能的发展也主要得益于机器学习领域的推动,尤其是深度学习取得的突破,其他领域的进展相对较小。人工智能分为弱人工智能和强人工智能,前者让机器具备观察和感知的能力,可以做到一定程度的理解和推理。目前的科研都集中在弱人工智能这部分。而强人工智能期待让机器获得自适应能力,解决一些之前没有遇到过的问题。电影里的人工智能多半都是在描绘强人工智能,比如星球大战中的机器人,而这部分在目前的现实世界里难以真正实现。

机器学习

人脑具备不断积累经验的能力,依赖经验我们便具备了分析处理的能力,比如我们要去菜场挑一个西瓜,别人或者自己的经验告诉我们色泽青绿、根蒂蜷缩、敲声浑响的西瓜比较好吃。我们具备这样的能力,那么机器呢?机器不是只接收指令,处理指令吗?和人脑类似,可以喂给机器历史数据,机器依赖建模算法生成模型,根据模型便可以处理新的数据得到未知属性。许多机器学习系统所解决的都是无法直接使用固定规则或者流程代码完成的问题,通常这类问题对人类而言却很简单。比如,手机中的计算器程序就不属于具备智能的系统,因为里面的计算方法都有清楚而固定的规程;但是如果要求一台机器去辨别一张照片中都有哪些人或者物体,这对我们人类来讲非常容易,然后机器却非常难做到。
机器学习所研究的主要内容,是关于在计算机上从数据中产生 “模型” 的算法。即学习算法,有了学习算法,我们把数据提供给它,它就能基于这些数据产生模型;在面对新的数据时,模型会给我们提供相应的预测结果。

机器学习的按学习方式来可以划分四类: 监督学习、无监督学习、半监督学习和强化学习。
监督学习指的就是我们给学习算法一个数据集。这个数据集由 “正确答案” 组成。
关注的是对事物未知表现的预测,一般包括分类问题和回归问题。
无监督学习,指在数据集中没有 “正确答案”,期望从数据本身发现一些潜在的规律,无监督学习倾向于事物本身特性的分析,常用的技术包括数据降维和聚类问题。
训练数据集中有一部分答案,一部分没答案的称为半监督学习。
强化学习相对来说比较复杂,是指一个系统和外界环境不断地交互,获得外界反馈,然后决定自身的行为,达到长期目标的最优化。也就是从一开始什么都不懂, 通过不断地尝试, 从错误中学习, 最后找到规律, 学会了达到目的的方法。比如 AlphaGo 用的深度强化学习。
重点讲下监督学习:
如图中不同形状的几何图形,给它们分别打上正确的标记。通过算法训练后,达到正确分类的目的。要进行机器学习,首先要有数据。有了数据之后,再对数据进行标注。
那实际项目中是怎么给数据打标注,为什么要给数据标注?带着这两个问题我们来看个视频。
数据标注师 - [数据标注师](https://www.thepaper.cn/newsDetail_forward_2052136)
看完视频,相信大家对数据标注有更清晰的了解。
这位老师也讲了他所理解的人工智能:利用人工标注的数据给到机器进行学习,使机器智能化。人工智能中的 “人工” 也就是这么个意思。
为什么要花时间和人力成本去做数据标注,不是还有不需要标注数据的无监督学习吗?
监督学习的效果一般更好。
标签代表了 “先验证知识”,并给定了模型能力的 “下界”。

机器学习中监督学习模型的任务重点在于,根据已有经验知识对未知样本的目标进行预测,根据目标预测变量的类型不同,我们把监督学习任务大体分为 “分类” 和 “回归”
分类问题是最为常见的监督学习问题,最基础的就是二分类问题,如图中的动物分类为兔子还是牛。
右边的图为多分类问题。

回归问题,预测的目标是连续变量,比如预测房价、预测明天的天气温度
如图中给出一些面积、位置,房间数作为预测值,来预测一辆房屋的价格。要训练这个系统,需要给出大量房屋样本,包括它们的预测值和标签,也就是它们的价格。通过算法训练,当有未知房屋数据时可以通过回归器就预测出它的价格。

什么是模型?
大家来做下这个猜数字游戏,1, 4, 16…()… 256… 括号里的是什么。为什么是 64,不是其他数字,又为什么是数字,不是一个汉字或者一个字母。我们找到了数字之间的规律,逻辑关系,并且抽象成了模型,我们才能知道括号里是什么。
举个生活中的例子,小米硬件中手机外壳,在大批量生产前需要先设计手机外壳的模具,然后所有同型号的手机外壳都按这个模具样版生产出来。这个模具也是个硬件上的模型。
算法的模型又是什么?模型是从数据里抽象出来的,用来描述客观世界的数学模型。通过对数据的分析,找到其中的规律,找到的规律就是模型。
机器学习的根本目的,是找一个模型去描述我们已经观测到的数据。

生成模型之后,可以以文件形式保存在磁盘上或者加载到内存中。达到模型的持久化。

机器学习项目的测试

模型评估

如何评估模型,可以通过泛化能力。泛化能力指的是学习方法对未知数据的预测能力。就好比运动员平时都是在训练场进行训练,而评估运动员的真实实力要看在大赛中的表现。
我们实际希望的,是在新样本上能表现得很好的学习器,为了达到这个目的,应该从训练样本中尽可能推演出适用于所有潜在样本的 “普通规律”,这样才能在遇到新样本时做出正确的预测,泛化能力比较好。
当学习器把训练样本学得 “太好” 了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为 “过拟合 “,与之相对是 “欠拟合” 指的是对训练样本的一般性质尚未学习。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。

如何看泛化能力的好坏呢? 通过泛化误差。
先解释下各种名词
从数据中分析得到模型的过程称为 “训练”,用于 “训练” 的数据称为 “训练数据”。其中每个样本称为一个 “训练样本”,训练样本组成的集合称为 “训练集”,测试样本组成的集合称为 “测试集”。
模型在训练集上的误差通常称为 “训练误差” 或 “经验误差”,在测试集上的误差通常称为 “测试误差”。而在新样本上的误差称为 “泛化误差”
机器学习的目的是得到泛化误差小的学习器。然而,在实际应用中,新样本是未知的,所以
以测试集上的 “测试误差” 作为泛化误差的近似。使用一个 “测试集” 来测试学习器对新样本的判别能力。需要注意的是,测试样本尽量不在训练集中出现、未在训练过程中使用过。

性能度量(performance measure)是衡量模型的泛化能力的评价标准。
1,准确率(accuracy)
2,精确率(precision)==查准率、召回率( recall)==查全率,F1 值  ,ROC 与 AUC      ---分类算法评价指标
F1 值 是精确率和召回率的调和均值
3,MSE(均方误差),RMSE(均方根误差),MAE(平均绝对误差)、R-Squared(拟合度) ----回归算法评价指标

都是评估模型好坏的指标,相互之间有一定关系,只是侧重点会不同。
准确率 (accuracy)。对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。是最常见也是最基本的评价算法性能指标。
有些场景下,只看这一个指标是不够的。比如 :
在二分类中,当正反比例不平衡的情况下,尤其是当我们对少数的分类更感兴趣的时时候,准确率评价基本就没什么参考价值。
举个例子:有个 100 条样本数据的测试集,其中 80 个正例,20 个反例。那如果模型把所有样本都预测为正例,那模型的准确率至少都是 80%。当模型遇到新样本时,它都区分不出一个反例。这种模型也就没用了。

精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
而召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
一般来说,精确率高时,召回率往偏低,而精确率低时,召回率偏高。
只有在一些简单的任务中才可能使精确率和召回率都很高。

精确率和召回率 实例介绍详见 ppt

评价指标跑出来看又怎么评判呢?
这里运行得出的准确率是 0.96,好还是不好呢,是否可以测试通过。要 1.0 准确率才测试通过吗?,看实际项目的应用场景、目前的技术水平、产品经理的需求定义。测试人员把各指标值反馈出来,在测试报告中体现出来。比如说无人驾驶,如果它的准确率是 96%,大家会不会去坐无人驾驶的汽车呢?反正我是不敢的,这是在用生命来测试算法。
我们来看下 2016 年的新闻
百度自动驾驶负责人王劲  2016 年 9 月
去年的这个时候,我们的图象识别,识别汽车这一项,刚好也是 89%。我们认为这个 89%,要达到 97% 的准确率,需要花的时间,会远远超过 5 年。而人类要实现无人驾驶,主要靠摄像头来实现安全的保障的话,我们认为要多少呢?我们认为起码这个安全性的保障,要达到 99.9999%,所以这个是一个非常非常远的一条路。我们认为不是 5 年,10 年能够达得到的。
一般的人工智能系统,如搜索、翻译等可允许犯错,而无人驾驶系统与生命相关,模型性能要求很高。

鲁棒性 (robustness)

鲁棒性也就是所说健壮性,简单来说就是在模型在一些异常数据情况下是否也可以比较好的效果。
也就是我们在最开始讲人工智能三个特征中的 处理不确定性的能力。
比如人脸识别,对于模糊的图片,人带眼镜,头发遮挡,光照不足等情况下的模型表现情况。
算法鲁棒性的要求简单来说就是 “好的时候” 要好,“坏的时候” 不能太坏。
在 AlphaGo 和李世石对决中,李世石是赢了一盘的。李世石九段下出了 “神之一手”
 Deepmind 团队透露:错误发生在第 79 手,但 AlphaGo 直到第 87 手才发觉,这期间它始终认为自己仍然领先。这里点出了一个关键问题:鲁棒性。人类犯错:水平从九段降到八段。机器犯错:水平从九段降到业余。
测试方法就是用尽可能多的异常数据来覆盖进行测试。

模型安全

攻击方法有:试探性攻击、对抗性攻击两种
在试探性攻击中,攻击者的目的通常是通过一定的方法窃取模型,或是通过某种手段恢复一部分训练机器学习模型所用的数据来推断用户的某些敏感信息。
主要分为模型窃取和训练数据窃取
对抗性攻击对数据源进行细微修改,让人感知不到,但机器学习模型接受该数据后做出错误的判断。
比如图中的雪山,原本的预测准确率为 94%,加上噪声图片后,就有 99.99% 的概率识别为了狗。
目前模型安全还是比较难的领域,像构造对抗性样本,这里就简单介绍下一下。

响应速度

响应速度是指从数据输入到模型预测输出结果的所需的时间。对算法运行时间的评价。
测试方法:
time.time() / time.clock()
time 命令
time python test.py
定义装饰器 timethis,将装饰器放在函数定义之前
这里只是简单看下模型运行所需的时间。并没有涉及大数据集群,分布式下的算法性能。

业务测试

包括业务逻辑测试,业务 & 数据正确性测试。主要关注业务代码是否符合需求,逻辑是否正确,业务异常处理等情况。可以让产品经理提供业务的流程图,对整体业务流程有清晰的了解。业务测试大家肯定都非常熟悉了,都是相通的,这里不花时间介绍啦。

白盒测试

白盒测试方法有很多,这里以只说下代码静态检查。
先让算法工程师将代码的逻辑给测试人员讲解,通过讲解理清思路。
然后测试做代码静态检查,看是否会有基本的 bug。
工具的话使用 pylint 来做代码分析。

模型监控

服务监控大家应该都知道,这里就不介绍了。只说下模型监控。
项目发布到线上后,模型在线上持续运行,需要以固定间隔检测项目模型的实时表现,可以是每隔半个月或者一个月,通过性能指标对模型进行评估。对各指标设置对应阀值,当低于阀值触发报警。如果模型随着数据的演化而性能下降,说明模型已经无法拟合当前的数据了,就需要用新数据训练得到新的模型。

机器学习算法项目的测试就介绍到这里。

算法测试学习入门

机器学习理论和实战书籍视频推荐,给有兴趣学习机器学习的同学。
pp 展示

今天的分享就到这里,希望对大家有所帮助,谢谢!

共收到 15 条回复 时间 点赞

楼主 ppt 在哪

精确率高时,召回率往偏低,而精确率高时,召回率偏低。-- 有误
顺便问下,ppt 在哪儿?

charlie 回复

已修改,PDF 版本链接:https://pan.baidu.com/s/1f4pyfw2nUd3zZgeflVgzJQ 密码:kn31

谢谢楼主好文,请问 ppt 在哪里,上面的链接失效了,谢谢

楼主,你好。
你给的这个网盘我下载下来解压缩失败,麻烦帮看一下吧。

Aaron_Yu 回复

https://pan.baidu.com/s/1NSCK06mDieO-80raa8R-ig#list/path=%2F 我这可以,直接是文件夹,没有压缩文件。你怎么会有解压呢

仅楼主可见

我想问一下,测试集的数据收集是否需要测试参与?
回退的规则是测试定的还是算法定的?
测试真正在这其中的作用?只有统计时间?性能指标是调工程的 API 接口统计?

张明慧 回复

我没搜到有专门讲 AI 测试方面的书籍

magicyang 回复

测试集的数据收集是否需要测试参与?测试可以参与,如果测试人员有时间的话。收集数据还要对数据进行标注,数据才有用。标注就不建议测试自己标注,除非像分男女就种极简单的。
回退不知道是指啥。别的问题我回答不了。😂

本身数据清理就是门科学。。。
不要光扯概念啊,这些概念找本书都有的。
关键是落地,项目实践。。。我会觉得 AI 没测试什么事,工程化打杂的事情测试可以参与一点。
所以你们不是搞沙龙么,问问到底做了哪些,对 AI 实际产出有哪些真正质量提升?

凌晨两点半 AI 算法测试之浅谈 中提及了此贴 04月03日 22:13

您好,方便留一个联系方式或者加一下我(微信 puyapeng)吗~

微信已发送加好友

对于算法测试有没有好的经验,或者有没有一些工具的推荐,线上模型监控我怎么去判断是否符合标准,只能人工抽样测试吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册