AI杂谈:从洗衣机到老鼠屁股

4个月前

关于洗衣机,统计学,GPU和老鼠屁股

AI,即人工智能,是当前技术大热门,一定有很多同学想学,但是又觉得高深莫测,不知从何下手,没关系,本次课程会让大家迅速入门。

首先明确下AI的定义,很多人抱怨AI已经变成了一种营销语言,是个筐,什么都往里装,而实际上似乎也是这样……AI本来就是个很宽泛的概念,年轻人可能没见过下面这种东西:


二十年前的AI洗衣机!上面会有一个大大的Fuzzy Logic标签和按钮,这个标签彰显了洗衣机的尊贵身份,按下这个按钮则会有一些不可描述的事情发生!实际上这种洗衣机在洗衣服之前只是做了下面这些工作:




什么?这种只要几个传感器和几个If-Else语句、绝大多数程序员都能轻松搞定的事情,也算是AI吗?当然算,这是AI中的一种,被称为模糊控制,真正的学术概念,真的不是洗衣机厂在吹牛,那么学术上的AI概念是什么呢?请看:


简单的说,AI就是任何可以让机器模拟人类行为的技术,像上文中可以自主决定洗衣时间的洗衣机,使用的就是AI中的模糊控制技术,属于AI技术中最为简单的一种,更为复杂的还有知识表示与推理、模式识别、遗传算法等,上述这些都是相对比较传统的AI。当前大热机器学习技术是AI至关重要的子集,与模糊控制、知识表示与推理这类基于显式预置规则的技术不同,机器学习是基于统计学方法的,是利用统计学方法从已有的经验数据中获取规律并改进机器行为的AI技术。机器学习虽然在近几年才变得热门,但是其算法本质上并不是什么新东西,比如贝叶斯分类器早已广发应用于垃圾邮件拦截至少有十余年之久。有一大类使用多层神经网络的机器学习技术被称为深度学习,这里深度的含义即是多层,多层中的多是个相对概念,根据算法的不同,可能是三五层,也可能是上百层。这里提到了很多新概念和算法,可能有人会比较晕,别急,本课程和我们公众号的其他课程将会对其进行解释。

 

深度学习也是种非常古老的技术,比模糊逻辑的洗衣机还要老,但是之前一直受算力的限制而无法发挥其技术潜力,一次稍微复杂些的深度学习实验会进行百万亿次甚至百亿亿次的浮点运算,当年即使是最顶级的人工智能专家也苦于无法找到具备此等算力实验环境而只能让才华停留在空想。近年来由于GPU性能的大幅提高和GPU集群技术的普及,具备这种算力的硬件成本大幅下降,极大的促进了深度学习技术的发展,而现在公有云也会提供GPU服务,花个电影票的价钱就能体验一次深度学习过程,旧时王谢堂前都难有的燕,哗啦啦的飞入寻常码农家。读到这里有人可能会问,为什么是GPU推动了深度学习的发展,CPU不行吗?简单的说,深度学习需要大量的神经网络运算,这些运算中的绝大部分是矩阵的加法和乘法,运算本身并不复杂,只是运算量特别大,从运算复杂度上看,CPU做这种运算属于牛刀杀鸡,但是从运算量上看,鸡太多了,区区几把牛刀,即CPU的几个核,累死也杀不完。而GPU生来就是做图像处理的,图像的数据结构就是矩阵,图像处理主要就是做矩阵的加法和乘法。即GPU专注于矩阵运算,而不必像CPU那样支持多种运算、数据结构和控制逻辑,这就让GPU的核比CPU的核简单的多,所以两千块的CPU最多也就六个核,而两千块的GPU则有几百个核,高端GPU有几千个核。虽然GPU的每个核在功能和性能上都远不如CPU,但是核的数量是CPU的成百上千倍,所以在做矩阵运算这个单项上,GPU的性能是CPU的十几倍,甚至上百倍。

 

罗嗦了一大堆,让我稍微总结一下,AI是个很大的技术范畴,当前大热的机器学习是基于统计学方法的AI,而深度学习是机器学习中的最新大热门,当红炸子鸡。或者可以说,AI这个概念在不同的时代背景下有着不同的含义,比如二十年前谈家电的时候AI就是模糊控制,今天我们在IT圈里说AI一般指的就是机器学习。那么问题又来了,机器学习能用来做什么呢?

 

简单的说,解决一切无法用显式预置规则解决的问题,例如,如何识别一棵树


有人说了,我列一组规则,满足这些规则的图像,就是树,比如:

 

1. 有一个圆柱形的物体支撑着一个扇形物体;

2. 圆柱形物体是深褐色或者类似的颜色,扇形物体是绿色或者黄色;

3. ……

 

这样貌似可行,可是再想想,这也可能是根棒棒糖。有人又说了,那我再继续加规则,可是问题是,不能一直这样的举反例、加规则的循环下去,具体到工程实现中,就是不可能让一个程序员一直在一旁待命,遇到反例就改程序,更糟糕是这些规则之间还可能会存在冲突,规则多了就很难理清。这时机器学习就有了用武之地了,让机器学习程序读取一些树的图片,程序就会自动提取这些图片的特征,读取的图片越多,提取的特征就越精确,这些图片就是训练数据,只要训练数据的质量足够好,训练次数足够多,这个程序识别树的精确度就会非常高,甚至比人还高。再回想一下人类识别树的过程,人类思维从来都不是通过一系列的规则来识别树的,而是小时候看过一些树的照片和实物后,“莫名其妙的”就知道什么是树了,这个过程实际上是和机器学习非常相似的。然而可怕的是,通过这样的学习过程,机器学习程序不光可以识别树,还可以进一步识别哪些是苹果树、哪些是桃树、哪些是荔枝树,以至于黑杨、糖枫、铁杉、赤松等成百上千种你从没见过的品种,完胜绝大多数人类选手。所以李开复老师曾经说过:“如果人可以在5秒钟内对工作需要的思考和决策做出相对应的决定,那么这项工作就有非常大的可能被AI全部或部分取代。”更可怕的是,机器学习程序是可以7×24不停的学习和工作的,所以在可以预见的未来,在此类任务上除少数专家之外(这些专家为机器学习程序提供训练数据),绝大多数人类必将完败。甚至最后连这些专家都不是AI的对手,因为AI可以集结众多专家的智慧,就像下围棋一样。

 

所以不要纠结AI会不会战胜人类了,就像没人会纠结自己算算术没有计算器厉害一样,这些无聊的事情都留给机器去做好了。

 

谈到这里,又想到一个题外话,很多人说机器学习是不懂因果、没有逻辑的,这是机器学习的局限,也是人类的优势。要回答这个问题,首先要明确的是因果和逻辑是两码事,“如果明天下雨,我就不去公司了”和“如果两条直线都和第三条直线平行,这两条直线也互相平行”是两码事,前者和雨大小、早上起来心情如何、会不会突然改变主意、领导会不会突然发飙等一系列因素有关,用机器学习处理这类问题确实比较困难;而后者在欧几里得几何体系下是必然成立的,处理这类问题只要传统的AI就可以了。还有一个比较有争议的事实是:人脑本质上是不具备逻辑的。人脑本质上是一个选择系统,当我们自认为自己是在进行逻辑思考时,其实大脑会同时涌现出很多个想法,然后选择出一个符合逻辑的,这也是为什么大部分人在进行逻辑思考时必须集中精力,实际上是大脑在小心翼翼的做选择。你经历的逻辑训练越充分,这种选择过程就越自然,即更大程度的在潜意识中完成,微观上讲就是加强了对应神经元之间的突触强度,这和机器学习程序的训练过程非常类似。从另一个角度讲,就是人类是善于归纳而不善于演绎的,而机器学习做的也是归纳而不是演绎。如果有同学对这个话题感兴趣,可以读下一本名叫《第二自然》的老书,之前很多年买不到,最近刚好再版,大家可以买来看看。

 

扯得有点远,让我们言归正传。为什么我们要如此关注机器学习呢?见下图






卷积神经网络之父Yann LeCun,中文名杨乐村(误)说这是一种全新的编程方式,叫Differentiable Programming。我曾经写过一篇关于声明式编程的文章,Differentiable Programming和声明式编程有些相似之处:你只需准备好输入数据和期望的输出数据作为训练数据,神经网络就会自动构造出中间的过程。更有意思的是,训练好的机器学习模型是可以芯片化的,相比于通用型的CPU,这种芯片可以大大降低晶体管数量和能耗,并提高运行效率。

 

接下来介绍几个神经网络的基本概念:


1. 神经元:简单的说就是一个一次函数y=wx+b,其中w被称为权重,即weight,b被称为偏差,即bias,x和y即是神经元的输入和输出。就是这么简单。记得之前有人开玩笑说我在二维平面上画一条直线,这个就是AI了。设想如果你把一盒围棋撒到了地板上,然后让你判断一下能否在地板上画一条直线把黑子和白子分开,如果能请画出这条直线,现在让你用程序来完成此事,这当然是AI!

2. 神经网络:即多个神经元的输入和输出对接。



1. 深度神经网络:即多个神经网络对接。

 

常见的深度神经网络有卷积神经网络CNN和递归神经网络RNN。


接下来简单的解释一下什么是卷积神经网络,递归神经网络我们暂且不谈。由于本次是最最基本的入门课,所以只给同学们一个感性上的理解,至于深入理解,那可复杂了,杨乐村可是研究了半辈子的!感兴趣的同学可以继续关注我们的公众号。


首先解释下什么是卷积,看下维基百科的定义,估计你会头大,所以还是赶紧回来看我们的课。其实很简单:



就是两个矩阵的对应位置相乘再求和。大矩阵就是神经网络要处理的数据,比如一幅树的图片,小矩阵被称为卷积核,神经网络对图片的处理过程就是用卷积核在大矩阵上一步步的移动并相乘、求和,这么做的目的是什么呢?答案也很简单,卷积核实际上是个筛子,上述过程实际上就是对大矩阵进行扫描和特征筛选的过程。

说到这里,可能有同学会问,现在我知道卷积是什么了,那卷积神经网络里的神经元和神经网络又在哪里呢?答案是,卷积核其实就是神经元。前面说神经元就是一次函数,那其实是神经元最基本的形式,实际应用中这种相乘和相加关系大多是用矩阵来表示的,比如卷积核和被处理矩阵每个对应位置的相乘都是一个一次函数(这里做了些简化,忽略了相加),整体上表示为矩阵的相乘和相加,也就是前文中说的GPU最擅长的事情。而一堆卷积核的“互动”和其后的一些处理过程,就构成了神经网络。


我们继续以图片识别为例解释这个过程,至于其他类型的工作,只要输入数据可以用矩阵描述,过程和图片识别非常类似。



这页PPT里的卷积核是个老鼠屁股,这里使用的是灰度图片,所以老鼠屁股被表示为一个具有图片像素灰度值的小矩阵,如果是彩色图片那就是分别描述三原色深度的三个小矩阵,而老鼠被表示为一个具有像素灰度值的大矩阵,彩色图片同理。现在让卷积核在老鼠图片上逐个像素的移动、相乘、求和,突然得出了一个很大的数,即发现了一个老鼠屁股!这里的“很大”实际上是指卷积运算的结果超过了一个激活函数的阈值,超过了这个阈值就发出警报:“叮咚,发现老鼠屁股!”,没超过就默不做声。接下来再想象一下我们有老鼠耳朵卷积核、老鼠眼睛卷积核、老鼠胡须卷积核、老鼠尾巴卷积核等一大堆卷积核,分别用这些卷积核扫描图片,如果卷积运算的结果都超过了阈值,就可以说这副图片具备老鼠的各种特征,即这副图片的内容在很大的可能性上是一只老鼠。

 

现在同学们应该明白卷积的作用了吧!上面这些老鼠图片也不知道最初源自何处,真是非常形象的说明了问题,在此对原作者深表感谢。

 

再回到前面那个“如何识别一棵树”的问题,如果用卷积神经网络来解决这个问题,实际上就是用通过训练数据提取树的特征的过程,主要工作就是求得描述这些特征的卷积核,然后再用这些卷积核去扫描训练数据之外的图片,就可以判断出图片的内容是不是一棵树了。


当然,这时的卷积核就不像前面那个简笔画里那么简单了。这时卷积核的数量会非常多,样子也会很古怪,像一个个曝光过度的照片的碎片一样。

 

那么这些卷积核是如何得出的呢?这就要深入到神经网络的训练过程之中了,受篇幅所限,本文无法展开讲解,如有同学想深入了解这个过程,敬请关注我们公众号的后续课程。






关于作者:宋潇男,现任普元云计算架构师,曾在华为负责云计算产品与解决方案的规划和管理工作。曾负责国家电网第一代云资源管理平台以及中国银联基于OpenStack的金融云的技术方案、架构设计和技术原型工作。




关于EAWorld微服务,DevOps,数据治理,移动架构原创  技术分享,长按二维码关注




COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。