随着AI或人工智能的快速发展,社会正在推动工程师、科学家和程序员快速开发和改进产品和服务。 许多分析表明,85%的高管希望通过人工智能获得或加强他们的竞争优势,但大多数人不确定如何从人工智能的角度出发进一步帮助转变他们的研究、产品和业务。
为了帮助大家解决这个问题,MathWorks美国总部的产品市场经理赵志宏先生,在近日举行的 MATLAB EXPO 2018 中国大会上,展示了工程团队如何识别和采用最佳工具和工作流程以达到人工智能的效果,而这些工具和工作流程一度只供高度专业化的软件开发人员和数据科学家使用。
以下是演讲全文,略有删减:
大家好,非常地高兴能有这个机会给大家做今天的主题演讲,我们今天的主题是人工智能,叫Artificial Intelligence,简称AI。
最近五六年的时间,人工智能几乎每天、每个月都有不停的新的突破,给我们带来新的认知,大家心里可能想,如果我们今天去讨论AI的话,是不是有点太晚了呢?但实际上不晚,为什么呢?因为实际上我们正在处于一个重大的技术变革的初级阶段,前不久美国著名的市场调研公司Gartner做了一次问卷调查,他们调查了不同工业里面的3000多家公司,调查结果显示,大约有50%的公司已经把这个AI做入了他们未来的产品和管理计划当中。但是只有大约4%的公司真正地把这个AI已经用到他们的产品当中,或者是管理当中。所以如果我们大家今天去了解AI,其实并不晚。
今天想给大家讲几个例子,也是人工智能的应用,但是大家可能不熟悉,比如说食品的质量检测自动化,比如说隧道开发的时候的自动地质检测等等。
人工智能的定义
在看这些例子之前,首先要做一个定义,人工智能指的是什么?
人工智能这个词在50年代开始出现,它最基本的定义是机器模仿人类智能行为的能力。随着我们人们对人工智能了解的加深,我们对人工智能的期望值也了增加,所以今天如果再问人工智能是什么?大家会解释,人工智能是机器要接近甚至超越人类智能行为的能力。这样的话,人工智能就不仅仅能够帮助人类完成重复性很高的工作,或者机械性很强的工作,他们可以把这些工作做得更安全、更可靠、更精确。
人工智能更完整的定义应该是机器通过训练来学习到接近或者超越人类的智能行为,这句话怎么理解呢?我想在座很多人都是软件工程师或者至少编过程序。编程指挥计算机做事,大概有两种方式:
第一种叫传统的编程方式:首先给计算机写一段程序,给计算机一个输入数据,这个计算机就会按照你写的程序去处理这个输入数据,如果你程序写得对的话,输出结果会跟你预想的结果是一样的,它的三个要素是数据、程序和输出。
第二种编程方式也就是机器学习的方式,还是跟这三个要素打交道,但是他们的位置发生了变化,输入变成了数据,还有理想的输出,而机器学习人工智能会自动地产生程序,当然这里说输出是程序,其实并不完全准确,因为真正的输出,实际上是模型。这个模型,大部分时候是一个黑箱,也就是说,如果你给一个模型一个输入数据,他会给你想要的输出,但是你并不能看到模型里的逻辑关系。
我记得有些人预测,最终人工智能能够产生实际意义上的程序。但是我想告诉大家,今天还不行,所以大家不用担心你的工作会被人工智能代替。总结一下,机器学习实际上是人工智能这个大的范围里面的一个重要的组成部分、一个技术元件。
如果你已经有了数据了,想要的输出,也有了机器学习模型,你就可以说我都准备好了吗?
自动车道检测
其实这个是我今天想给大家讲的一个主题。光有这三个要素是不够的,你还需要很多的其他的东西。我就用自动驾驶作为例子给大家看一下。
这个是一个自动车道检测的算法,它的输入是摄像头采集到的车道的视频,输出是判断车道的位置。那么它的算法,就是我们开发出来的人工智能的算法,能够自动识别视频里面的车道。但是光有这些还是不够的,因为这个算法还需要采集其他的传感器里面的数据,比如说现在的车速是多少,比如说现在的转向灯是不是打着,现在的GPS车的位置在什么地方,这些传感器的数据,你还是要采集到。
另外,采集到的一些实时数据,很多情况下要进行预处理,因为数据里面有噪声,有坏数据或者是缺失数据,你需要根据专业知识,对数据进行预处理。这个算法要经过大量的仿真,才能够真正放到汽车里面用,所以这个开发过程会涉及到大量的仿真。
最后,如果你的算法开发完了,还需要把这个算法部署到汽车里,这四个步骤严格来讲,不属于AI范畴的一部分,但是没有这几个步骤,你是没有办法把你开发出来的AI去放到你们真正的产品里面去跑的。
总结一下,我刚才提到编程三个要素,数据、输出和模型是整个AI开发流程的一个步骤。其实说得更精确一点,它们是这个步骤里面的一个部分,我们把它叫做AI模型开发。为什么呢?因为整个系统往往会包括一部分AI,另外一部分很有可能是传统的控制算法,而且你会有一整套系统模型进行大量的仿真,所以开发这个步骤,应该包括AI的模型,包括其他传统的控制模型,还有仿真的过程。
除了这些,首先要能够返回数据,也许从传感器直接访问,也许从文件或者数据库里面读取数据。那么有了这些数据以后,你可能还要进行一些数据的预处理。
那么开发完了以后,最后一步呢,你还要把你这个算法去部署到产品当中。我提到的部署,它包括桌面程序,包括云端的企业系统,还有实施处理器嵌入式设备。
AI既然这么厉害,我们任何一个应用都需要AI吗?其实有些应用并不需要。我们来看一个具体的例子。像这个是一个机械制造的机器人,它的动作非常简单,不确定性也非常地小,像这种简单的机械动作,你完全可以用传统的算法去控制它,不需要AI,AI在这个情况下是没有什么用武之地的。
但是如果我们现在有上百台同样的机器,在同一个操作线上操作,情况就不一样了。任何一台机器发生故障,那么这个生产线就得停掉,就会造成巨大的经济损失。如果你负责设计这条生产线,你怎么样才能把这条生产线关闭的可能性降低到最低?最好就是实时监测每一个机器人自然损耗的程度,去预测什么时候手臂机器人会发生故障,在它发生故障之前,对它进行维护,这样就可以减少整个生产线关闭的可能性。这是应用AI的非常合适的场景。
膨化食品质量检测
我们现在处于一个AI的时代,你如果从来没用过AI,从来没用过机器学习,你可以说,我现在准备好了吗?我怎么样能让我自己准备好去拥抱AI的时代呢?那么我想通过一个例子,膨化食品质量检测的智能化,来回答这个问题。
这个例子来自德国慕尼黑工业大学的一个博士生,他的研究课题就是找到一个能够判断这种膨化食品质量的好的方法,到底膨化食品,现在是脆还是松软,还是很一般?他以前用了很多种传统的办法,但是没有找到一个非常准确的、很好的办法。后来决定用MATLAB里面的机器学习=功能试一下。他发现人在咬了膨化食品之后有两个参数可以采集。一个是声音,酥脆的声音,另外一个就是牙齿咬的力度,他根据这两个参数来做机器学习。
为了做这个试验,他尝试了一百多次试验,尝试不同酥脆程度的食品,采集了所有的参数。采集了以后,他把采集的原始数据去进行特征提取。比如说他从力度里面提取到了硬度的参数,提取到了破损的参数。另外他用各种各样的方法去提取声音里面存在的一些特征。有了这些特征以后,他下一步任务就是开发一个机器学习的分类器,这份工作对于他来说是新的,他从来没有接触过机器学习。但是好在,他非常熟悉MATLAB,所以他用到了我们MATLAB里面提供的一个非常方便的工具,叫分类学习器。有了这个工具以后,他就不需要一个一个去试各种各样的分类器的算法。而是用APP,一次性尝试所有算法。
基于深度学习的高效隧道钻探
刚才这个例子里,最困难的实际上不是分类器开发,而是从这个数据里面提取的一个特征值。特征工程主要目的就是最大程度地从原始数据里面提取特征向量,用这些特征向量去训练机器学习的模型或者深度学习的模型。
有的时候,在你开发机器学习之前,特征工程就会花好几个月的时间,那么问题来了,如果我没法找到数据里面的特征,我能不能去使用AI呢?答案是“是的”,你还是可以用的,但是你用的就不是机器学习了,你需要用的是叫深度学习。深度学习的特点是,它不需要人工手动找出来特征值,它可以自动地从你的数据里面学习到特征值,这是它最大的好处、最大的特点,那么它也随之带来一个问题,深度学习需要大量的数据,那么有的时候,它需要的数据超过了我们手头能够采集到的数据,那么我们后面想给大家讲一个例子,大家主要看一下这个例子里面这些工程师是怎么巧妙地解决数据不够这个问题的。
这张照片是波士顿的一个隧道,这个隧道是连接波士顿机场和波士顿市区的。这个Mikusa隧道是由日本一家公司叫Obayashi Corporation这家公司去开发的。他们采用的开发方式是一个叫高效隧道钻探的技术。这个技术的精要就是用围岩自己的硬度去支撑这个隧道,可以很大地降低隧道开掘的成本。这里头要求地质工作者对隧道的表面进行不停地分析,一般来说,他们对这个表面图像取三点来进行分析,比如说取左上角、右上角还有底部做分析。但是这种方法有一个巨大的问题,就是人工分析每次需要几个小时的时间,很不容易。另外这个分析只有有经验的地质工作者才能做,如果他们没有这么多的地质工作者,那些开发人员经常就得停工,等着地质人员做完检测以后才能再继续开发。
所以,他们的人员就在考虑,我们能不能通过深度学习的方法,自动根据采集到的隧道表面的图像判断这些地质参数,而不是每次都需要地质人员来做这个事情,这是他们想要做的一件事情。
但是大家知道,你要想训练一个好的深度学习的网络的话,你至少需要上万个数据,上万张图像,而他们手里只有70张隧道表面的照片。那么他们怎么办呢?首先,他们采用了一个技巧,就是把每一张照片分割成15个小的照片,这样的话,他们数据量就从70增加到了大约1000,然后地质工作者在这1000张照片里面,手动地把他们需要的这些特征都标注出来,比如说风化石变,比如说断裂的间隔,还有断裂的状态,这样他们现在有了1000个标注好的数据,但是这1000个数据还是不够的,所以他们就在想,我们能不能不用从头去训练这个深度网络,而是用已经训练好的,现在市面上非常流行普遍的能够识别图像的网络,比如说AlexNet。AlexNet是经过上百万图像训练的,它能够识别食品、平时家里用的东西,识别动物等。但是这个网络现在没法识别地质参数。
所以他们用到了一项技术叫做迁移学习。也就是说把已经有的AlexNet,用他们1000个数据再进行一下定制性的训练,那么经过这个定制训练以后,这个新的网络就能够识别地质参数,最终他们识别的结果的精度也达到了90%以上,他们觉得非常地满意。
风力发电机预测性维护
我刚才讲的是如果你想用深度学习,又没有太多的数据,你会怎么办?我介绍了迁移学习的办法,但是有时候你会遇到的情况就是根本没有数据,能不能用AI?能不能用深度学习?答案是也可以的。
那么在什么情况下,我们会找不到数据呢?比如这种情况,大家看到一个风力发电机,风力发电机的制造商,现在都在想用人工智能,对风力发电机的故障进行预测,他们希望能够实时地量测,能够监测每个叶片的磨损程度,能够预测什么时候发电机可能会发生这种故障,而不是完全依赖于现场发生故障之后再去解决这个问题。
这种情况下你是基本上采集不到什么数据的。你不可能等到有70次故障之后,再开始去训练我的网络,这是不可能的。那我们怎么办呢?我们怎么能够用人工智能的方法来识别这种情况?我们注意到,在设置风机的时候,我们设计者,实际上总是要建一个Simulink模型。如果这个模型,跟你的真的风机如果很接近的话,你可以利用这个模型来产生你的数据。那么你怎么去利用这个模型呢?你在用这个模型产生故障数据之前,首先你要把这个模型用正常运行情况的数据进行一下校正,确保这个模型跟风力发电机的正常运行情况完全符合,或者是非常地接近。之后,你可以很容易地、成本很低地在你的模型里面增加一个故障,这样就可以在模型里面产生出故障数据,然后你可以用这个故障数据去训练你的机器学习或者深度学习的网络。
总结
通过刚才那几个例子,我想大家都看到了,即使你以前从来没有使用过机器学习也没关系,你可以用MATLAB里提供的APP去进行自动地找到适合机器学习的算法和模型,然后你可以用自己的专业知识,从数据里面提取特征向量。如果你没有办法从你的数据里面提取特征向量,你还可以用深度学习的方法来训练你的网络。如果你的数据不够,你还可以采用迁移学习来解决这个问题。如果你根本没有合适的数据,还可以利用Simulink模型来产生数据,帮你去训练网络。
作为工程人员,作为科学研究人员,我们一定要知道AI只是整个系统里的一部分,要想整个系统完全做好,很快地开发出来,你需要的不仅仅是AI的部分,你需要了解AI以外的其他的技术。