目录:程序员
1、 AI 的定义及学术上的AI概念算法
2、机器学习:基于统计学方法的AI编程
3、几个神经网络的基本概念微信
4、老鼠的屁股:卷积神经网络网络
1、AI的定义及学术上的AI概念数据结构
AI,即人工智能,是当前技术大热门,必定有不少同窗想学,可是又以为高深莫测,不知从何下手,不要紧,本文会让你们迅速入门。架构
首先明确下AI的定义,不少人抱怨AI已经变成了一种营销语言,是个筐,什么都往里装,而实际上彷佛也是这样……AI原本就是个很宽泛的概念,年轻人可能没见过下面这种东西:机器学习
(图1:人工智能是个筐,洗衣机也往里装)函数
二十年前的AI洗衣机!上面会有一个大大的Fuzzy Logic标签和按钮,这个标签彰显了洗衣机的尊贵身份,按下这个按钮则会有一些不可描述的事情发生!实际上这种洗衣机在洗衣服以前只是作了下面这些工做:微服务
(图2:人工智能洗衣机的 " 智能 " 之处)
什么?这种只要几个传感器和几个If-Else语句、绝大多数程序员都能轻松搞定的事情,也算是AI吗?固然算,这是AI中的一种,被称为模糊控制,真正的学术概念,真的不是洗衣机厂在吹牛,那么学术上的AI概念是什么呢?
(图3:什么是人工智能)
简单的说,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通常指的就是机器学习。那么问题又来了,机器学习能用来作什么呢?
简单的说,解决一切没法用显式预置规则解决的问题,例以下图
(图4:机器学习的适用场景)
有人说了,我列一组规则,知足这些规则的图像,就是树,好比:
有一个圆柱形的物体支撑着一个扇形物体;
圆柱形物体是深褐色或者相似的颜色,扇形物体是绿色或者黄色;
……
这样貌似可行,但是再想一想,这也多是根棒棒糖。有人又说了,那我再继续加规则,但是问题是,不能一直这样的举反例、加规则的循环下去,具体到工程实现中,就是不可能让一个程序员一直在一旁待命,遇到反例就改程序,更糟糕是这些规则之间还可能会存在冲突,规则多了就很难理清。
这时机器学习就有了用武之地了,让机器学习程序读取一些树的图片,程序就会自动提取这些图片的特征,读取的图片越多,提取的特征就越精确,这些图片就是训练数据,只要训练数据的质量足够好,训练次数足够多,这个程序识别树的精确度就会很是高,甚至比人还高。再回想一下人类识别树的过程,人类思惟历来都不是经过一系列的规则来识别树的,而是小时候看过一些树的照片和实物后,“莫名其妙的”就知道什么是树了,这个过程其实是和机器学习很是类似的。
然而可怕的是,经过这样的学习过程,机器学习程序不光能够识别树,还能够进一步识别哪些是苹果树、哪些是桃树、哪些是荔枝树,以致于黑杨、糖枫、铁杉、赤松等成百上千种你从没见过的品种,完胜绝大多数人类选手。
因此李开复老师曾经说过:“若是人能够在5秒钟内对工做须要的思考和决策作出相对应的决定,那么这项工做就有很是大的可能被AI所有或部分取代。”更可怕的是,机器学习程序是能够7×24不停的学习和工做的,因此在能够预见的将来,在此类任务上除少数专家以外(这些专家为机器学习程序提供训练数据),绝大多数人类必将完败。甚至最后连这些专家都不是AI的对手,由于AI能够集结众多专家的智慧,就像Alpha Go下围棋同样。
因此不要纠结AI会不会打败人类了,就像没人会纠结本身算算术不如计算器同样,这些无聊的事情都留给机器去作好了。
谈到这里,又想到一个题外话,不少人说机器学习是不懂因果、没有逻辑的,这是机器学习的局限,也是人类的优点。
要回答这个问题,首先要明确的是因果和逻辑是两码事,“若是明天下雨,我就不去公司了”和“若是两条直线都和第三条直线平行,这两条直线也互相平行”是两码事,前者和雨大小、早上起来心情如何、会不会忽然改变主意、领导会不会忽然发飙等一系列因素有关,用机器学习处理这类问题确实比较困难;然后者在欧几里得几何体系下是必然成立的,处理这类问题只要传统的AI就能够了。
还有一个比较有争议的事实是:人脑本质上是不具有逻辑的。人脑本质上是一个选择系统,当咱们自认为本身是在进行逻辑思考时,其实大脑会同时涌现出不少个想法,而后选择出一个符合逻辑的,这也是为何大部分人在进行逻辑思考时必须集中精力,其实是大脑在当心翼翼的作选择。
你经历的逻辑训练越充分,这种选择过程就越天然,即更大程度的在潜意识中完成,微观上讲就是增强了对应神经元之间的突触强度,这和机器学习程序的训练过程很是相似。从另外一个角度讲,就是人类是善于概括而不善于演绎的,而机器学习作的也是概括而不是演绎。若是有同窗对这个话题感兴趣,能够读下一本名叫《第二天然》的老书,以前不少年买不到,最近恰好再版,你们能够买来看看。
扯得有点远,让咱们言归正传。为何咱们要如此关注机器学习呢?
(图5:眼下必须高度关注机器学习,尤为是深度学习)
卷积神经网络之父Yann LeCun,中文名杨乐村(误)说这是一种全新的编程方式,叫Differentiable Programming。我曾经写过一篇关于声明式编程的文章,Differentiable Programming和声明式编程有些类似之处:你只需准备好输入数据和指望的输出数据做为训练数据,神经网络就会自动构造出中间的过程。更有意思的是,训练好的机器学习模型是能够芯片化的,相比于通用型的CPU,这种芯片能够大大下降晶体管数量和能耗,并提升运行效率。
(图6:基本概念1)
神经元:简单的说就是一个一次函数y=wx+b,其中w被称为权重,即weight,b被称为误差,即bias,x和y便是神经元的输入和输出。就是这么简单。记得以前有人开玩笑说我在二维平面上画一条直线,这个就是AI了。设想若是你把一盒围棋撒到了地板上,而后让你判断一下可否在地板上画一条直线把黑子和白子分开,若是能请画出这条直线,如今让你用程序来完成此事,这固然是AI!
神经网络:即多个神经元的输入和输出对接。
(图7:基本概念2)
深度神经网络:即多个神经网络对接。
常见的深度神经网络有卷积神经网络CNN和递归神经网络RNN。
接下来简单的解释一下什么是卷积神经网络,递归神经网络咱们暂且不谈。因为本次是最最基本的入门课,因此只给同窗们一个感性上的理解,至于深刻理解,那可复杂了,杨乐村但是研究了半辈子的!感兴趣的同窗能够继续关注咱们的公众号。
首先解释下什么是卷积,看下维基百科的定义,估计你会头大,因此仍是赶忙回来看咱们的课。其实很简单:
(图9:什么是卷积)
就是两个矩阵的对应位置相乘再求和。大矩阵就是神经网络要处理的数据,好比一幅树的图片,小矩阵被称为卷积核,神经网络对图片的处理过程就是用卷积核在大矩阵上一步步的移动并相乘、求和,这么作的目的是什么呢?答案也很简单,卷积核其实是个筛子,上述过程实际上就是对大矩阵进行扫描和特征筛选的过程。
说到这里,可能有同窗会问,如今我知道卷积是什么了,那卷积神经网络里的神经元和神经网络又在哪里呢?
答案是,卷积核其实就是神经元。前面说神经元就是一次函数,那实际上是神经元最基本的形式,实际应用中这种相乘和相加关系大可能是用矩阵来表示的,好比卷积核和被处理矩阵每一个对应位置的相乘都是一个一次函数(这里作了些简化,忽略了相加),总体上表示为矩阵的相乘和相加,也就是前文中说的GPU最擅长的事情。而一堆卷积核的“互动”和其后的一些处理过程,就构成了神经网络。
咱们继续以图片识别为例解释卷积神经网络的工做过程,至于其余类型的工做,只要输入数据能够用矩阵描述,过程和图片识别很是相似。
(图10:卷积的做用)
上图的卷积核是个老鼠屁股,这里使用的是灰度图片,因此老鼠屁股被表示为一个具备图片像素灰度值的小矩阵,若是是彩色图片那就是分别描述三原色深度的三个小矩阵,而老鼠被表示为一个具备像素灰度值的大矩阵,彩色图片同理。
如今让卷积核在老鼠图片上逐个像素的移动、相乘、求和,忽然得出了一个很大的数,即发现了一个老鼠屁股!这里的“很大”其实是指卷积运算的结果超过了一个激活函数的阈值,超过了这个阈值就发出警报:“叮咚,发现老鼠屁股!”,没超过就默不作声。接下来再想象一下咱们有老鼠耳朵卷积核、老鼠眼睛卷积核、老鼠胡须卷积核、老鼠尾巴卷积核等一大堆卷积核,分别用这些卷积核扫描图片,若是卷积运算的结果都超过了阈值,就能够说这副图片具有老鼠的各类特征,即这副图片的内容在很大的可能性上是一只老鼠。
如今同窗们应该明白卷积的做用了吧!上面这些老鼠图片也不知道最初源自何处,真是很是形象的说明了问题,在此对原做者深表感谢。
再回到前面那个“如何识别一棵树”的问题,若是用卷积神经网络来解决这个问题,实际上就是用经过训练数据提取树的特征的过程,主要工做就是求得描述这些特征的卷积核,而后再用这些卷积核去扫描训练数据以外的图片,就能够判断出图片的内容是否是一棵树了。固然,这时的卷积核就不像前面那个简笔画里那么简单了。这时卷积核的数量会很是多,样子也会很古怪,像一个个曝光过分的照片的碎片同样。
那么这些卷积核是如何得出的呢?这就要深刻到神经网络的训练过程之中了,受篇幅所限,本文没法展开讲解,若有同窗想深刻了解这个过程,敬请关注咱们公众号的后续文章。
关于做者:宋潇男,现任普元云计算架构师,曾在华为负责云计算产品与解决方案的规划和管理工做。曾负责国家电网第一代云资源管理平台以及中国银联基于OpenStack的金融云的技术方案、架构设计和技术原型工做。
关于EAWorld:微服务,DevOps,数据治理,移动架构原创 技术分享,长按二维码关注