手机浏览器扫描二维码访问
对于机器学习的芯片市场,不仅各大半导体厂商在攻城略地,美国、中国、欧洲至少有几十家新创公司也在摩拳擦掌。新创公司有机会吗?
神经网络芯片大致可以分成三大类。第一类是数据中心里面使用的用于训练模型和识别的芯片。目前这类芯片几乎被英伟达垄断。这类芯片客户不惜成本,不太计较耗电,只要计算速度快。这些芯片通常都用最新的半导体工艺以便集成最多的晶体管。截至本书成稿时,最先进的开始成熟商用的半导体工艺是7纳米晶圆线,使用最新的工艺成本也最高,一个芯片从研发、设计、流片、测试到量产的过程耗资动辄数十亿美元,新创公司通常没有这么多钱,风险资本也不愿意冒这么大风险。即使能生产出来,销售也是一个极大的问题,要说服大客户们使用一家没有验证过的芯片极为艰难,除非新创公司的芯片能比现有芯片快至少10倍以上。如果要比现有芯片快10倍以上,那么新创公司在设计阶段至少要比市场最快芯片快100~1000倍,因为现有厂商也不会原地不动,也在不断地设计新一代的芯片。即使一个新芯片能快10倍,编程软件环境包括编译器、程序库等完善也需要若干年的时间。综上原因,一家新创公司想觊觎数据中心市场风险非常大。
第二类是用于汽车自动驾驶或机器人中的芯片,这类芯片的耗电不能太大,例如在电动汽车里,芯片耗电不能使电池巡航距离降低超过1%。对成本有一定的要求,计算速度也要比较快。目前英伟达的GPU是各大汽车厂商的首选,英伟达也将自动驾驶作为最重要的布局领域。
AMD、高通、英特尔都在竞争这块市场。高通曾经想以440亿美元收购荷兰半导体厂商恩智浦(NXP)公司,因为恩智浦的芯片已经广泛用在汽车的各个控制系统里。2017年3月,英特尔以153亿美元收购以色列汽车视觉公司Mobileye,从而在高级辅助驾驶系统(ADAS)市场实现领先。AMD联合了原本是英伟达合作伙伴的特斯拉开发适用于自动驾驶的AI芯片。在巨大的市场潜力的吸引下,一些新创公司也进入这个领域。但整体而言新创公司在这个市场的机会也比较小,原因类似:研发成本太高,客户(汽车公司和它们的一级供应商)大而保守等。
第三类是用于各类终端的芯片,例如用于摄像头、手机、医疗设备、小型机器人等。这类芯片要求耗电非常低(例如手机),成本非常低,在机器学习类的运算中速度只要能比CPU快10倍以上即可。新创公司在这一类芯片中机会最大。在这类终端芯片中,以手机市场最大,但进入一流手机厂商的机会也最小。例如苹果、三星、华为等一流手机厂商几乎都用自己的芯片以便提供差异化用户体验,对它们来说设计一个神经网络加速器的难度并不高。2017年苹果、华为已将AI元素融入自家芯片,发布内置AI芯片的iPhoneX(苹果手机)、Mate10(华为手机)等。另外,手机芯片厂商绝不会放弃这个未来市场,高通、三星、联发科等计划在2018年也推出融入人工智能的芯片产品,其他手机厂商也会陆续使用神经网络芯片。即使是二三流的手机厂商也一定要求AI加速芯片被集成到CPU里而不是增加一个新的芯片(这样几乎不增加成本)。新创公司根本不可能开发一个全新的带AI加速器的CPU,最多只能把自己的AI加速器的设计给CPU芯片公司使用,但CPU芯片厂商都有自己设计AI加速器的能力,所以AI芯片的新创公司想进入手机市场几乎没有可能。
摄像头市场规模非常大,尤其是许多国家或城市正在打造智慧城市,AI芯片的需求潜力很难估量,很多AI芯片和算法创业公司都将安防作为最重要的落地场景之一,但该领域的集中度也很高,给安防设备厂商提供视频处理芯片的公司一定会把AI功能集成进去,安防设备龙头厂家也会研发自家的AI芯片。所以新创公司的最大机会在于为那些还不存在的或者目前规模很小的应用提供芯片,例如各种小机器人、物联网的应用。投资人要赌的是这些目前大厂看不上的市场会在短短几年内爆发。
许多读者会关心,中国的新创公司在AI芯片上有没有机会?对这个问题的回答是:上面的分析对任何一个国家的新创公司都是适用的。
生态大战——编程框架的使用和选择
在AI领域经常听到一个新技术名词叫作“编程框架”。这个编程框架和过去我们熟悉的“编程语言”“操作系统”是什么关系?简单讲,所谓编程框架就是一个程序库。这个库里有许多常用的函数或运算(例如矩阵乘法等)。这样的程序库可以大大节省编程人员的时间。这些编程框架的程序库大多都是“面向对象”的高级编程语言,例如C++(计算机程序设计语言)、Python(一种面向对象的解释型计算机程序设计语言)等。高级编程语言易于编程但效率低,低级编程语言例如汇编语言编程复杂但效率高。用这些高级编程语言写的程序库可以在各种不同的操作系统上运行,例如Linux(一种开源操作系统)、Windows(微软电脑系统)、MacOS(苹果电脑系统)等。
作为机器学习的一个早期现象,现在有许多种不同的编程框架在竞争。其中比较著名的有TensorFlow、theano、Caffe、MXNet、CNTK、torch等。这些不同的编程框架的本质类似,通常都由以下五部分组成。
张量对象
张量就是一组多维的数据。例如一组24小时每小时平均温度的数据就是一个有24个数据的一维张量,也叫向量。一张480×640像素的黑白图像就是一个二维张量,也叫矩阵。第一个维度有480个数据,第二个维度有640个数据,共有480×640=307200个数据,每个数据的值就是这张图中一个像素的灰度。如果是一张彩色图像,每个像素又可以分解为红、绿、蓝三原色,这张图像就变成一个三维的张量,一共有480×640×3=921600个数据。张量是一种能涵盖各种数据的形式,不论要处理的数据是天气、股票、人体生理指标、语音、图像还是视频,都可以用不同维度的张量表示。这样数据的统一的表达使数学运算形式的表达也能够统一:都是张量运算。所以在机器学习计算时(不论是训练模型还是识别特征)都要先把数据转化为张量形式,计算结果出来以后,再从张量形式转化为原来的数据形式。在所有的张量里,最常用的就是二维张量,即矩阵。下面为了直观易懂,我们在讨论过程中都用矩阵作为张量的代表。
对张量的运算
基于神经网络的机器学习在本质上是对输入数据的一系列矩阵运算、卷积运算和非线性运算(例如只取正值,负值一律等于零的运算)。作为模型训练,通过反向传播不断地调整加权系数(即矩阵的各个元素)使最后的输出与目标值的差达到最小。作为特征识别,将输入数据经过一系列矩阵和非线性运算后提取出某个训练过的特征,然后再拿这个特征和一类已知特征比较进行分类。这些常用的运算例如矩阵乘法、非线性处理等都可以成为程序库里的一个运算或函数。当我们调用这个函数时,只需要把该填的参数填进去,例如矩阵的大小和内容,而不必再自己写矩阵的具体运算。
运算流程图和程序优化
许多编程框架都提供可视运算流程图,这个工具可以把一个神经网络的全部运算用框图的方法画出来,框图中的每个节点就是程序库中的一个函数或运算(用编程语言说叫作一个对象),这样整个运算非常直观,也容易找到程序漏洞。当运算流程图画出来以后,编程框架就可以自动把流程图变成可执行程序。对于一个复杂的程序,用可视流程图方法画出来后有全局观,很容易优化(改动流程图比改程序容易)。编译器(把用编程语言写的程序转化成计算机底层指令的内置程序)可以根据流程图优化底层资源(内存、计算等资源)的分配。
自动求导器
在神经网络训练时最复杂的计算就是把输出误差通过反向传播,用最陡梯度法来调整网络各层的加权系数直至输出误差最小。这个计算基本是一个连锁的在网络各层对权重系数集求导数的计算。在大部分的编程框架中,这个连锁求导被打包成一个运算函数(在Python程序库里是一种“类”)。在有些提供高级应用接口的编程框架中,例如TensorFlow,甚至把整个“训练”打包成一个运算(“类”)。在把运算流程图画出来以后(等于定义好了神经网络的大小和结构),只要调用“训练”这个运算开始运算训练数据,就可以得出训练好的网络参数。
针对GPU的线性代数运算优化
传统的许多线性代数的函数是在CPU上运算的。前面介绍GPU时讲过,GPU的特点是大量的并行计算。线性代数中的运算许多都是矩阵运算,而矩阵运算中有大量可并行的计算。由于目前AI的计算平台以GPU为主,所以许多原来常用的线性代数函数和运算包要重新写,让这些运算充分并行。但这部分工作不影响编程框架用户的使用方式,这些优化后的接口和使用方式保持不变。
这些编程框架都是早期的机器学习编程者为了自己方便使用而积累出来的程序库。它们形成的时间不同,目的相异,解决的问题的侧重面也不同。有些框架提供的可调用程序属于底层(每个函数或运算相对基本,相当于盖房子的砖头),需要编程人员透彻理解神经网络,这些底层程序库的好处是编出来的程序灵活性高、适用性强、运行效率高。有些框架提供的调用程序属于高层(每个函数或运算复杂,相当于盖房子的预制板,如同一面墙)。不太懂神经网络的人也能很容易编程,但程序灵活性和适应性受限制,运行效率低。另外一个主要不同之处是程序库内的函数和运算的具体实现方法不同,有些效率高,有些效率低。关于各主要编程框架在使用单个和多个GPU进行机器学习中最常见的矩阵运算和卷积运算的效率比较,可以参见香港浸会大学褚晓文教授的论文《基准评测TensorFlow、Caffe、CNTK、MXNet、Torch在三类流行深度神经网络上的表现》。想更多地了解这些编程框架的读者可以参阅附录4,其列出了目前业界的主要编程框架。
开源社区与AI生态
我们从程序库的介绍可以看出,几乎任何早期的机器学习的编程者都会自己编写一些常用的函数和运算,建一个自己用的或自己的公司内部用的程序库。发源于大学的这些程序库,例如发源于加州伯克利大学(UCBerkeley)的Caffe,通常从一开始就是“开源”的,也就是这些程序库里面的源代码都是公开的。近年来谷歌、Facebook、微软、亚马逊等公司也将自己的程序库开源。为什么它们会如此“大公无私”?当然这些公司内部推动开源的技术人员中不无理想主义者,希望通过开源来推动机器学习的快速发展。但公司作为一个营利主体,开源的主要商业动机是吸引更多的软件编程人员使用自己的编程框架,滋养一个围绕着自己的编程框架的生态系统。那么“开源”这个游戏是怎么玩的呢?程序源代码开放后随便什么人都可以改,如何控制质量?下面我们就介绍一下“软件开源”这个游戏的历史和规则。
软件开源在美国有悠久的历史,最成功的开源项目就是互联网的开发。从1962年兰德公司提出互联网的概念,到1968年头三个网络节点(斯坦福大学、斯坦福研究所、加利福尼亚州洛杉矶大学)的连接,再到网络协议TCPIP的开发和成熟,其间没有任何政府部门出面组织,也不受任何一家公司控制,完全靠社区志愿者。美国这个国家就是从社区到小镇,到州,再到联邦这样自下而上建立起来的。当1620年从英国驶往新大陆的“五月花”号轮船被季风从原来的英王特许地纽约吹到北边的荒无人烟的今天叫作波士顿的地方时,船上的102名男性清教徒在一起订下了“五月花号圣约”。这份圣约就是美国第一个社区的“乡民公约”。之后美国的各个移民社区都是这种自治管理模式,没有官,也没有“上级”,所有的社区都由社区居民自己定规则,自己管理。“政府”就是自己订的乡民公约。所以在美国独立战争后许多人认为根本没有必要成立一个联邦政府。这种强大的自治传统是开源软件的文化基础。所以像互联网这样无中心,没“领导”的“怪物”只能在美国成长起来,在世界任何其他地方都不太可能。这和技术无关,而和文化、历史有关。互联网的技术很简单,只要有一台显示终端、电话线和提供信息的计算机就可以搞互联网了。其实世界上联网最早的国家不是美国,而是法国。法国1968年就开发出了“Minitel”(法国自行建立的国家网络,建成早于互联网),由法国邮电部开发、控制。1982年就在全国铺开,给每个居民家里面安装一个统一的终端,通过电话线连接到邮电部的数据库里,可以查天气、订票等。法国这样的欧洲大陆国家有悠久的皇权传统,从一开始就和美国的思路完全相反,一切由邮电部控制。在互联网的冲击下,法国Minitel和其他国家政府控制管理的互联网门户一样早就荡然无存。回过头看,孰优孰劣一目了然。
软件开源也是一个社区,这个社区也有乡民公约,这个公约的主要内容就是鼓励每个人分享对开源软件的改进。经过多年的演进,目前开源社区的公约大多使用“Apache2.0协议”。这个协议的主要规则如下:任何人都可以使用Apache2.0协议许可下的软件,并且可以用于商业;任何人都可以任意修改原有的软件,并将修改后的软件申请商标和专利,但修改的软件必须注明使用了Apache2.0的许可,必须明确标示修改的部分。
开源社区允许在开源软件的基础上开发自己的商用软件,而大多数商用软件是不愿意公开的。那么开源社区如何解决“搭便车”的问题呢?这个问题就像问为什么总有人愿意出头为社群出力,为什么人会有利他的动机。答案在于种群的竞争和演化。设想远古两个邻近的部落,第一个部落里面的所有人都很自私,另一个部落里面有些人愿意为大家冒风险和做事,第二个部落的合作能力和战斗力就会比第一个强,两个部落发生战争时第二个部落就会把第一个部落消灭了。那些“纯自私”的人的基因就无法遗传下来,而获胜存活下来的基因中就会有利他成分。就像我们在日常生活中看到的一样,一个社群中愿意牺牲自己的利益为大家服务的人虽然总是极少数但永远存在。开源社区其实是同一个道理,在里面免费干活不断改进软件的人也是少数,所以许多开源社区都是一路艰难。但是对于那些逐渐成为重要基础设施的开源软件,例如互联网协议、操作系统Linux等,就会有更多的人来关心和付出。例如许多商业公司使用了这些开源软件,一旦公司做大,这些公司就非常关心这些开源软件的改进、更新和安全。这些公司就会出钱出力。还有一些用户也会捐献,许多常年依赖维基百科学习和检索的读者,因为希望这个工具越来越有用,就会定期捐款支持。笔者已经不能想象离开维基百科这样的工具该怎么工作和生活。但以上这些因素仍然没能彻底解决开源社区“搭便车”的问题。这和我们在一个社群社区的情况完全相同,总有人会“搭便车”。区块链技术的出现也许能彻底解决这个问题,这又是一个很长的话题。笔者也许会在下一本关于区块链对社会的冲击的书中详述。
所以有了开源的编程框架以后,大量的AI应用开发公司就可以使用现成的程序库而不必从头开始。这就大大降低了AI应用的技术门槛。一个不懂机器学习的有经验的软件工程师,可以用一个月时间在网上学一门机器学习的基础课程,再花一周时间就可以掌握像谷歌的TensorFlow这样的编程框架。所以今天融资的新创技术型公司都可以说自己是“AI公司”。如果这些公司的技术都使用开源编程框架,它们的技术差别就很小。因此这些公司比拼的是对某个行业的理解和在该行业的营销能力,以及对该行业数据的占先和占有程度。有AI技术实力的公司通常不完全依赖开源的编程框架,而是自己开发很多自己专用的底层程序库,甚至有自己的编程框架。
在AI的开源运动中,除了各大学和各大技术公司的开源编程框架,还有一些纯粹的公益组织。其中最著名的就是由“钢铁侠”马斯克和迄今最成功的孵化器之一YCombinator的创始人山姆·艾特曼(SamAtman)创建的OpenAI。创办OpenAI的动机有两个:一是不能让大公司控制人类未来最重要的技术之一。这一点和当年乔布斯、盖茨发起个人电脑革命时的驱动力相同:不能让IBM这样的大公司垄断计算机技术。二是现在就开始警惕AI对人类社会的潜在威胁(我们将在第七章专门讨论此问题)。OpenAI的使命是“AI民主化”。意思是要让更多的人掌握AI技术,让更多的人受惠于AI。也有人反驳说让每个人都掌握一种威力无比强大的技术是否使人类更安全?应该说对AI的担心是明确的,但如何使AI更安全的路径是模糊的。但这就是那些创业家的性格,只要大方向对了就先干起来再说。OpenAI的最大挑战是如何吸引第一流的人才。在硅谷,顶级的AI人才的工资、奖金、期权加起来每年可达数百万美元,而OpenAI作为一家非营利性机构,只能给出一般的市场价(例如每年20万~30万美元)。即使如此,也曾经吸引了重量级的AI大神,例如发明了生成对抗网络的岩·古德菲勒(IanGoodfellow)等人。OpenAI的主要研究工作集中在通用人工智能,使用开源社区的方法吸引全世界的AI人才来贡献。OpenAI是否能够最终成为AI生态中的一支重要力量,还要看他们的研究结果是否能被广泛应用,要看这些为理想而来的年轻人能否禁得住市场以10倍以上的待遇把他们挖走。
乱世枭雄
今天的AI就像20年前的互联网,是兵家必争之地。几乎所有的大公司都在争夺高地。其中最有代表性的就是世界上几大科技和互联网巨头:谷歌、Facebook、亚马逊、微软、IBM、百度、阿里巴巴、腾讯等。这些巨头可以分为三类:第一类是掌握大量用户数据的互联网公司;第二类是微软和IBM这样的技术公司;第三类是华为、小米等这类缺乏数据,但有应用场景,又希望通过AI提升自身产品的公司。第一类公司首先在自己的数据上全面使用AI技术,例如图片搜索、用户行为预测、智能推荐等。第二类公司则希望打造AI云计算让客户使用。第三类公司积极和前两者进行合作,或快速将它们的AI开源能力运用到自身的产品中。
在互联网公司中,技术驱动型的公司例如谷歌和百度都是在AI战略上最激进的公司。谷歌放弃了“移动第一”的战略,提出“AI第一”的新战略。百度也宣称自己是一家AI公司,要全力以赴投入AI(allinAI)。谷歌和百度除了在自己的数据优势上全面使用AI以外,也四面出击,企图进入自己不占有数据优势的垂直行业,例如自动驾驶和医疗健康行业。中美的搜索公司在进入垂直行业上比社交网络和电子商务公司更激进的另外一个原因是搜索公司的用户数据比社交和商务的用户数据“浅”,挖掘的价值没有社交和商务用户高。
这些互联网和科技巨头都在云计算方向上激烈竞争,每家都希望自己的AI云计算占有最大的市场份额,亚马逊、谷歌、百度、IBM、腾讯等都在其云计算平台推出了计算机视觉、语音识别、自然语言处理、翻译等能力。谷歌传统的云计算市场份额远不如亚马逊,但AI为其提供了一个翻身的机会。谷歌开发自己的TPU,除了降低成本以外,更重要的是TPU能够对TensorFlow编程框架下的计算提供更快的计算。相对于亚马逊的云服务AWS等竞争对手,谷歌不仅可以提供成本更低、拥有更强AI能力的云计算服务,还可以进一步吸引更多的人使用谷歌的编程框架TensorFlow。这样TensorFlow和谷歌的云计算服务的绑定就越紧密,TensorFlow和基于TPU的云计算就形成了正循环。目前TensorFlow的SDK(开发工具包)在全球有1000万次下载,遍布180个国家和地区。同时谷歌云AI团队正在快速降低AI技术上的门槛。2018年初,谷歌发布全新的“自动机器学习云”(CloudAutoML),不会用谷歌编程框架或任何编程框架的人也可以创建机器学习模型,用户只需上传数据便能自动创建机器学习模型,包括训练和调试。目前已经有上万家企业使用谷歌的自动机器学习云服务。
伴随着魂导科技的进步,斗罗大陆上的人类征服了海洋,又发现了两块大陆。魂兽也随着人类魂师的猎杀走向灭亡,沉睡无数年的魂兽之王在星斗大森林最后的净土苏醒,它要...
送葬上山,我却被装在棺材里活活给埋了,随之整个村子三百多口人一夜之间全都消失了,只有晚上这里才人声鼎沸。我从棺材里爬出来,才发现新书期间,一天二更。...
火影世界,一灵魂带着系统穿越而来成为自来也,精彩不断,满世界到游历,且看豪杰自来也一生传奇!!...
纳尼?大婚当天,他堂堂一个王爷就被人讹上了,不仅要帮人家养儿子,还要履行丈夫职责?!不行,我不同意。某男抗议。抗议无效。某女叉腰道。命你亥时之前洗刷干净,候着!神啊!又要侍寝?能不能装死?嘤嘤嘤...
每逢莫少结婚,苏与言必定出现砸场子!第七次!这是莫邵谦第七次结婚了!苏与言,你想说什么?莫公子,恭喜您又被渣了。...