0%

我理解的AI

前言

人工智能(AI,Artificial Intelligence)是当前最火的技术之一,随着技术的不断发展,AI的江湖早已呈现出山头林立、百花齐放的盛泰。然而,面对这个纷繁复杂的江湖,作为刚踏入其中的一枚小虾米,一定会有种无从下手的感觉。什么是Tensorflow、Caffe、Troch?ONNX、TVM又是干什么的?他们之间又是什么关系?本文是我在学习AI时的一些总结。

什么是人工智能

AI,即人工智能。指机器表现出类人的智能,是一个广义上的概念。机器人是AI、人脸识别是AI、阿尔法Go也是AI,等等。它们都有一个共同特性,即机器通过推理、知识、学习、感知等技术,表达出类人的能力。AI包含了很多内容,而我们要讲的是其中的一个子集:机器学习。

什么是机器学习

机器学习(ML,Machine Learning)是AI的一个重要分支,是实现AI的一个途径,即以机器学习为手段解决AI的问题。其中涉及概率论、线性代数等众多学科,目的是通过设计分析,找出让计算机可以自动学习的算法。应用ML的领域也多种多样,例如数据挖掘、自然语言处理、图像识别等等。ML应用到的算法也多种多种,例如决策树、聚类、贝叶斯分类器、神经网络等等。而我们常听到的深度学习(DL,Deep Learning)是ML的一个分支,源于人工神经网络算法。DL在众多方法中表现优异,学习效果明显,获得了众多AI玩家的青睐。

如何入门

我一般把机器学习分为三部分:理论研究工程实现商业生态。这三者密切相关,缺一不可,相辅相成的造就了当前如此凶猛的AI热潮。

理论研究

ML的核心是算法,如前面提到的决策树、聚类、分类,这些都是ML中应用到的算法。涉及到很多数学理论学科,门槛较高,属于高精尖范畴。一般的从业人员包括高校教授、博士,专业研究机构,或科技公司的专业研究部门等。常见的算法有:

  • 人工神经网络
  • 贝叶斯类
  • 决策树
  • 线性分类器
  • 聚类分析
  • ……

每个算法又可以展开出更多的方法,比如人工神经网络又包括反向传播、卷积神经网络等等。作为初学者,我们只需要了解各种算法的概念和大概原理即可,对感兴趣的或者工作涉及的细分领域,再仔细钻研即可。

工程实现

工程实现是指把理论中的算法翻译成能让机器理解的实现。既可以是纯软实现,也可以是软硬结合的实现。

软件

所谓ML山头林立,其中一点就包括纷繁复杂的各类软件实现库。比如仅针对图像识别领域,有名的开源库就有openCV、FreeImage、CImg等等,它们或使用不同的编程语言,或定义了不同的模型,又或定义了各种不同的接口。各种开源库百花齐放,让新手无从下手。甚至如Tensorflow、caffe这种大型的开源框架,本身就集成了很多常用的ML算法。常见的库有:

  • Tensorflow
  • Caffe
  • Scikit-Learn
  • Deeplearning4j
  • Torch
  • Azure Machine Learning
  • ……

硬件

想必大家也常常听到一个新概念AI芯片。我们都知道软件是要运行在硬件上的,ML也不例外。在我眼里AI芯片=传统芯片+ML定制化。这里的ML定制化可以包括如图像识别加速、GPU高速运算、可编程等等。这个定制化一出来,各种类的硬件也就产生了。硬件厂商虽然不如软件那么繁多,但在AI硬件领域也暂时没有一个统一标准。于是一个有趣的现象产生了:这家的芯片跑tensorflow牛逼,那家的芯片完美支持Caffe,在Azure的芯片上跑Azure ML性能最佳等等。如何适配软硬件,又成了一个令人头疼的问题。

商业生态

任何技术发展到一定的程度,面临的必然是如何在生产环境中应用以及如何在商业上成功。其关注点在于成熟度生态成熟度这个维度简单,哪些库性能好,哪些框架功能全,基本都一目了然。而生态却不是一朝一夕能建立的,这也是目前各大AI厂商聚焦的地方。而在一个生态中,标准的定义往往是众兵家必争之地。毕竟,人人都想当规则制定者。在讲标准之前,先讲一下中间表示层(IR,Intermediate Representation)

什么是IR

An Intermediate representation (IR) is the data structure or code used internally by a compiler or virtual machine to represent source code. An IR is designed to be conducive for further processing, such as optimization and translation. –Wikipedia

IR就是中间翻译层的意思,它汇聚南北向流量,起到统一格式与类型的作用。在ML中,我们把各种软件库(模型)视为前端(北向),各类AI芯片为后端(南向)。各种库生成的模型通过IR处理后,就可以跑在任何符合标准的硬件上。如图所示:

IR

可见,谁控制了IR,谁就控制了标准。

模型和接口的标准

然而理想很丰满,现实却很骨感。

在没IR之前,大家基本都是各玩各的。这家可能对某个算法进行了优化,那家可能在某种硬件上性能好。甚至有些框架自己的生态本身就已经很成熟了。例如Tensorflow,它是由Google开源的机器学习框架,是最早一批开源得框架之一,经过长久的发展,已经获得了广大开发人员的认可与喜爱。同时,也有自己的编译层框架XLA(Accelerated Linear Algebra),XLA可以优化Tensorflow计算,有助于硬件加速。因此,如同云计算领域的AWS一样,Tensorflow作为ML领域的大佬,目前并不怎么愿意与其他框架一起玩。

当然,其他的厂商也不愿意看着Google一家独大。于是,一些开源的IR层框架也慢慢浮出水面。

Facebook联合Microsoft和AWS发布了名为ONNX的IR框架。ONNX在深度学习领域定义了一种开放式的模型格式,支持不同的ML框架之间的模型格式转换,并针对底层硬件进行了一定优化。其北向对接各大ML框架,统一模型格式,支持模型的相互转换;南向对接各种AI芯片,统一了接口标准。使得多种ML框架和硬件可以协同交互。但ONNX目前在初始阶段,只完成了模型转换的功能,离真正的IR还差很远。ONNX目前支持的框架和设备

还有一款商业气息不重的IR框架,名为TVMTVM出自于美国华盛顿大学的一个名为SAMPL的机器学习研究组。TVM的前身叫NNVM,也是一款以优化和统一为目的的IR框架。后来,开发组可能觉得NNVM略显单薄,在NNVM之上,开发了更为厚重的TVM框架。TVM厚在哪里?与ONNX有何不同?针对他们,用户应该如何选择?这些都是我目前回答不了的问题。留作我的作业之一吧,希望能在以后的blog中给大家一个满意的答案。

AI上云

机器学习,尤其是牵扯到复杂算法的机器学习是要消耗大量的计算、存储、网络资源的。大多数用户不可能为了一点AI学习就购买相应的硬件设备。因此,就有了大量的云上AI计算的需求。针对公有云、私有云、混合云、边缘云等不同的云环境,AI也都有相应的需求和场景。这里我也不班门弄斧了,留给大家思考吧。

下一步

想要成为AI领域的专家,则对理论研究、工程实现、商业生态的掌握缺一不可。学习枯燥的数学算法时,不妨看看对应的计算机编程实现;在研究技术时,不妨抬头看看AI生态这片天。在此,我与君共勉,望大家一起努力,早日成为AI领域的core member。