【华为云技术分享】深度理解AI概念、算法及如何进行AI项目开发
莫衷一是的AI
做了多年的业务工作,一直希望能够用机器代替人力,把人从繁琐的具体工作中解放出来,从技术发展看AI或许可以支撑实现这个愿景。
但最近关于AI的讨论和争论比较多,学术上,纽约大学的Gary Marcus教授说,业界大牛Lecun等神话了深度学习,大牛们回击说,早就知道提到的问题,说法毫无新意。一边很多文章说AI纯属是泡沫,是炒作出来的结果;一边AI应用已经随处可见,看起来欣欣向荣的感觉。
实际工作中,不用AI吧,好像与业界趋势不符。用吧,AI项目失败的例子太多了。结果搞得大家对AI将信将疑,莫衷一是。
分裂的AI
从细节上近看AI,一堆数学符号,当然是科学。但是从宏观上看,现在的AI宣传,咋看咋像一种思想信仰。随便找几篇AI的介绍文章,就会发现其实啥是AI、人工智能都没有统一。
有些人是实用派的,不关心AI具体是什么,关注的是AI能帮助我们做什么。能把人从工作中解放出来,做到工作极简的技术都归为AI。操作上关心怎么利用AI对原有业务改造,怎么好用怎么来。
有些人是神经网络派的,因为深度学习为代表的神经网络技术效果非常好,买东西刷脸,停车刷车牌,颠覆了很多日常体验,特别是神经网络训练时不用人工干预,貌似可以减少人力,所以更觉得神经网络是AI利器了。爱屋及乌,对其他场景自然想是不是也都可以用神经网络技术来解决问题,非神经网络不AI。
现在看起来深度学习俨然一家独大了,当然可以想到,其他门派一定有不服的,就出现了开头两个AI大师吵架的事情。其实这种事情想想就知道吵不出结果,但是吵还是有效果的,最起码我知道了原来大师们做事有时也是一地鸡毛!
本来实用派也好,神经网络派也好,各有各的场景,大家相安无事。怕的是你讲实用的时候,别人谈理论。等你和他谈理论吧,他又转过来和你谈实用了。最怕的是,他是投资的,没谈的时候你就输了。所以这里把实用派和神经网络派的理解都讲了,以免输在起跑线上。
插播点沟通知识
为了能够更好的讨论,我先插播一点沟通的基本知识。
沟通的目的是传递信息。语言沟通的目的是传递语义,而语义是由语句和语境共同构成的。
沟通的三个主要障碍:概念不一致,语境补充错误和情感障碍。
概念的不同理解是第一个障碍,一个概念在不同语境都有不同的含义,有时是通称,有时又是特称,不过日常的概念成年人会很自如的切换。比如说请人吃饭,大家当然理解绝不是请人只吃白米饭。但是一旦事情复杂了,就不一定一下子反应过来。我记得大学哲学课中赫拉克利特有句话“人不能踏进同一条河流”,理由就是河水总变,所以河就不是同一条河,这次踏入和下次踏入的河就不同了。这个说法直觉上就有问题,但违反直觉不一定不对。当时没想明白问题在哪,最后才发现其实是老先生偷换概念。因为我们说河这个概念的时候其实已经确定了不管里面流的是什么,哪怕没水了也是那条河。
语境的不同理解是第二个障碍,传递语义不仅仅是语言本身,还依赖说话时的场景,也就是语境。如句子“你吃饭了么”,没有语境就不知道是想请你吃饭还是要拉上你一起开会。成年人都有一种约定俗成的语境解读方案,会无意识地补充语境,这样才能高效沟通。一旦事情复杂了,语境理解就不一定容易了。有个将军怎么立鸡蛋的心灵鸡汤故事,说将军当时把鸡蛋打破再立住,证明将军多与众不同,这就是一种偷换语境的游戏,别当真。
情感障碍是最难克服的,不同人关注点是有倾向性的。有的人总会选择性倾向听与自己想法相同的意见,凡是不相同的,就会想方设法的找理由屏蔽掉,从而保护自己脆弱的心理状态,这叫认知失调。像前几天报道的权健公司事件,明明是已经证明了是个传销骗局,但是搞传销的仍然坚信他们从事的是一个事业。
什么是AI(人工智能)
好了,再拉回来,为了搞清啥是AI,我们先从基本概念开始。AI是Artificial Intelligence的缩写,一般翻译成人工智能。那什么是智能呢?现在还一个公认的定义。从狭义讲,一般我们说一个人的智力好,是指一个人的逻辑推理能力好,度量的指标就是智商了。智能和智力可以认为是一个意思,只是用的场景有些不同,智能用的范围更广,智力一般指人或动物的智能,是一种精神能力。再后来衍生了一下,把处理人与人、人与自身的关系的能力叫做情绪智力,度量的指标就是情商了。
什么是智能
人的大脑能力显然不止这些,结构要复杂得多。根据脑科学的一些研究成果,我梳理了人大脑的基本能力,做了一个人的元能力框架图。元能力中的“元”是初始,基本的含义,是指大脑中有生理基础的,不可再拆分的能力。这个能力图也是我写的NARPE forest人格模型的一部分,图中包含的内容比较多,我这里只把和AI最相关的内容简单解释一下。
NARPE forest人格模型是我对马斯洛的人格模型进行的扩展,人格包含元需要(Meta Need)模块、精神元能力(Mental Meta Ability)模块、奖惩感受(Reward and Punishment Feeling)模块及情绪表达(Emotion Expression)模块。每个模块又由不同结构、强度的单元构成,类似一个小树丛(bosk),4个小树丛就形成一个大的复杂的森林(forest)系统,这个模型还在完善过程中,有兴趣的同学可以在评论区留言,共同讨论。
从下面这个图我们可以看出,人的大脑能力范围是极为广泛的,这也是智能定义难产或是难以统一的原因。借鉴计算机的概念定义,广义上,我把智能定义为对信息输入到信息输出的复杂处理能力。这个定义比较抽象,但是可以比较好的涵盖智能的范围。
根据大脑处理信息的复杂程度,我将大脑能力划分了4个层,分为感觉能力层,模式处理层,推理处理层,泛能力处理层。图中除了感知层类似物理量感知器,属于直接应激响应,处理的神经元在大脑中非常原始的部位或是干脆不在大脑中,可以不认为是智能。其他层都需要复杂处理,都可以归为智能范畴。
模式处理层,包含有【知觉】【动作】【低阶心理思维】三个大模块,这类能力类似计算机的“单入单出”处理,很多是本能反应,可以称作动物级智能。但千万不要以为这些大脑能力比较基础就简单,现在很火的深度学习大概只对应【知觉处理】模块中比较简单功能。目前的深度学习算法在特定场景比较好,像简单光线场景下的人脸识别,车牌识别,这个已经引起了产业革命。但就能力而言,像快速学习能力、复杂场景的处理,人的知觉能力要远强于目前的AI算法。因为我们的大脑能力太强了,日常做这个根本就不用花心思,所以我们感觉不到大脑能力的强大,看着AI的效果就觉得很神奇了。这个类似印第安人当时拿黄金和西班牙人换玻璃珠,还高兴得不要不要的,现在听着挺逗吧。
在这一层中【低阶分析】【模式印象】【意图推测】的能力,涉及动物的推理学习能力,我家养鱼,每次喂食的时候鱼就会游过来抢食,鱼要做到这点,就得从以前的经验中学习得出结论。不过这层能力都是用图像进行思维的,没有概念思维,这是动物和人思维的一个本质区别。朱松纯教授有篇文章就是介绍根据图像做意图推测,来实现这个动物级智能的。不过以现有的神经网络架构实现应该有点难,但致敬一下探索者。
推理处理层,包含【感性思维】【逻辑思维】【形象思维】【高阶心理思维】4个模块,类似计算机的“多入单出”处理,这些都是人类独有的能力,可以称作人类智能。一般说的强人工智能大概只对应【逻辑思维】模块。最早的AI想模拟逻辑推理过程,不过选错了应用对象,拿这个用于自然语言处理NLP了,后面可以看到,语言能力是极为复杂的,所以处理起来自然举步维艰,现在已经没人待见个方法了。不过如果是简单系统用规则处理会比较好用的,只是风口不在,没人去想了。
泛能力层,包含【语言能力】【审美能力】【思想顿悟】,类似计算机的“多入多出”处理。【思想顿悟】大概可以对应我们有时说的智慧,其他两个模块比较好理解。虽然现在NLP自然语言处理号称处理的是语言,其实主要处理的都是【知觉】模块的语音识别问题,一旦涉及语言中最关键的语义理解就有点傻,像这两句话“奖杯放不进箱子,它太大了。”,“奖杯放不进箱子,它太小了。”中“它”指什么?人一看就懂,但是AI对这种情况的处理最近才刚有点突破。NLP日常打字,网络搜索用用还行,一旦关键应用就会掉链子。其他的模块能力是现在AI想都没敢想的。
总结一下,目前AI中的弱智能大概相当于知觉能力的部分能力,日常我们并不认为这是智能。AI中的强智能大概相当于日常我们理解的智能范围,就是逻辑思维能力。
看到这你是不是感到很郁闷,原来人工智能这么弱智啊,不过别急,机器也有机器的强项,啥强项呢?就是记忆力,这东西记住啥了就不忘,所以我智力不行我记性好啊,一样吃得开。如果问一下哪个同事工作最努力,您凭直觉可以给出答案,这个就是大脑的【感性思维】模块在工作,不过很不幸这个模块工作极不可靠,存在很多认知偏见,你给出的答案可能是错的。而这个问题只要有工作记录,概率统计应用分分钟给你详细答案。机器轻松就把人打趴下了。至于这个算不算AI,就看你是不是属于实用派,反正我觉得这个是AI。
好了,说了半天看起来AI也就是那么一回事,但是怎么和生活中感受的有点不同啊,明明AI如火如荼的在开展啊。其实这个不是AI技术的成功,而是AI商业的成功。AI战胜人类就是山寨货的思路,我能力不强但我成本低啊,我分分钟就扩两个服务器上去,然后不要工钱的不分日夜的干活,整个就是一奴隶,这在商业上能不成功吗。
什么是机器学习
说了半天智能的概念,那啥是机器学习,机器学习和人工智能啥关系,这又是一个坑。继续从概念讲起。先说啥是学习,学就是依葫芦画瓢,把别人的知识拷贝过来。习就是反复的练。学而时习之就是学好了要多练练,别给忘了的意思。机器学习的任务就是从一堆数据中找点有用的东西出来。我们可以把数据想成矿山,要找点矿产出来就用锹一点点挖。所以早期的机器学习叫数据挖掘,名字贴切倒是挺贴切的,但一副干苦力的样子,显得一点都不高级。挖矿一般先有个矿脉,知道矿脉大概的特点,之后就挖吧。效果好坏,首先看矿脉,贫矿是挖不出多少金子的。还有如果对矿脉熟悉,沿着矿脉挖,就事半功倍。要是不熟悉情况乱挖,效果只好呵呵了。数据挖掘也一样道理,首先数据本身要靠谱,也需要熟悉数据情况,干这个就是数据科学家的事情。数据科学家一定要熟悉业务数据特点,还要能建模。我看好多兄弟挖矿不看储量,不看矿脉,都是贫矿了还在那使劲乱挖,希望出奇迹。同情这些兄弟们一下。
数据科学家挺贵,也不好找,而且还有一些矿根本就不聚集在一起,像沙金一样,散落在各处,没法给出矿脉。咋办呢?数据挖掘的升级版机器学习就上场了,既然数据科学家贼贵,数据本身的规律不好找,那干脆就别找矿脉了,换个方法吧!用“淘沙金”的办法,让好多人去捡金子,然后根据捡的结果推测出哪里有金子的规律。这个时候的算法就升级为大火的深度学习了。挖金子都有监工看着,最后统计每个人挖的情况,所以这个办法就叫监督学习。是不是感觉一下子档次就高起来了。既然学习这个词看起来这么高级,那顺便把数据挖掘那个老土的名字也改一下,叫无监督学习吧。机器学习这个山头这么火,凡是能和数据沾点亲带点故都拜码头,归在这个大旗下了。像数据统计类应用也改成机器学习了,自动控制类算法也发展到强化学习了。正所谓穷在闹市无人问,富在深山有远亲。
不过搞笑的是从让机器学习发扬光大的深度学习算法看,实现过程其实一点都看不出“学习”的意思来。既没有“学”,因为知识不是现成的,都是机器吭哧吭哧自己找出来的,没有葫芦自然不能画瓢。也没有“习”。因为机器记住就记住了,不需要反复“习”。倒是建模中训练这个词挺贴切的,训练的“训”比喻像河水一样滔滔不绝地教说。“练”本意是丝品浸染后精选色泽统一的成品,表示反复操作以求品质的改变。这个过程倒是符合深度学习的样子。
不过这种训练能用是能用,就是太笨了,一次训练有时要几万,几十万个数据,要搞很多服务器才行,还不一定好用。俗话说笨的像猪,就不要侮辱猪了,猪比AI深度学习的训练容易多了。而且除了深度学习和强化学习,可惜其他所谓的机器学习根本连训练这个过程都没有。
说到这大家明白了吧,机器学习就是个筐,根据需要啥都可以往里装,所以说不清或是清楚了不想说就很自然了。
好了,再总结一下,AI是从人的角度定义的,涉及范围很广。机器学习是从数据应用角度出发的。来源不一样,之间自然可能会发生交叉。比如人工智能中的老大难问题NLP是个AI问题,刚开始基于规则搞,这个和机器学习没啥关系,后来实在做不下去了,就改用机器学习中的深度学习算法搞,效果就比较好,这时候AI和机器学习就交叉了。
AI是个最大的筐,按照广义的智能定义,智能就是对信息的复杂处理过程,这世界有啥不是信息呢?数据当然是。所以万法归一,所有的机器学习,各个算法都可以归为AI。
概念都是人定义的,因为各种来源、各种目的的原因,概念会交叉重叠。下面这张图中,我把目前AI相关的概念脉络重新进行了梳理,未必正确,希望提供给理解这些概念的一些新视角,别被这些高大上的概念绕进去。
怎么开展AI项目
AI是什么很重要,但更重要的是怎么做。实践中怎么应用好这些AI技术?管理好一个AI产品项目?让AI实实在在的产生价值。下面是做AI项目的思考要点:
AI产品是个系统工程
AI产品很多时候不单单是AI技术本身,更多的时候体现为一个复杂系统,AI只是其中的一个关键环节。以一个故障处理AI OSS产品为例,故障处理是一个系统的工作,会涉及到物理设备智能化、业务流程优化、OSS自身产品的协同。还有系统架构,软件架构,易用性,生态等多个方面的考虑。下面是极简运维的框架图,AI只是其中一部分工作。
要理解业务特点
开展AI项目一定要“理解业务,理解业务,理解业务”,重要的事情说三遍。下面是理解业务7P模型,包含了对业务需要了解的7个方面。上面两层的6个P主要讲业务整体运作的,内容比较好理解。AI项目不是孤立的存在,一定是为业务服务的,项目能给业务带来什么价值要依赖对业务的理解,所以搞清楚这些P很重要。图中最下面的P,Data Pattern要特别注意,这个将业务和AI联系起来的桥梁。数据有哪些模式后面会专门讲一下。
理解了业务特点之后,还要理解业务问题是什么,就是下面的PEK模型。前面的痛点和期望比较好理解,最后的关键点需要注意一下,业务既然存在了很长时间,存在的问题没有解决一定有其原因,不会无缘无故的没人解决问题。这些原因就是关键点,一定要了解清楚是技术门槛原因(在技术原理Principle上就存在障碍),还是因为经济原因(Economic),还是因为工作习惯原因(人的感受习惯了Feeling)。
这些问题都要搞清楚,才能更好的开展AI项目。做AI项目切忌不看业务特点,从算法出发做项目,拿着锤子看什么都像钉子,这样是做不好项目的。
要理解业务数据特点
业务理解完了,就要抽象出解决问题的业务数据模式是什么了。这个时候特别需要业务专家知识输入,要根据现实世界的关系理解数据并建立业务数据模型。现实世界的事物关系从本质特征讲,就有两大类关系,一个是沿着时间维度的关系,包括因果关系,随机关系,可控关系三种,前两者好理解,可控关系是指通过计算机算法控制的关系,一般AI并不涉及。一个是沿着空间维度的关系,如低维关系和高维关系。比如人长相区别无法用语言准确描述,几十亿人,每个都不一样,这时候语言都是苍白的,这个就是高维模式。而象商品种类这类用有限的语言就能相对准确描述的就是低维度关系。跑和走的关系比较特殊,大家可以考虑一下是什么关系?我总结了事件间关系,见下图分类。
有了业务数据关系的分类,还要确定业务输出的类型。有些业务输出要求就是要根据事件的空间关系对事件分类,比如人脸识别。有些业务输出还要进一步预测和动作,比如广告推荐,要通过分析购买商品之间的因果关系和随机关系,进行预测和商品推荐。
再举个实际例子,如果利用AI做故障定位,一定要知道故障处理模式是啥,故障业务数据有啥特点。大家可以根据下图材料感受一下。
这里有个经验法则,就是专家知识注入越多,对算力要求越小。
要根据业务数据特点选择算法
建好了业务数据模型,就可以选择算法了。一个项目组里面有AI算法专家,也有业务专家,谁来选择算法呢?现在一般项目都是AI专家选择算法。不过除了研究项目外,一般的AI项目我建议还是业务人员进行算法大类选择。这个选择方法其实很简单,别忘了人脑的智能算法超强,想想人咋处理的,对照一下业界的算法特点,选出大类算法就行了,具体算法由AI专业人员再进行选择。为啥不推荐AI专家直接选算法呢,主要因为实践中AI专家经常都有算法绝技,手里拿着锤子,啥都是钉子。谁来选当然也没有那么绝对,也有AI的牛人,啥武器都会,大家可以一拍即合,这时候谁选算法都一样。最后开发的时候肯定是一起商量,没有那么清晰的界限。
总结一下AI项目算法选择方法:1.理解业务数据特征。2.用大脑模拟跑一把,体验业务活动。3.根据脑补的特点选择算法。
AI项目的基础,理解AI算法
选择AI算法之前一定要知道各类算法的特点,我在下图中总结了一下各算法的特点,其实就那么几个大类。
像故障定位问题,就是数据维度有限的推理问题,所以传统的基于规则的专家系统是最有效的。如果用深度学习来做这个,就是一个自讨没趣的方案。而如何生成专家系统需要的规则,则是一个有趣的问题,有基于专家,基于统计,基于规则几个路径。如果有拓扑信息,生成规则就用专家系统,用规则生成规则。如果没有拓扑,就要基于统计了。最后都要用到专家人工校验。
对AI算法的理解
AI算法的介绍材料比较多,这里就不重复了。我只介绍一下从业务人员角度怎么对算法理解,以便在算法选择中进行使用。
先介绍一下对SVM的理解,这个算法基本上不用了,但是理解SVM后对深度学习理解就容易了。
SVM是一种分类算法,如果能够理解下面二维图的原理,高维数据推而广之就行了。按照前面对业务数据的理解方式,要确定数据本身是可分的,如下图中①所示,显然从数据间关系看是线性可分的,这种情况就比较简单了,如②所示,用算法找出最合适的分割面就行了。最关键的是如果像③的情况,数据分为里外圈,显然是可以区分的,但数据又不能用一根线分开。这个时候,可以通过极坐标变换变成④的情况,就又可以用一条线分开了。这种变换如果在高维上应用就是核变换。
关于核变换基本上所有资料都介绍说,这种变换就是把低维数据变成了高维数据,数据在高维上变得可分了。对这个问题困扰了我很长时间,为什么数据变成高维之后就会变得可分了。后来意识到这么说应该大家把因果关系混淆了。从本质上,这种变换应该是一种域的变换,维度多只是变换的副产品。类似信号处理中把时域变换到频域,时域看起来很混乱的信号在频域就一目了然了。但是这种变换的副作用就是时域很短的一段信号在频域中数据维度就是无穷多。
从这种理解出发,选择核函数的技巧更多的是要理解业务数据本身的可分性,不过这种可分性却没有合适的判断依据,大部分都是根据历史经验进行试验,或者干脆把每种变换都试一遍。
理解完SVM,我们理解一下深度学习,还是上面那个例子,在SVM方法中是对数据进行了变换。而深度学习的方法是不对数据处理,而是通过画多个线段的方法把内外圈分隔开。这样就避开了SVM要靠蒙各种变换的尴尬。方法比较统一,这样算法选择就比较容易了。对高维数据也一样,只要数据本身是可分的,只要深度学习的神经网络设计够复杂,就不会走到死胡同。
对AI发展的理解
现在基于神经网络的学习算法还有巨大的应用空间可以挖掘,所以在商业上会继续成功,但是从结构上还有很多需要完善的空间。
一是神经网络内部结构比较简单,类似平铺,只是对人的神经网络最简单的模拟。而人的实际神经网络是有结构的,要复杂得多。例如人的视觉处理有专门检测特征的细胞,神经网络中有专门的柱状结构,还有延时处理机制。这两个结构造成的差异类似中国和德国厨房的差异,中国的厨具简单,而德国厨房每个事情都要专门工具,效率自然就高。
现在AI视觉处理就靠暴力堆算力,简单场景还行,但是一旦遇到复杂光线场景,效果就会急剧下降,所以像现场质量检测方面的应用,一定要控制好使用环境,不然算法很难解决。最近有了胶囊网络,神经网络的结构化算是往前走了一步。
举个形象的例子来看看AI和人的智能处理有啥区别:
二是没有长期存储机制,所以很多事情比较难以突破了。现在语音输入法说是正确率97%以上,不过这个数字就是一个参考,只能说日常口语实用性可以了,稍微离日常场景远一点就处理不了。为啥呢?因为现在的算法只记住最近几句话的情况,而人可以快速调取非常久远的记忆,还有常识理解也要能够调用常识才行。
所以知道这些特点,也就知道AI行业目前大概发展到什么水平,对AI项目也就有了合理的期望。
最后的心得
最近一段时间,学了很多庞杂的东西,粗看起来很不一样,但是细究起来还有一些共通的东西,补充一下心得,大家随便看看:
1. 对常见事物的认识,如果深究下去,会发现事实和你的第一感觉可能完全是相反的。
2. 很多看是不相干的事情的方法,从大的逻辑上其实是一致的。
3. 看似很怪异的事情,用历史学的方法看,其实很有道理。
4. 做事的方法不对,越努力会越偏离目标。
作者:华为云专家 秦广溥