AI算法测试之浅谈
作者:京东物流 李云敏
一、人工智能
1、人工智能(AI)是什么
人工智能,英文Artificial Intelligence,简称AI,是利用机器学习技术模拟、延伸和扩展人的智能的理论、方法、技术及应用的一门新的技术科学。
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
通俗的说,就是让机器可以像人类一样有智能,让机器看得懂、听得懂、会思考、能决策、能行动,实现原来只有人类才能完成的任务。
2、人工智能(AI)的本质
AI的本质是通过软件来实现特定的算法。
一个优秀的人工智能系统,应该具有三个方面的特征:知识运用的能力、从数据或经验中学习的能力、处理不确定性的能力。
知识运用能力
知识是智能体现的一个最重要的维度。听说看能力如果不考虑内容的深度,则仅仅是停留在感知智能的层面,只能与环境交互和获取环境的信息,其智能表现的空间非常有限。一个智能系统应该能够很好的存储与表示、运用知识,并基于知识进行归纳推理。
学习能力
从数据中或过去的经验中学习的能力,这通常需要运用机器学习算法。具备一个不断进化和进步的学习能力,那么就可能具备更高的智能水平。同时,学习过程应该能够融入尽可能多的知识类信息,才能够达到支持智能系统的要求。
不确定性处理能力
能够很好地处理数据中不确定性,像噪声、数据属性缺失,模型决策的不确定性,甚至模型内部参数的不确定性。无人驾驶系统就需要处理各种各样的不确定性如环境的不确定性、决策的不确定性。
3、人工智能(AI)的“智力”层级
人工智能分为弱人工智能和强人工智能,前者让机器具备观察和感知的能力,可以做到一定程度的理解和推理。而强人工智能期待让机器获得自适应能力,解决一些之前没有遇到过的问题。
也有人将人工智能分为弱人工智能、一般人工智能和强人工智能,后超级人工智能。
人工智能分为弱人工智能和强人工智能,前者让机器具备观察和感知的能力,可以做到一定程度的理解和推理。目前的科研都集中在弱人工智能这部分。而强人工智能期待让机器获得自适应能力,解决一些之前没有遇到过的问题。
2017年发布的一项针对AI研究人员的调查报告称,高级机器智能(HLMI)实现的总体平均估计值是到2061年。
4、人工智能(AI)的应用领域
人工智能涉及广泛的技术应用
https://img-blog.csdnimg.cn/20200424151404995.gif#pic_center
目前人工智能应用最广泛的领域主要有四个,分别是语音识别和自然语言处理、图像识别与处理、推荐系统、机器学习。
语音识别,如语音的自动翻译、语音转文字等。目前微软的语音识别技术已经达到了人类同等水平,翻译机器人已经超越专业翻译水准。
图像识别,如高速车牌识别、人脸识别等,目前已经广泛应用在道路监控、停车场、门禁、金融系统访问身份识别等领域。刷脸解锁、刷脸支付也已经进入我们生活的很多领域。
推荐系统,如电商系统根据用户的购买习惯,推荐可能需要购买的产品;今日头条的内容推荐算法等。
5G+AI开启智能化物流新时代
注:图片资料来源——《2021中国物流科技发展报告》
二、人工智能和机器学习的关系
人脑具备不断积累经验的能力,依赖经验我们便具备了分析处理的能力,比如我们要去菜场挑一个西瓜,别人或者自己的经验告诉我们色泽青绿、根蒂蜷缩、敲声浑响的西瓜比较好吃。我们具备这样的能力,那么机器呢?机器不是只接收指令,处理指令吗?和人脑类似,可以喂给机器历史数据,机器依赖建模算法生成模型,根据模型便可以处理新的数据得到未知属性。许多机器学习系统所解决的都是无法直接使用固定规则或者流程代码完成的问题,通常这类问题对人类而言却很简单。比如,手机中的计算器程序就不属于具备智能的系统,因为里面的计算方法都有清楚而固定的规程;但是如果要求一台机器去辨别一张照片中都有哪些人或者物体,这对我们人类来讲非常容易,然后机器却非常难做到。
机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”的算法。即学习算法,有了学习算法,我们把数据提供给它,它就能基于这些数据产生模型;在面对新的数据时,模型会给我们提供相应的预测结果。
机器学习的按学习方式来可以划分四类: 监督学习、无监督学习、半监督学习和强化学习。
监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。关注的是对事物未知表现的预测,一般包括分类问题和回归问题。
无监督学习,指在数据集中没有“正确答案”,期望从数据本身发现一些潜在的规律,无监督学习倾向于事物本身特性的分析,常用的技术包括数据降维和聚类问题。
半监督学习,训练数据集中有一部分答案,一部分没答案的称为半监督学习。
强化学习相对来说比较复杂,是指一个系统和外界环境不断地交互,获得外界反馈,然后决定自身的行为,达到长期目标的最优化。也就是从一开始什么都不懂, 通过不断地尝试, 从错误中学习, 最后找到规律, 学会了达到目的的方法。比如AlphaGo用的深度强化学习。
1、机器学习
2、机器学习三要素
机器学习三要素包括数据、模型、算法。简单来说,这三要素之间的关系,可以用下面这幅图来表示
总结成一句话:算法通过在数据上进行运算产生模型。
3、数据标注
如图中不同的动物,给它们分别打上正确的标记。通过算法训练后,达到正确分类的目的。要进行机器学习,首先要有数据。有了数据之后,再对数据进行标注,利用人工标注的数据给到机器进行学习,使机器智能化。
那实际项目中是怎么给数据打标注,为什么要给数据标注?带着这两个问题我们来看个视频。
https://www.thepaper.cn/newsDetail_forward_2052136
4、什么是模型?
大家来做下这个猜数字游戏,1, 4, 16…()… 256… 括号里的是什么。为什么是64,不是其他数字,又为什么是数字,不是一个汉字或者一个字母。我们找到了数字之间的规律,逻辑关系,并且抽象成了模型,我们才能知道括号里是什么。
举个生活中的例子,小米硬件中手机外壳,在大批量生产前需要先设计手机外壳的模具,然后所有同型号的手机外壳都按这个模具样版生产出来。这个模具也是个硬件上的模型。
算法的模型又是什么?模型是从数据里抽象出来的,用来描述客观世界的数学模型。通过对数据的分析,找到其中的规律,找到的规律就是模型。
机器学习的根本目的,是找一个模型去描述我们已经观测到的数据。
5、机器学习算法
例如,你可能会在研究论文和教科书中看到用伪代码或 线性代数 描述的机器学习算法。你可以看到一个特定的机器学习算法与另一个特性算法相比的计算效率。
学术界可以设计出很多机器学习算法,而机器学习实践者可以在他们的项目中使用标准的机器学习算法。这就像计算机科学的其他领域一样,学者可以设计出全新的排序算法,程序员可以在应用程序中使用标准的排序算法。
•线性回归
•逻辑回归
•决策树
•人工神经网络
•K- 最近邻
•K- 均值
•
https://img-blog.csdnimg.cn/20200424151404995.gif#pic_center
你还可能会看到多个机器学习算法实现,并在一个具有标准 API 的库中提供。一个流行的例子是 scikit-learn 库,它在 Python 中提供了许多分类、回归和聚类机器学习算法的实现。
三、AI算法模型测试
1、模型评估
泛化能力指的是学习方法对未知数据的预测能力。就好比运动员平时都是在训练场进行训练,而评估运动员的真实实力要看在大赛中的表现。
我们实际希望的,是在新样本上能表现得很好的学习器,为了达到这个目的,应该从训练样本中尽可能推演出适用于所有潜在样本的“普通规律”,这样才能在遇到新样本时做出正确的预测,泛化能力比较好。
当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为“过拟合“,与之相对是“欠拟合”指的是对训练样本的一般性质尚未学习。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。
2、衡量标准
首先有关TP、TN、FP、FN的概念。大体来看,TP与TN都是分对了情况,TP是正类,TN是负类。则推断出,FP是把错的分成了对的,而FN则是把对的分成了错的。
【举例】一个班里有男女生,我们来进行分类,把女生看成正类,男生看成是负类。我们可以用混淆矩阵来描述TP、TN、FP、FN。
混淆矩阵
准确率、召回率、F1
人工智能领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:
◦召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数
◦准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数
准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般来说,精确度和召回率之间是矛盾的,这里引入F1-Score作为综合指标,就是为了平衡准确率和召回率的影响,较为全面地评价一个分类器。F1是精确率和召回率的调和平均。F1-score越大说明模型质量更高。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:
评价指标跑出来看又怎么评判呢?我们来看下2016年的新闻
百度自动驾驶负责人王劲 2016年9月 去年的这个时候,我们的图象识别,识别汽车这一项,刚好也是89%。我们认为这个89%,要达到97%的准确率,需要花的时间,会远远超过5年。而人类要实现无人驾驶,主要靠摄像头来实现安全的保障的话,我们认为要多少呢?我们认为起码这个安全性的保障,要达到99.9999%,所以这个是一个非常非常远的一条路。我们认为不是5年,10年能够达得到的。 一般的人工智能系统,如搜索、翻译等可允许犯错,而无人驾驶系统与生命相关,模型性能要求很高。
在不同的领域,对召回率和准确率的要求不一样。如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。所以,在两者都要求高的情况下,可以用F1来衡量。
3、质量属性
鲁棒性 (robustness),也就是所说健壮性,简单来说就是在模型在一些异常数据情况下是否也可以比较好的效果。也就是我们在最开始讲人工智能三个特征中的 处理不确定性的能力。
比如人脸识别,对于模糊的图片,人带眼镜,头发遮挡,光照不足等情况下的模型表现情况。 算法鲁棒性的要求简单来说就是 “好的时候”要好,“坏的时候”不能太坏。 在AlphaGo 和李世石对决中,李世石是赢了一盘的。李世石九段下出了“神之一手” Deepmind 团队透露:错误发生在第79手,但AlphaGo直到第87手才发觉,这期间它始终认为自己仍然领先。这里点出了一个关键问题:鲁棒性。人类犯错:水平从九段降到八段。机器犯错:水平从九段降到业余。
测试方法就是用尽可能多的异常数据来覆盖进行测试。
模型安全,攻击方法有:试探性攻击、对抗性攻击两种
在试探性攻击中,攻击者的目的通常是通过一定的方法窃取模型,或是通过某种手段恢复一部分训练机器学习模型所用的数据来推断用户的某些敏感信息。主要分为模型窃取和训练数据窃取
对抗性攻击对数据源进行细微修改,让人感知不到,但机器学习模型接受该数据后做出错误的判断。比如图中的雪山,原本的预测准确率为94%,加上噪声图片后,就有99.99%的概率识别为了狗。
响应速度是指从数据输入到模型预测输出结果的所需的时间。对算法运行时间的评价。
业务测试,包括业务逻辑测试,业务 & 数据正确性测试。主要关注业务代码是否符合需求,逻辑是否正确,业务异常处理等情况。可以让产品经理提供业务的流程图,对整体业务流程有清晰的了解。
白盒测试,先让算法工程师将代码的逻辑给测试人员讲解,通过讲解理清思路。然后测试做代码静态检查,看是否会有基本的bug。可以使用pylint工具来做代码分析。
模型监控,项目发布到线上后,模型在线上持续运行,需要以固定间隔检测项目模型的实时表现,可以是每隔半个月或者一个月,通过性能指标对模型进行评估。对各指标设置对应阀值,当低于阀值触发报警。如果模型随着数据的演化而性能下降,说明模型已经无法拟合当前的数据了,就需要用新数据训练得到新的模型。
大数据辅助,机器学习算法训练和验证是一个持续改进的过程。当数据量逐步放大时候,如何统计算法的准确率呢?这个时候需要引入大数据技术针对数据结果进行统计,根据周期性统计的准确率结果生成线性报表来反馈算法质量的变化。
四 、常见的机器学习平台或者工具
1、Tensorflow已经跃居第一位,贡献者增长了三位数。 Scikit-learn排名第二,但仍然有很大的贡献者基础。
TensorFlow最初是由研究人员和工程师在Google机器智能研究组织的Google Brain团队中开发的。该系统旨在促进机器学习的研究,并使其从研究原型到生产系统的快速和轻松过渡。
2、Scikit-learn是用于数据挖掘和数据分析的简单而有效的工具,可供所有人访问,并可在各种环境中重用,基于NumPy,SciPy和matplotlib,开源,商业可用 - BSD许可证。
3、K0. ,一种高级神经网络API,用Python编写,能够在TensorFlow,CNTK或Theano之上运行。
4、PyTorch,Tensors和Python中的动态神经网络,具有强大的GPU加速功能。
5、Theano允许您有效地定义,优化和评估涉及多维阵列的数学表达式。
6、Gensim是一个免费的Python库,具有可扩展的统计语义,分析语义结构的纯文本文档,检索语义相似的文档等功能。
7、Caffe是一个深刻的学习框架,以表达,速度和模块化为基础。它由伯克利视觉和学习中心(BVLC)和社区贡献者开发。
8、Chainer是一个基于Python的独立开源框架,适用于深度学习模型。 Chainer提供灵活,直观和高性能的方法来实现全方位的深度学习模型,包括最新的模型,如递归神经网络和变分自动编码器。
9、Statsmodels是一个Python模块,允许用户浏览数据,估计统计模型和执行统计测试。描述性统计,统计测试,绘图函数和结果统计的广泛列表可用于不同类型的数据和每个估算器。
10、Shogun是机器学习工具箱,提供各种统一和高效的机器学习(ML)方法。工具箱无缝地允许轻松组合多个数据表示,算法类和通用工具。
11、Pylearn2是一个机器学习库。它的大部分功能都建立在Theano之上。这意味着您可以使用数学表达式编写Pylearn2插件(新模型,算法等),Theano将为您优化和稳定这些表达式,并将它们编译为您选择的后端(CPU或GPU)。
12、NuPIC是一个基于新皮层理论的开源项目,称为分层时间记忆(HTM)。HTM理论的一部分已经在应用中得到实施,测试和使用,HTM理论的其他部分仍在开发中。
13、Neon是Nervana基于Python的深度学习库。它提供易用性,同时提供最高性能。
14、Nilearn是一个Python模块,用于快速简便地统计NeuroImaging数据。它利用scikit-learn Python工具箱进行多变量统计,并使用预测建模,分类,解码或连接分析等应用程序。
15、Orange3是新手和专家的开源机器学习和数据可视化。具有大型工具箱的交互式数据分析工作流程。
16、Pymc是一个python模块,它实现贝叶斯统计模型和拟合算法,包括马尔可夫链蒙特卡罗。其灵活性和可扩展性使其适用于大量问题。
17、Deap是一种新颖的进化计算框架,用于快速原型设计和思想测试。它旨在使算法明确,数据结构透明。它与多处理和SCOOP等并行机制完美协调。
18、Annoy是一个带有Python绑定的C ++库,用于搜索空间中接近给定查询点的点。它还创建了大型只读基于文件的数据结构,这些数据结构映射到内存中,以便许多进程可以共享相同的数据。
19、PyBrain是一个用于Python的模块化机器学习库。其目标是为机器学习任务和各种预定义环境提供灵活,易用且功能强大的算法,以测试和比较您的算法。
20、Fuel是一个数据管道框架,为您的机器学习模型提供所需的数据。计划由Blocks和Pylearn2神经网络库使用。
通过上述列出的一堆工具发现,基本上都支持python,python提供了大量的人工智能机器学习相关的API,是首选语言。
各大厂机器学习平台
1. 微软的机器学习平台
https://studio.azureml.net/
2. Facebook 的应用机器学习平台
3. Uber的机器学习平台
https://eng.uber.com/scaling-michelangelo/
4. Twitter的机器学习平台
5.Databricks 开源机器学习平台 MLflow
https://mlflow.org/docs/latest/concepts.html
6.百度机器学习 BML
https://cloud.baidu.com/doc/BML/s/Wjxbindt7
7. 阿里PAI
https://help.aliyun.com/document_detail/72285.html?spm=a2c4g.11174359.6.544.4da35d87h2vsGy
8. 腾讯机器学习平台
https://cloud.tencent.com/document/product/851
9.京东JD neuCube
10.美团点评MLX平台
https://www.infoq.cn/article/spark-flink-carbondata-best-practice
11. 滴滴机器学习平台
https://www.infoq.cn/article/jJ4pjkf8Huf-WVlE7Xw7
12. 华为MLS
https://support.huaweicloud.com/productdesc-mls/zh-cn_topic_0122559740.html
13.金山云智机器学习平台 (KML)
https://www.ksyun.com/post/product/KML
14.第四范式
https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/79492729
五、参考资料
1、人工智能中RPA、NLP、OCR介绍:
https://blog.csdn.net/sdhgfhdshjd/article/details/115342671
2、机器学习入门(一):机器学习三要素之数据、模型、算法:
https://blog.csdn.net/liujian197905187511/article/details/104815578?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242
3、AI算法实现:
https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/79492729
AI算法测试之浅谈的更多相关文章
- [随机化算法] 听天由命?浅谈Simulate Anneal模拟退火算法
Simulate Anneal模拟退火算法,是一种用于得到最优解的随机化算法. 如果可以打一手漂亮的随机化搜索,也许当你面对一筹莫展的神仙题时就有一把趁手的兵器了. 这篇题解将教你什么?SA的基本思路 ...
- AI云原生浅谈:好未来AI中台实践
AI时代的到来,给企业的底层IT资源的丰富与敏捷提出了更大的挑战,利用阿里云稳定.弹性的GPU云服务器,领先的GPU容器化共享和隔离技术,以及K8S集群管理平台,好未来通过云原生架构实现了对资源的灵活 ...
- Manacher算法(马拉车算法)浅谈
什么是Manacher算法? 转载自百度百科 Manachar算法主要是处理字符串中关于回文串的问题的,它可以在 O(n) 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍 ...
- 浅谈分词算法(5)基于字的分词方法(bi-LSTM)
目录 前言 目录 循环神经网络 基于LSTM的分词 Embedding 数据预处理 模型 如何添加用户词典 前言 很早便规划的浅谈分词算法,总共分为了五个部分,想聊聊自己在各种场景中使用到的分词方法做 ...
- 浅谈URLEncoder编码算法
一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将 ...
- 浅谈Hex编码算法
一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转 ...
- 浅谈Base64编码算法
一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- 浅谈分词算法(4)基于字的分词方法(CRF)
目录 前言 目录 条件随机场(conditional random field CRF) 核心点 线性链条件随机场 简化形式 CRF分词 CRF VS HMM 代码实现 训练代码 实验结果 参考文献 ...
- 浅谈分词算法(3)基于字的分词方法(HMM)
目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...
随机推荐
- 全局监控Promise错误
一.问题引入 Promise 在前端中的使用已经非常普遍了,但是许多开发者或许习惯了链式调用却忘了捕获 Promise 的错误了. 例如: function forgetCatchError () { ...
- Linux_ZABBIX实战
typora-copy-images-to: img ZABBIX实战 zabbix安装 Zabbix详解 zabbix中文社区: http://www.zabbix.org.cn/ Zabbix中文 ...
- jsp第九周作业
1.做一个图书类Book id,name,price ,get,set访问器,构造方法2个,1个无参,1个有参做一个测试类,在main中创建3个图书对象,放到list集合中.做一个菜单,可以添加,删除 ...
- Quartus II 18.x Modelsim仿真设置
Quartus II 18.x Modelsim仿真设置 本节内容介绍在如何在QuartusII 应用环境下设置modelsim仿真选项,并进行波形仿真.下面以四位乘法器为例介绍. 在QuartusI ...
- 如果遇到This QueryDict instance is immutable错误
添加数据的时候,大家遇到"This QueryDict instance is immutable". 唯一的解决方法是request.data.copy()即可成功实现添加功能
- 表格CSS
.tab{border:1px solid #cad9ea;color:#666;} .tab th {background-image: url(th_bg1.gif);background-rep ...
- __declspec(dllimport) 和 __declspec(dllexport)的使用详解、以及 XX_API 的含义
1. C++代码里调用别人的库.或者写库给别人用.大概有如下的方法(只讨论windows系统的情况): ---- a) 提供头文件 h . 静态库 lib -- > 静态链接 ---- b) ...
- VS 2022创建ATL组件 (C++)
https://www.cnblogs.com/chechen/p/8119018.html 步骤如下: 1.新建ATL项目 打开Visual Studio 2022 新建ATL项目 2.添加接口类. ...
- selenium--- 数据驱动测试 ddt
通过使用数据驱动测试的方法,可以在需要验证多组数据的测试场景中,使用外部数据源实现对输入值和期望值的参数化,从而避免在测试中仅使用硬编码的数据.将测试数据和测试脚本分离开,使得测试脚本在不同数据集合下 ...
- 嵌入式linux系统新人学习回顾
(1).开发环境搭建 1.虚拟机ubuntu 2.远程登录/远程传输/串口三合一软件MobaXterm 3.FTP传输工具FileZilla 4.TFTP服务器软件tftpd.exe (2)开发板硬件 ...