从神话到落地——AI工程化浅谈

描述

神话的诞生

记得几年前流行一本书,《人类简史》。此书风行之后还有一些类似的《智能简史》之类。   在AlphaGo出现之前,《人类简史》的作者尤瓦尔·赫拉利对人工智能的态度还是比较客观和保守的,对奇点的探讨也不是很绝对。但在李世石惨败后,作者的观点则出现了较大的转变。《人类简史》的末尾,在人类社会的发展进程中,从最开始的动物到神的出现,最后催生出有关神话的想象和信仰,而这个神话的中心点就是AI。   李世石和DeepMind研发的AlphaGo进行的人机大战,每一盘直播我都几乎是屏住呼吸在看。围棋上手的每一步,都会给对手带来巨大的心理压力,而AlphaGo的棋一直让人喘不过气来。直到第四盘李世石的78神之一手——看到这步棋之后,我几乎哽咽,两眼从湿润到流泪。  

李世石VSAlphaGo第四盘白78手

DeepMind创始人握着李世石的手说,AlphaGo的胜利是人类自身的进步,而不是机器对人类的胜利。在当时的爱好者群里,我提出一个建议:马上更换25路棋盘再战。这个策略是出于对AI仍旧是一种统计程序的考虑,我估计它还不能从19x19中发现通用规律并移植到更大的盘面上去。  

李世石对战AlphaGo  也有人认为盘面越大人类越不行。但在LeelaZero出现后,我曾跟Leela多次对弈,结果是19路完败,25路完胜。在更大盘上面,AI完全没有基本的围棋常识,这一定出乎很多人的意料。   虽然口头上还在探讨围棋AI的弱点,但作为一个从90年代就开始编程的程序员,在那一刻,我真实感受到的是时代的巨变。我觉得自己必须马上行动,马上跟上时代的脚步,才能避免被无形的巨轮碾压在尘埃中。   在此之前,我一直在做编码解码器优化、内容分享这一类工作。看完这几盘棋后,我暂停了所有的手头开发方向,安装了Python,下载了DeepMind论文的相关开源代码,开始学习AI。后来又选择了超分辨率这个方向来作为突破口,到今天纵向发展到推理引擎深度优化,横向关联到NPU加速的编码解码器等等。   尤瓦尔·赫拉利有一个很有名的观点,那就是神话在人类社会发展过程中起到的最重要作用。在有语言通信工具的情况下,十几个人的小团队能够运作得很好,智人和尼安德特人的团队合作都达到了这个程度。但是当智人和尼安德特人在欧亚大陆相遇的时候,智人还有更强的工具,那就是gossip,我们理解为八卦,意思是通过篝火和睡眠前的八卦,智人的沟通更有效率,能够保证比较稳定的更大规模上的团队合作。因此智人最终取代了尼安德特人。  

《人类简史》作者尤瓦尔·赫拉利  后来人类团体变得更大了,达到了几百数千人,这个时候八卦也出现了问题,因为更大的团队也更容易产生分裂。于是,神话就适时地出现了。神话也就是宗教,氏族首领代表神来进行治理。国家形态出现了,而且这种统治形态可以长时间保持。人类的科学技术、文化文明等等,都得益于超大规模的团队合作,也就是国家和政治。   神话并不属于科学技术,而是一种社会意识形态,但是神话对于人类社会的发展、科学技术的飞跃都是不可或缺的。超级AI,奇点理论,其实就是一种神话。   无论是DeepMind的哈撒斯比,还是BAT的普通程序员,都知道自己正在开发的AI,和超级AI扯不上一点关系。奇点究竟是怎么回事,在OKR的压力下也没有几个人去关心。但是开发AI的人,总是有一种使命感,总觉得自己不仅仅是写一些模块算法或者拿一点工资,自己每天在干的事情属于一个无比宏伟的蓝图的一部分,自己和成千上万的开发者一同在书写一部史诗。这就是我们心中的神话。   在神话的鼓舞下,我这样的老程序员,每天都在学习新的算法新的技能,不断转换赛道开疆拓土。更有无数的年轻程序员,抱着一种创造神话的激情和理念,突破了一个又一个的技术难点,把AI算法推向千千万万的用户。我们看到了新的亿级别VV应用的快速崛起,也见证了一批不思进取老牌APP的迅速消失。  

为什么说我们现在的AI不是超级AI

从事AI开发的人都知道,现在的AI还没有自主学习的能力。算法都是工程师设定好的,AI只是在执行一种程序。与其说是AI在学习,不如说是算法工程师在学习更合适。和基本的傅里叶变换、拉普拉斯草帽算子、线性方程组一样,现在的深度学习也只是一种统计算法,是一种从数据中寻找规律的计算机程序。   那么将来是不是有这种可能:AI会发展到自主学习、自行修改算法、自行进化的程度?这是对未来的一种预测。因为是预测,所以很难是准确的。   对过去历史上发生过的事件进行总结,总有人可以做的很到位。但是有没有人能够预测新冠肺炎的爆发?有没有人能预测到双色球开奖号码?有些理论说世界本质上是模拟和随机的,没有能够长期成立的预测。  首先,AI的发展是不是可以按照指数形式无限制暴涨?要知道,硅芯片从20年前到达4G主频之后,CPU的计算能力增长开始减缓,改进形式变成了多核心,GPGPU,NPU,FPGA,这是因为物理规律的限制。   爱因斯坦的广义相对论已有百年历史,至今再无突破性的理论出现,科学家们还在茫茫宇宙中寻找相对论的一些证据,这是人类智能的限制。   人们都说外星文明几乎是必然的,但是人类如何走出太阳系都是一个问题,这是空间和时间的限制。  其次,从目前的状态来说,超级AI还很远。超级AI的神话总是和永生,和人造生命一同绑定。某种意义上来说这是同一个问题。我们目前面临的冠状病毒、艾滋病、癌症、衰老,仍旧是没有解决的问题,长生不老还只是一个神话。无论你多么成功,或者富可敌国,该死还得死。更别提还有全球性变暖、生态灾难、小行星撞击等种种不可预测的事件。  第三,对AI未来的预测,实际上是对人类自身甚至地球共同体未来命运的预测。每个人,每个生命都参与其中。那么这个事件的发展就不是一个可以被独立观察的孤立系统。由于每个人都可能有意无意地影响事件的走向,那么这个系统的演化很大程度上就带有主观色彩,至少不是完全客观的。   两种极端情况:第一种,我手中握着一只小强,让你来预测生死。你说“活”,我捏死它,你说“死”,我放开它;第二种,我预测自己明天早上吃个汉堡。那我完全可以强行让这个预测成立。实际上在具体项目开发中,往往存在这种情况,决定工程最终走向的,往往是最有实力的程序员,而这个走向跟大家最初的判断往往差别很大。   并不是说这个“最强程序员”的走向一定是最合理的,而是因为只有他能填平大坑让算法走向实用。大家预测AI的未来和规律也是类似的,这种预测往往会改变被预测过程的走向。如果人类意识到不加限制的超级AI会带来威胁,那么超级AI从开发到使用就必然受到一系列限制,超级AI仍旧只会是一种工具,不会发展出无限智力。   因此,实际上目前的AI并不是影视文学作品中的那种超级AI,也不是很多人心中神话了的AI。目前不是,甚至20年、30年之后也差得很远。  

那么目前的AI究竟是个什么状态,短期的发展会如何?

程序员

AI落地三要素:算法、芯片、工程

算法层面上,主要是要证明该算法的有效性。在算力能够保证的前提下,深度算法一般能提供传统算法不具备的一些特征。但这并不是说你只要说明自己是深度算法,市场和客户就会买账。   比如用户往往希望超分辨率、HDR、降噪等技术,能够把一些质量较差的视频做出很明显的改善。但算法并不是仙丹妙药,只能在满足工作区间的条件下,起一部分作用。所以我们要有比较清醒的认识,主观意愿和客观算法能力上肯定是不匹配的。  在芯片层面,主要是因为深度学习需要很大的计算能力,这个能力是传统CPU不具备的。通用计算的GPU在模型训练上是比较有优势的,但和专有的加速芯片(TPU,NPU)比起来,单位芯片面积算力产出和功耗上,效率是比较低的。  如果前两个问题解决的话,算法最终落地到APP用户层面,是依靠工程开发来实现的。并不是说算法的算力需求和芯片的理论能力能够匹配了,实际运行效果就一定满意。这个问题在移动平台上非常突出。手机是依靠电池供电的,电力非常有限,同时散热空间也很小。这两个特点使得在手机上应用深度算法难度陡然加大。比较大的网络即使在NPU上运行也是很慢的,常规的暴力裁剪缩小网络,往往使得算法失效,或者出现大量badcase.  

AI 能落地的几个条件:

1) 工作区间内没有明显的badcase。  这个原因显而易见,自然界生物里面,老弱病残是第一个被淘汰的。先天残疾的幼儿很难存活,产生癌症的变异不能通过自然选择。一个算法有badcase的话,就得有很多弥补措施,这些措施的代价可能超过了算法本身的收益。这就如同用钱买了房子,坐等房子升值就可以发财,至少是不亏;而如果投资做买卖的话,费了很大力气折腾半天反而赔了。  2) 相对于其他算法选择,要有明显的收益。如果相对于别的算法,投入过大而收益更小,那么很明显的应该放弃当前的思路。 3) 对于现阶段的硬件芯片和软件驱动来说,算法可以高效运行。  比如一些深度算法,4k超分辨率叠加HDR、超帧率等,在服务器硬件加速下,性能满足需要。即使不能实时运行,也不至于等待太长时间,这是可行的。但是这样的算法放到移动平台上,有耗电限制,芯片都是低功耗低性能类型,显然落地的困难就非常大。  

目前比较成功的落地算法

我们所了解的深度算法发展里程中,有两个影响比较大的事件。第一个是人像识别,深度算法超越了传统的统计特征分析。第二个就是本文提及的围棋AI程序AlphaGo, 后续当然还有Master、zero等等。另外,在语音识别上也是类似。接近十年的时间过去了,目前图像识别和语音识别还是最成熟的应用。从识别到内容生成,这一步还在继续进化之中。   视频画质类算法,典型的包括HDR、超分辨率和超帧率。这类算法在非实时性约束的场景下已经有很多应用例子。其中一个难题是,非实时约束就必须使用视频编码器,编码后的视频质量损失是比较大的。极端的例子是,一个720P的视频,如果先解码为单帧图像序列,然后做超分辨率到4k,然后再编码为4k高清视频来播放。   这时候我们会发现,虽然超分辨率带来了一定的画质改善,但是编码过程带来的画质损失更大。   结果是,直接播放720P视频反而比播放超分4k编码的视频效果更好。超分等算法放到端上实时运行,能避免这个问题,还能节省传输码率。但是对于算法的实时性要求,使得芯片的计算压力和算法工程的优化压力,又变得极大。  

程序员

我们看到短时间内会解决的应用:

在4k分辨率下,几个典型视频画质类算法目前三元素的状态:

程序员

我们看到,芯片的计算能力实际上是达到了。考虑到功耗的因素,算法和工程的优化还需要做一个2-3倍的改善。   但实际上无论从算法上还是工程实现上,优化的空间还是非常巨大的。我相信再过一段时间,出现20-30倍的效率提升是很正常的事情。   以AI辅助编码为例,有人做过一个试验,用AVX512指令集,用下山法暴力计算,实现了视频编码的运动估计模块。在小运动向量场景下,1080分辨率的运动搜索,每个像素代价大概是2个指令周期。这意味着3G主频的CPU,单线程ME性能达到了1000FPS左右。    

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分