人工智能的方向在何方?
最近几年深度学习的流行,大家一般认为是从2012年AlexNet在图像识别领域的成功作为一个里程碑。AlexNet提升了整个业界对机器学习的接受程度:以前很多机器学习算法都处在“差不多能做demo”的程度,但是AlexNet的效果跨过了很多应用的门槛,造成了应用领域井喷式的兴趣。
当然,任何事情都不是一蹴而就的,在2012年以前,很多成功的因素已经开始逐渐显现:2009年的ImageNet数据库奠定了大量标注数据的基础;2010年开始,IDSIA的Dan Ciresan首次用GPGPU进行物体识别;2011年,北京的ICDAR大会上,神经网络在中文离线识别上大放异彩。就算是AlexNet中用到的ReLU层,早在2001年神经科学的文献中就有提及过。所以,一定程度上说,神经网络的成功也是一个水到渠成的过程。2012年以后的事情,大家可以读到很多,这里就不再赘述。
深度学习的成功与局限
在看待神经网络成功的同时,我们也要进一步深挖其背后的理论背景和工程背景,为什么神经网络和深度学习在几十年前失败,但是现在却成功了?它成功的原因是什么?而它的局限又在什么地方?我们这里只能片面地说几个重点:成功的原因,一点是大数据,一点是高性能计算。局限的原因,一点是结构化的理解,一点是小数据上的有效学习算法。
大量的数据,比如说移动互联网的兴起,以及AWS这样低成本获得标注数据的平台,使机器学习算法得以打破数据的限制;由于GPGPU等高性能运算的兴起,又使得我们能够在可以控制的时间内(以天为单位甚至更短)进行exaflop级别的计算,从而使得训练复杂网络变得可能。要注意的是,高性能计算并不仅限于GPU,在CPU上的大量向量化计算,分布式计算中的MPI抽象,这些都和60年代就开始兴起的HPC领域的研究成果密不可分。
但是,我们也要看到深度学习的局限性。今天,很多深度学习的算法还只是在感知这个层面上形成了突破,可以从语音、图像,这些非结构化的数据中进行识别的工作。在面对更加结构化的问题的时候,简单地套用深度学习算法可能并不能达到很好的效果。有的同学可能会问为什么AlphaGo和Starcraft这样的算法可以成功,一方面,深度学习解决了感知的问题,另一方面,我们也要看到还有很多传统的非深度学习算法,比如说Q-learning和其他增强学习的算法,一起支撑起了整个系统。而且,在数据量非常小的时候,深度学习的复杂网络往往无法取得很好的效果,但是很多领域,特别是类似医疗这样的领域,数据是非常难获得的,这可能是接下去的一个很有意义的科研方向。
接下去,深度学习或者更广泛地说,AI这个方向会怎么走?我个人的感觉,虽然大家前几年一直关注AI框架,但是近年来框架的同质化说明了它不再是一个需要花大精力解决的问题,TensorFlow这样的框架在工业界的广泛应用,以及各种框架利用Python在建模领域的优秀表现,已经可以帮助我们解决很多以前需要自己编程实现的问题,因此,作为AI工程师,我们应该跳出框架的桎梏,往更广泛的领域寻找价值。
向上的挑战
往上走,我们会遇到产品和科研的很多新挑战,比如说:
传统的深度学习应用,比如说语音、图像等等,应该如何输出产品和价值?比如说,计算机视觉现在基本还是停留在安防这个层面上,如何深入到医疗、传统工业,甚至社会关爱(如何帮助盲人看见这个世界)这些领域?这不仅需要技术的思考,还需要产品的思考。
除了语音和图像之外,如何解决更多问题?在阿里和很多互联网企业中有一个“沉默的大多数”的应用,就是推荐系统:它常常占据了超过80%甚至90%的机器学习算力,如何将深度学习和传统推荐系统进一步整合,如何寻找新的模型,如何对搜索和推荐的效果建模,这些可能没有像语音和图像那么为人所知,却是公司不可缺少的技能。
即使在科研方向,我们的挑战也刚刚开始:Berkeley的教授Jitendra Malik曾经说:“我们以前是手工调算法,现在是手工调网络架构,如果囿于这种模式,那人工智能无法进步”。如何走出手工调参的老路,用智能提升智能,是个非常有意思的问题。最开始的AutoML系统依然停留在用大量算力暴力搜索模型结构的层面上,但是现在各种更高效的AutoML技术开始产生,这是值得关注的。
向下的机会
往下走,我们会发现传统的系统、体系结构等知识,计算机软件工程的实践,会给AI带来很多新的机会,比如说:
传统的AI框架都是手写高性能代码,但是模型如此多变,新的硬件平台层出不穷,我们应该如何进一步提升软件效率?我们已经看到有通过编译器技术和传统的人工智能搜索方法来反过来优化AI框架,比如Google的XLA和华盛顿大学的TVM,这些项目虽然处于早期,但是已经展现出它们的潜力。
平台如何提升整合能力?在开源领域,大家的做法是一个人,一台机器,几个GPU,训练比较学院派的模型。但是在大规模应用中,我们的数据量非常大,模型非常复杂,集群还会出现各种调度的挑战(能不能一下子就要求256个GPU?计算资源是否可以弹性调度?),这些对于我们自己的机器学习平台,以及云上向客户提供的服务,都提出了非常多的挑战。
如何进行软硬件的协同设计?在深度学习的计算模式开始逐渐固化的时候(比如说CNN),新硬件和特殊硬件(比如ASIC)的优势就开始体现出来了。如何实现软硬件的协同设计,防止“硬件出来了,不知道怎么写程序”或者“模型已经变了,硬件一出来就过时了”这样的问题,会是将来几年中很大的方向。
人工智能是一个日新月异的领域,我们有一个笑话是这样说的:2012年的科研成果,现在说起来都已经是上古时代的故事了。快速的迭代带来的大量机遇和挑战是非常令人兴奋的,无论是有经验的研究者还是新学AI的工程师,在当今云化、智能化的年代,如果能快速学习并刷新算法和工程的各种挑战,就可以通过算法创新引领并且赋能社会各个领域。这方面,人工智能领域开源开放的各种代码,科研文章和平台给大家创造了比以前更容易的入门门槛,机遇都掌握在我们自己手中。