【51CTO.com原创稿件】
人工智能是由约翰·麦卡锡在 1956 年的达特矛斯会议上提出的:人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样。本文将为大家讲解人工智能的发展阶段和创业公司如何打造 AI 技术团队。
人工智能过渡到高层智能的3阶段
目前,人工智能正从比较初级的计算智能向更高层次的智能过渡。更高层次的智能包括 3 个阶段,第一个阶段是感知(perception)智能,机器要听得见、看得见。听得见是我们常说的语音识别,机器把人说的一句话,由声音信号转化成文字信息。 然后,就是视觉,计算机视觉(computer vision),它能够看到东西,能够分辨一些人脸,或者是物体,甚至一些情绪之类的变化。 通过感知阶段后,人工智能进入下一个认知(cognition)阶段。机器开始能够理解一些内容。比如说语音识别,机器只是识别出了这个文字,但它不能真正知道人要表达什么信息。这里涉及对自然语言理解。对于机器来说,这是非常困难的一件事情。 认知阶段的另一个方向是分析判断,机器根据当前的情况去做一些主动的判断。比如棋局对弈,计算机本身不知道自己是在下棋,但是操作员定义好规则之后,通过几个超级大的深度神经网络,它能够做出最优的判断。 只有当人工智能在认知上获得了突破性的进步之后,才可能谈到下一个阶段:创造(creation),这时计算机开始具有情感,能够有自主意识,能够自己创造新的东西。这个阶段离我们还非常遥远,大家也不用太担心计算机会毁灭人类的说法。 人工智能的大事件和稳步发展 在 1997 年,IBM 深蓝战胜了国际象棋的人类世界冠军,这是AI发展史上比较有标志性的一件事情。但是国际象棋相对围棋来说,还是简单很多,很久以来大家都不相信计算机能够解决围棋这个问题。 到 2011 年的时候,也是 IBM 在 Watson 在 jeopardy 的比赛中,计算机战胜了人类。它在语言的一些理解和大规模查询方面,体现出来计算机的优势。 2016 年,AlphaGo 击败围棋世界冠军之后,大家发现深度学习还有人工智能确实能解决很多、特别是确定性的问题。 最近几年,人工智能有了长足的进步,主要是受 Geoffrey Hinton 的影响。他是最早提出神经网络的三个人之一,他一直坚持不懈地做深度神经网络方面的工作。 一直到五年前,他发现计算能力足够强了,因为有了 GPU,并且 GPU 在不同的机器上可以构成一个集群,计算能力比十几年前翻了百倍以上。以前解决不了的问题,现在都可以解决了,以前训练不了的模型现在都能训练了。 第二个方面就是有了海量的数据,更多体现在像 Google、Facebook 这样的大公司,他们有大量的用户数据。现在,使用大量的数据,即使采用一些非常简单的模型,也可以获得非常好的效果。也就是说数据往往比算法更有效。 在深度学习提出之后,首先是在语音识别领域获得了突破,准确率相对提高了百分之三四十,图像识别和机器翻译方面也获得了很大的提高。 关于深度学习,我们认为它很好的一个方面就是简单实用。像我们做语音识别,最开始用到高斯混合模型及区分性训练算法,非常复杂。但是有了深度学习之后,相对来说更简单了,你只需要把数据准备好,有一个足够大的模型,把数据放进去,就可以训练一个很好的系统直接使用了。这可能也是深度学习的一个优势吧! 另外一个方面,因为深度学习可以在 GPU 集群上计算,所以你也不需要买大量的机器,就能够完成大规模的训练。这也是为什么很多创业公司,也能够训练出比较大的模型及高性能的系统。 创业公司如何搭建AI系统 上面讨论了什么是 AI,接下来我们谈谈作为一个创业公司,在资源非常有限的情况下,怎么去搭建一个高效的 AI 系统。AI 系统主要可以分为数据、算法和工程这 3 个部分。如果用人来打比方,数据相当于是他的血液,算法是他的大脑,工程是他的骨骼。 没有数据的话,算法只能是停留在课本里面。只有数据和算法这两者结合起来,才能真正成为一个产品的雏形。如果缺少强有力的工程,那产品永远走不出实验室,只能处于演示的阶段。所以这三者要非常紧密地结合在一起,才能够做一个真正有用的人工智能的系统和产品。 当你的产品做得还不错的时候,系统将会获得更多用户的数据,把这个数据再用过来反哺系统,这样可以形成一个正循环,不断地提高这个系统的性能。人工智能产品跟别的产品可能不太一样;别的产品一般做出来之后,功能做成了基本上就完成了,但是人工智能系统是一个不断迭代,不断优化的一个系统。 关于数据,怎么去获得数据? 作为一个小的创业公司,特别是刚开始的时候,没有数据,公司怎么去获得第一批数据?其实有各种各样的办法,比如我们做语音识别的时候,请了一个阿姨帮我们做饭。做完饭之后,我们给她一本菜谱,让她给我们念上一个小时,然后把这个声音录下来,录了 1 个月,一天 1 个小时,一个月之后就有 30 个小时的数据了。 这些数据基本可以做一个小系统了。我们就做了一个端到端的演示系统,搭了一个服务器,然后用户可以在 APP 中,询问宫保鸡丁等等菜,系统就可以识别出来。在这个基础上,我们已经可以开始做一些工程优化、系统方面的工作。 这个事情做完之后,我们知道这条路是可行的。有了这个基本系统,接下来就可以用更多方法,自动化的数据采集方式来建立一个平台。当时 Google 的 API 开放的时候,用户可以把一批语音数据塞进去,然后系统给用户返回结果,这个结果不一定 100% 准确,但是已经有一些基本的数据可以去跑实验了。 什么样的数据有价值? 显然,真实用户的数据是价值最高的。不过,还要看公司对这个产品的定义。作为初创公司,不能做一个大而全的系统,而要更多专注在垂直领域上,做出自己的特色。比如出门问问,关注跟出行相关的一些垂直领域,涉及查询地点、酒店、餐馆、火车票、飞机票相关的信息,团队采集了大量这些领域的数据。这方面 1 个小时的数据,相当于采集 10 个小时甚至更多的通用数据。 系统需要采集多少数据? 搭建一个人工智能系统的时候,到底要采集多少数据?显然数据量是越大越好,但是因为成本有限,采集基本够用的数据就行了。这里要做一个判断,你可以画一个曲线,比如在语音识别方面,再添加 1000 小时,系统性能还能提高多少?一般系统达到一定数据量后,从数据上获得的性能提升是越来越小的。到达一个拐点的时候,同样的资源放在其他的方面,比如算法、工程方面,可能会带来更大的效果。 有效利用开源算法让你事半功倍 在学术界,算法的研究最开始是由美国国防部领导的一些项目,带来的一些学术上的突破。但是近五年到十年,基本上都是一些大公司和研究所,比如微软研究院,Google 这样的公司,因为它有大量的数据,大量的计算资源,它能够在算法和技术方面带来很大的提升。 作为一个创业公司,不希望再去重新制造轮子,所以尽量用一些开源的东西,比如语音识别用了Kaldi,还有 OpenFst、OpenGrm 这样的一些开源软件。语音合成、语义理解、深度学习这些方面基本上都是用开源的东西。因为主要还是用一些 Google 开源的软件,整个公司的工程基础、代码库还有代码规范,都是跟随 Google 的风格。 技术团队的打造经验 我们对代码质量的要求非常高,比如强调 C++ 的编码风格。Google 有可读性这样一个指标,就是说一个新人进入公司,无论之前有多么资深,假如没有通过代码可读性测试的话,新人是不能够直接把代码提交到代码库里去,他必须要获得 Readability 这样一个证明。 所谓 Readability,就是要求程序员写了一定量的代码,然后代码要提交到内部的代码委员会,他们看到他的代码之后,会提出大量的修改意见。可能该程序员写了 100 行代码,他们给他提出了 500 行的建议,这是很正常的。然后通过这样来来回回的几个迭代、循环,最后才能说这个程序员的代码能力获得了 Readability 证书。 还有,单元测试是非常必要的,特别是在一些关键的算法工程方面。短期内单元测试可能是耗费了很多时间,但是长期来说,它是非常重要的。因为写大规模的软件系统,相当于搭积木,假如有一块不是很稳定的话,那可能搭起来的房子很快就会塌掉。特别是在特定情况下,比如人员发生流动的时候,如果没有单元测试的话,新来的人再去改这个代码,就不能够保证这个代码能完成它以前的功能。 Code Review 也是非常重要的,包括我本人在内,也是花大量的时间做 Code Review 。特别是对刚来的一些同学,我们能够很快通过 Code Review 功能,让他熟悉我们的代码风格,然后让他能够写出高质量的代码。刚开始的时候,比如头一两个月的时候,可能花的时间比较多,但是他一旦进入轨道之后,工作的效率会提高很多。但是,前端团队可能不太适合做这个事情。 还有代码的提交,必须要有资深工程师的 LGTM,就是 Look Good To Me,这样才能提交。一般情况下,如果没有 LGTM 提交的代码,是不符合流程的,通常我们会找他谈话。 最后,需要一个比较高效的开发环境,就是要有一个强大稳定的 base 库。我们从比较大的开源项目中,抽出一些有用的东西放到我们 base 库里面,然后在这个基础上再添加我们自己的一些基础库。 强大稳定的 base 库是非常重要的。像 Google 的 base 库里,大家可以看到其中很多都是最一流的工程师写出来的,包括 Jeff Dean,这样才能保证基础库的稳定和高效。 人才招聘看重解决问题的能力 怎么招人?招什么样的人?大公司和小公司实际上是很不一样的,大公司希望招一个非常专业的人才,我们叫 specialist,就是说在某一个领域他能做得非常深,因为大公司不需要你一个人懂10个不同方面,只需把某一个方面做细、做透就行了。 而创业公司正好是相反的,因为他总共就那么几个人,那这个人必须把这 10 件事情要全部给做掉。我们通常希望招人能够招一个通才(generalist),就是说不需要太专,但是他的学习能力要很强,并且也愿意去接触更多的项目,这样的话,才比较适合初创公司这样快速的发展。 执行力也很重要,一定要能够按时把任务完成,当然问题挑战很多,我们希望员工最终能够主动想办法完成任务,而不要找各种各样完不成的理由。 最后一个方面就是要有好的沟通能力,跟团队的成员要能够沟通,才能够很好的合作。 小公司 CTO 要做“全能型”人才 CTO 的主要职能是什么?首先是要给公司创造价值,这肯定是最重要的。公司最重要的是什么?首先是产品,产品要质量好,能够商业化,能够赚钱,这是最重要的。CTO 更多负责技术方面,怎么把技术和产品更有机的结合在一起为公司创造更大的价值? CTO 不仅要想现在的技术怎么更好地跟产品结合在一起,也要想一些中长期的计划,就是以现有的团队和资源,要做什么样的投入才能够让产品在今后一年、两年时间内能够保持优势,保持创新,能够提高产品的竞争力。这一点非常重要,它考验 CTO 对于策略和战略的把控。 第二个任务是要搭建团队,要确定今后几年,公司要向哪个方向或技术发展。接下来,就要实现资源到位。然后,CTO 要花很多的时间去招人。CTO 不可能什么事情都能做,他一定要招到很多在某一些方面比他强的人,有了这些人后,工程技术团队才能够真正的有战斗力,能够做出一个人不可能做到的事情。 小公司在很多情况下,CTO 还扮演着救火队员这样的一个职能,就是有一些难题出现了,他要带领大家冲上去把这些困难的问题解决。 作者:雷欣 雷欣 出门问问CTO,人工智能专家
编辑:吴丛丛、孙淑娟
本文选自《CTO说》
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】