微博技术大V老师木:软件平台是深度学习计算力突破的关键
rebe0078
7年前
<p>在知乎上,“老师木的机器学习水平怎么样”的问题,被浏览了3.7万次。虽然关注者众,却不少评论他线下实际“为人低调”。</p> <p>同时有人称他是“微博大V老师木“,没错,作为一个技术人,他的微博粉丝有5.8万。老师木说这个影响力“还太小”。</p> <p>有人关心他为什么做得好好的要从微软亚洲研究院离职,更有人关心老师木为啥要创业。</p> <p>老师木,真名袁进辉。读书时成绩一直优异,本科后保送清华大学直博生,师从人工智能领域张钹院士。期间多篇论文在国际顶级会议上发表,在竞争激烈的国际技术评测(TRECVID)中连续多年名列第一。博士后出站后,于2011年入职网易有道。2012 年作为早期成员加入360搜索创业团队,一年之后,产品上线成为国内市场份额第二的搜索引擎。2013年,加入微软亚洲研究院(MSRA),主要从事大规模机器学习平台的研发工作。</p> <p>从博士后到第一次创业,是从学术研究人员转型成为工程师;进微软亚洲研究院,则又重回到了学术道路。在MSRA期间,专注于研发大规模机器学习平台,以出色的科研和工程综合能力,发明了世界上最快主题模型算法LightLDA及分布式训练系统:只用几十台服务器就能完成之前需要数千服务器才能完成的训练任务。“LightLDA 的确是迄今为止,我做出来最有影响力的工作。人常说,评价一个学者水平高低不是看成果多少,而是看他能到达的最高水平,可以说这项研究让我跻身于世界一流研究人员的行列”。</p> <p>MSRA 被称作中国IT届的黄埔军校,精英荟萃 ,并且老师木的成就也开始受到各界的认可,但是他却出人意料的放弃了MSRA的优厚工作,走上了创业的路途,更是参与到深度学习框架这种战略级产品竞争中。众所周知,很多大公司都出有自己的深度学习框架,Google的TensorFlow,微软CNTK, Amazon 的MxNet,非死book 的Caffe2等,并且都在努力的建立生态。以老师木的视角,他是如何看待这些框架?我们从深度学习技术和框架、LightLDA两大方向和老师木进行了一次深度访谈。</p> <h2>关于创业</h2> <p>InfoQ:为什么你放弃MSRA的优厚工作去创业?</p> <p><strong>老师木:</strong> 创业者一定有一个或大或小的愿景,或者说使命感,未来的世界应该是什么样的,怎么努力促使愿景实现。 <strong>我的愿景是:</strong> 人工智能技术赋能各行各业,推动人们工作效率和生活质量更高,把人类从机器擅长的工作中解放出来,让人类去做更需要创造力的事。在这种使命驱动下,首先选择做什么事最有利于这个愿景实现,其次选择做事的形式。要选能突破自我,能最大化创造价值的事和形式。</p> <p>InfoQ:怎么看待人工智能的市场潜力?</p> <p><strong>老师木:</strong> 首先,互联网行业已经充分验证了数据驱动的业务模式。其次,互联网行业之外的存量业务有显著的人工智能技术红利可吃,或者刚刚尝到人工智能技术的甜头,或者是尚未开垦的处女地,仅仅把人工智能技术引入已有业务,就能获得竞争优势,甚至带来质的飞跃。最后,人工智能技术革命会催生一些新的产业,譬如自动驾驶,精准医疗等。据此,有人认为这次由深度学习引发的大潮可能是第三次工业革命。</p> <p>InfoQ:深度学习在业界有哪些靠谱应用?</p> <p><strong>老师木:</strong> 每个高商业价值的互联网应用背后都有深度学习的身影,搜索引擎,广告,推荐引擎,用户画像,社交媒体,共享经济等等。人类智能可概括为感知,决策和控制三方面,有监督深度学习方法最先在感知类型的任务(图像视频,语音,语言的理解)中取得成功,譬如安防,医学影像,色情信息过滤,语音助手,机器翻译等都已经商用落地。强化学习在决策和控制方面也取得很多成果,主要是机器人自动控制,自动驾驶,处在快速发展中。</p> <p>InfoQ:深度学习在技术上存在什么瓶颈?最可能在哪里获得突破?</p> <p><strong>老师木:</strong> 先分别说有哪些关键问题。在算法和理论方面,目前有监督学习应用最成功,各行各业积累了大量的无标签的数据,怎么利用上无标签或弱标签的数据?深度学习在感知(Perception)类型的任务上非常成功,怎么与认知(Cognition)方法(符号推理)结合形成最终决策?在理论上如何理解深度学习这么惊人的效果,怎么在理论指导下去设计模型,而不是靠ad-hoc经验试?在计算效率方面,服务器端主要考虑扩展性,怎么能让一批高吞吐协处理器协同解决一个大型任务时总体利用率最高,在终端上则主要是考虑低功耗实现,能否同时实现易用性和高效性。在应用方面,主要是在一些高商业价值的问题上能否从技术上打通达到可用程度,AlphaGo 非常成功,但商业价值还不明确,在杀手级应用如自动驾驶,精准医疗,自动化交易等方向上取得成功,更值得期待。</p> <p>理论和算法研究上的突破通常可遇不可求,更难预测,而且是否真的突破最终也要落实到实际应用中去评判。在计算力和应用上的突破确定性更高一些。我们是瞄准了计算力这个方向的商机,一会儿可以深入探讨下这方面的问题。某些垂直应用如自动驾驶方向聚集了大量资金和人才,这方面的突破希望也很大。</p> <p>InfoQ:为什么计算力会成为深度学习的一个突破方向?</p> <p><strong>老师木:首先</strong> ,计算力是极其关键的一项支撑技术。最近发生的人工智能革命通常被认为是三驾马车驱动,数据,算法和计算力。与上世纪九十年代相比,深度学习在算法原理上并无二致,在数据和计算力方面进步更大,各行各业积累了大量的优质数据,GPU 作为新的计算手段引爆了此次深度学习的热潮。</p> <p><strong>其次</strong> ,计算力方面还有现成的红利可吃,相同的算法,如果能用上更多的数据,或者用更大规模的模型,通常能带来效果的显著提升,能不能做的更大取决于计算力的水平。</p> <p><strong>再</strong> <strong>次</strong> ,算法和原理的研究进展依赖于计算能力,好的计算力平台可以提高算法和原理研究的迭代速度,一天能实验一个新想法就比一星期才能实验一个新想法快的多。有些理论问题本身是一个大规模计算问题,譬如神经网络结构的自动学习等价于在一个超大规模假设空间的搜索问题,没有强大计算力的支持就只能停留在玩具数据上。深度学习是受生物神经网络启发而设计出来的,现在人工神经网络的规模还远远小于人脑神经网络的规模,人脑有上千亿神经元细胞,每个神经元平均有成千上万的连接。</p> <p><strong>最后</strong> ,如何在低功耗约束下完成高通量的计算也是制约了深度学习在更多终端上应用的一大因素。</p> <p>InfoQ:计算力具有什么样的商业价值?</p> <p><strong>老师木:</strong> 一方面,计算力的商业价值体现在它是数据驱动型公司的大部头营业支出(硬件采购,人力成本等)。数据驱动型业务的完整链条包括数据收集,预处理,深度分析和在线预测,无论是私有部署还是上公有云,建设高扩展性的基础设施等支撑技术,都是一笔不可忽视的开销。另一方面,计算力也是数据驱动型公司获得竞争优势的关键,人工智能可提高公司业务效率,而计算力又可提高人工智能的效率。目前,围绕着计算力已经出现了诸多成功的商业模式,譬如公有云,面向私有部署的商业技术服务,深度学习加速器(GPU,DPU)等。</p> <p>InfoQ:计算力在技术上有哪些瓶颈?</p> <p><strong>老师木:</strong> 从硬件看,我们现在使用的都是冯诺依曼结构的计算机,它的主要特点是计算单元和存储单元分离,主要瓶颈表现在摩尔定律(Moore’s law)的失效和内存墙(Memory wall)问题上。克服摩尔定律的主要途径是增加中央处理器上集成的核心(core)数量,从单核,多核发展到现在众核架构(GPU, Intel Xeon Phi),但芯片的面积及功耗限制了人们不可能在一个处理器上集成无穷无尽个核心。内存墙的问题是指内存性能的提升速度还赶不上CPU性能的提升速度,访存带宽常常限制了CPU性能的发挥。纯从硬件角度解决这些瓶颈问题,一方面要靠硬件制造工艺本身的发展,另一方面可能要靠新型的计算机体系结构来解决,譬如计算和存储一体化的非冯诺依曼结构计算机。除了高通量的计算,在电池技术没有大的突破的前提下,终端应用场景(物联网,边缘计算)里低功耗也是计算力的一项重要指标。当前,深度学习专用硬件创业如火如荼,有可能会被忽视的一点是: <strong>对突破计算力瓶颈,软件至少和硬件一样关键。</strong></p> <p>InfoQ:为什么软件会成为计算力突破的关键?</p> <p><strong>老师木:</strong> 计算力的基础设施要满足上层用户对易用性,高效率,扩展性的综合需求,仅有硬件是不够的。一方面,数据科学家和算法研究员不像系统研发工程师那样深刻立刻硬件的工作机理,不擅长开发释放硬件计算潜能的软件,对数据科学家最友好的界面是声明式编程,他们只需要告诉计算力平台他们想做什么,具体怎样算的快要由软件工具链来解决。另一方面,尽管单个众核架构的协处理设备(如GPU)吞吐率已远超CPU,但出于芯片面积/功耗等物理限制,任何一个单独的设备都无法足够大到处理工业级规模的数据和模型,仍需由多个高速互联的设备协同才能完成大规模任务。出于灵活性需求,设备之间的依赖必定由软件定义和管理,软件怎样协调硬件才能提高硬件利用率和释放硬件潜能极具挑战,至关重要。在相关领域,软件定义硬件已是大势所趋:上层软件决定底层硬件的发展方向,底层硬件要取得成功离不开完善的上层软件生态。</p> <p>InfoQ:业界已经有很多软件平台,为什么要再打造一个?</p> <p><strong>老师木</strong> <strong>:用户选择众多,但仍有重要需求未被满足,深度学习框架技术演化仍未收敛。</strong> <strong>深度学习框架一定会出现Hadoop那样具有市场支配地位的产品,也就是所谓的事实工业标准,而现在还没有任何一个软件平台达到这种地位。</strong> 工业标准级的平台不仅要解决眼前的需求,更要面向未来。现在的确有一些知名的软件平台,但业界还有相当一部分重要需求没有被满足。比如,现有技术方案对于单设备或多设备数据并行这种简单场景的支持已经非常优秀,但在模型更大或者神经网络拓扑更复杂时,通用框架的易用性和效率都大打折扣,有这种需求的工业级应用只好去用定制的HPC方案(譬如百度的DeepSpeech)。问题的根源是,设备之间互联带宽远低于设备内访存带宽,这是和传统CPU 上内存墙(Memory Wall)类似的难题。我们团队经过艰苦卓绝的努力,探索一条走向通用解决方案的技术路径。沿这个思路开发的软件平台,有望既享受软件的灵活和便利,又享有专用硬件的高效性。 <strong>我们坚信,通用的解决方案是</strong> <strong>深度学习平台</strong> <strong>技术收敛的方向,只有</strong> <strong>这种</strong> <strong>通用的解决方案才</strong> <strong>是深度学习平台的最终形态</strong> <strong>。</strong></p> <p>InfoQ:能说说你们产品的主要技术特点是什么吗?</p> <p><strong>老师木:</strong> 深度神经网络和人脑信息处理本质数据流计算,信号的传播即计算,然而当前主流的底层硬件都是冯诺依曼结构。纯硬件实现的数据流计算机还不现实,现在必须依赖深度学习软件平台来完成这样一个翻译或者映射的过程:从数据流表达到冯诺依曼结构上的指令序列。 <strong>软件平台最终价值体现在易用性和高效性。</strong> 易用性,要支持用户能够使用最自然的表达方式来描述各种神经网络计算的需求;高效性,对所支持的任何一种上层需求,都能基于通用硬件资源表现出专用硬件的那种效率。我们的产品开创了一种和现有深度学习框架截然不同的技术路线,细节上表现出来静态编译,全链路异步,去中心化,流式计算等特点,我们认为这是深度学习基础架构实现易用和高效的必由之路,是深度学习框架技术收敛的方向。</p> <p>InfoQ:长江后浪推前浪,这样一个先进的技术架构生命力会有多久?</p> <p><strong>老师木:</strong> 首先,我们可以探讨一下深度学习的范式还有多久生命力,毕竟技术架构应需求而生。可以从这几方面看:从数据流计算模型是生物体采用的信息处理机制,是人工智能的效仿对象;人工神经网络已经在多个领域取得成功,而且深度学习本质上还是统计学习理论,利用算法在数据种挖掘统计规律性,这种学习机制的本质不会变化;深度学习算法便于利用并行硬件的威力,算法和硬件的天作之合,还看不出取代它的必要。其次,从计算机体系结构及硬件演化方向上看,软硬件结合的数据流计算机代表着突破摩尔定律和内存墙限制的方向。</p> <p>InfoQ:是不是只有大公司才需要这样的基础设施?</p> <p><strong>老师木:</strong> 并不是。目力所及,这样的基础设施已经不是大公司的独享的专利,拥有数十台服务器的中小企业,大学研究院所比比皆是。数据驱动是一种先进的生产力,所有行业最终都会变成数据驱动,每个行业的每个公司的数据都在积累,每个公司对数据分析的需求都在进化,从浅层的分析到深度分析,这个大趋势呼之欲出不可逆转。十年前,会有多少公司需要Hadoop,现今几乎所有的公司都要用到Hadoop。历史一再证明,无论计算能力发展到多强大,应用总能把它用满。多年以前,有人还觉得640K内存对于任何人来说都足够了,今天64G的内存都开始捉襟见肘,一辆自动驾驶测试车每天收集的数据达数TB之多。从来不是强大的计算力有没有用的问题,而是计算力够不够用的问题。</p> <p>InfoQ:深度学习框架竞争很激烈,而且看上去都是业界巨头在玩。</p> <p><strong>老师木:</strong> 是的。一个深度学习框架一旦像Hadoop那样成为事实工业标准, <strong>就占据了人工智能各种关键应用的入口</strong> ,对各类垂直应用,基于私有部署的技术服务,公有云上的AI 即服务业务,甚至底层专用硬件市场都有举足轻重的影响。它的角色就像互联网时代的浏览器,移动互联网时代的安卓操作系统一样,是战略级产品,业界巨头谁都不想让给他人也就不奇怪了。目前,大公司出品的比较知名的框架有Google的TensorFlow,微软CNTK, Amazon 的MxNet,非死book 的Caffe2, PyTorch,国内百度的PaddlePaddle等。</p> <p>InfoQ:为什么用创业的方式做这样一件事?</p> <p><strong>老师木:</strong> 这种事既有技术攻关上的挑战,也有资源组织上的挑战。这就需要科研院所那种人才密集度,又需要公司的组织支持。我既有在大公司工作的经历,也有两次创业的经历,个人理解, <strong>创业是社会资源组织和分配的一种优秀机制,能最大化这项事业的成功率</strong> 。首先,创业是社会鼓励创新和承担风险的一种资源分配形式,有潜力的创业团队能得到所需要的资源(资金和人才),同时有高度灵活的机制,在大公司,未必是最适合做这项事业的人来承担这样的项目。其次,一项充满挑战的事业需要具有聪明才智的人以持久的热情投入其中,创业公司那种公平合理的利益分配机制才能最大激发成员的主观能动性,为业界做出实质贡献的人也应该得到回报。</p> <p>InfoQ:创业公司做这样一件事看上去很不可思议。</p> <p><strong>老师木:有很多大公司加入这场竞争,说明存在真实的需求,而且市场容量足够大,看上去创业公司做这样的</strong> <strong>产品</strong> <strong>非常难,实际上大公司</strong> <strong>做也是同样地</strong> <strong>难。</strong> 深度学习框架的用户是开发者(developer),也就是常说的To developer,要把这样一件产品做成功,被业界广为采用,关键看两点:</p> <p><strong>首先</strong> ,这种深度学习框架是技术密集型产品,一定要做到最广泛的满足实际需求,而且在某些方面要有不可替代的优势,有突出的长板。</p> <p><strong>其次</strong> ,要形成生态,具有完善的社区支持,做到没有明显的短板。一个组织只要具备实现这两点目标的要素,就有机会,而不在于那是小公司,还是大公司。</p> <p>事实上,在开源软件范围竞争还是非常公平的, <strong>原来名不见经传的人开发出的软件的确好用就能火,大公司开发出的软件质量不行也没人用</strong> ,最终靠产品质量说话。现在,创业公司聚集了业界最优秀的一批人,聪明,更重要的是有野心(进取心)。当然,对创业公司来说,不仅要取得产品的成功,还要取得商业上的成功,让所有参与这项事业的人拿到现实的回报,公司自身也获得更充足的资金支持投入再生产,做出更优秀的产品。大公司在开源产品的商业化上更从容一些。 <strong>个人观点,很多大公司与你竞争不可怕,更可怕的是</strong> <strong>面对</strong> <strong>很多创业公司</strong> <strong>的</strong> <strong>竞争。</strong> 最终结果取决于产品质量。</p> <p>InfoQ:如何取得商业上的成功?只有好的技术也可能赚不了钱。</p> <p><strong>老师木:</strong> 取得商业上的成功是创业公司的最终追求,我们也一样。我的理解,这涉及两个“价值”问题。</p> <p>第一,我们在做的事是否为用户创造了价值,我坚决信奉 create value, money follows;</p> <p>第二个是回归商业价值,在为用户创造价值的前提下,我们需要探索出一条双赢的利益分配机制,把用户转化成客户。</p> <p>现阶段,我们聚焦在解决第一个问题,打造出解决用户需求和痛点的产品:深度学习平台,不贪大求全,只追求把整个链条中的那最关键一环打造到极致。这是我们这个团队在人工智能大潮中参与顶端竞争的切入点,在我们眼里是那个撬动地球的杠杆支点。从为用户创造价值这个角度切入能最大化实现商业目标的成功率,而且有可能把我们推举到比其它选项要高的多的高度。微软,谷歌,英伟达,甲骨文,华为这样伟大的公司都是因为有了创新的产品才形成了伟大的商业公司。我们对商业模式的各种选项都持open态度,不排斥和高商业价值的垂直场景结合。</p> <p>InfoQ:您们的深度学习平台第一版预计什么时候公测?需要从哪些方面准备?</p> <p><strong>老师木:</strong> 系统主体开发已经完成,目前处在内测阶段,计划年底时开源。开源之前需要从以下方面做充分准备:第一,产品功能完整性,要支持主流的深度学习模型,譬如CNN/RNN/LSTM , 支持图像,语音和语言经典应用;第二,验证高效性,在业界公认的大规模评测中表现出效率优势,给出具体技术指标,如在多大规模上跑到什么水平的加速比,设备利用率等等;第三,打磨易用性,和上下游工具,和已有深度学习框架的兼容性,以及文档建设等等。我们团队先从技术方面打好一个底子,当用户想为这个项目做贡献时,可以更容易加入进来。</p> <p>InfoQ:您们研发深度学习平台会兼容哪些芯片?支持什么操作系统,支持 Linux, Windows, Android 和IOS吗?</p> <p><strong>老师木:</strong> 目前我们聚焦在服务端的训练场景,在这种场景下,GPU是最经济的选择,所以目前只支持纯CPU或CPU+GPU的异构集群,如果未来硬件市场发生变化,我们也可以支持其它芯片。服务器上主要操作系统是Linux和Windows,所以目前只支持这两种。终端的应用场景主要是在线推理(inference),我们团队目前没有投入。</p> <h2>关于LightLDA</h2> <p>InfoQ:LightLDA是您的代表作之一么?能给大家介绍下这个项目的一些情况么?</p> <p><strong>老师木:</strong> LightLDA 的确是迄今为止我做出来最有影响力的工作。人常说,评价一个学者水平高低不是看成果多少,而是看他能到达的最高水平,可以说这项研究让我跻身于世界一流研究人员的行列。首先,算法结果是一流的,LightLDA是当时业界最快的训练Latent Dirichilet Allocation (LDA) 主题模型的算法,它把单个词采样降低到O(1)复杂度。其次,系统实现是一流的,我们仅用数十台服务器,完成之前成千上万台服务器才能做的事。LightLDA和许多其它优秀科研成果一样,是集体努力的结晶。那个时候,CMU的邢波教授(Eric Xing)在MSRA 任顾问,微软团队和他领衔的Petuum团队合作达成此项成果,论文发表在WWW 2015,系统代码在Github开源,也成功应用于微软搜索广告和情景广告产品中。</p> <p>主题模型特别是LDA是广告系统和推荐系统中的关键组件,据说“Google AdSense 背后广告相关性计算的头号秘密武器Google Rephil ” 就是一个巨大规模的主题模型。大约三四年前,微软很多产品想用类似的技术,然而并没有大规模主题模型的训练系统。有一天,主管这个领域的副院长马维英(现今日头条副总裁)和我讨论时,说起这件事,产品部门经常问他的团队有没有这样的解决方案,问我愿不愿意干。恰好那时邢波教授也开始做MSRA的顾问,邢教授的团队在这方面有很积累,微软正好可以和他在CMU的团队合作研发大规模主题模型训练技术,双方一拍即合。当时,从公开渠道能了解到,为解决工业级需求,训练数据可能涵盖数亿个文档,每个文档包含十几到数百个词,为了覆盖长尾词和长尾语义,词典可能包含数十万到百万个单词,主题个数远超业界发表论文的数字(仅数百个主题),达到万,十万,甚至百万,最先进的解决方案需要数千台服务器运行数天才能得到结果。我们当时立下的flag是,相对于业界最好解决方案,做到各个维度上都有数量级的超越(服务器数量必须是数十台,我们那时拿不到数千台这么奢侈的硬件支持,数据规模做到数十亿Bing索引的主流网页,词典和主题数至少做到十万级别)。稍微推算一下,就可以知道,即使是当时最先进的算法SparseLDA,在给定的硬件环境中训练这样规模的模型需要半年到一年的时间。再加上身处研究部门,一没有可供使用的集群,二没有工程师团队的支持,微软这边全时投入的只有我和实习生高飞,这个目标看上去是mission impossible。我当时的想法是,最低目标要做出来一个能满足产品部门需求可用的主题模型,能不能做出打破纪录,就看运气了。</p> <p>InfoQ:请问大规模训练LDA模型的瓶颈是什么?</p> <p><strong>老师木:</strong> 训练LDA 的算法可以分成两类,一类是变分贝叶斯法,一类是Gibbs采样算法。前者计算过程和中间表示都是稠密的,分布式实现时通信量较大,后者是稀疏计算,通信量小,一般大规模主题模型都基于Gibbs 采样算法实现。使用Gibbs 采样算法时,算法复杂度和系统实现两方面都有困难。假设有100亿文档,平均每个文档有100个词,一共有10000亿个词,训练过程迭代100次,那就需要对10000亿个词扫描100遍。标准的Collapsed Gibbs 采样算法处理一个词的计算复杂度与模型的主题数量有关,假设要训练包含10万个主题的模型,那么每个词就包含10万次计算,主频为2GHz的CPU 核心每秒能处理1000个词,这样估算一下下来,假设使用一个单线程程序来做这件事,共需要1000亿秒,也就是100万天。使用10000个CPU 核心的分布式集群去训练,假设线性扩展性,也需要100天之久。假如每个词的采样效率能提高100倍,那么使用10000个CPU 核心的集群去训练这个模型就只需要1天。前人已经提出了Gibbs 采样算法的多种改进,譬如SparseLDA, AliasLDA,但这些算法的单个词的计算复杂度仍与模型的主题数量相关,与“创造奇迹”仍有距离。另外,实践上,算法中总有一些步骤是无法并行化,受制于阿姆达尔法则,分布式系统很难做到线性加速比,所需要的时间会比上述预估的时间更长。</p> <p>InfoQ:LightLDA 设计之处,面临了哪些挑战?</p> <p><strong>老师木:</strong> 我们LightLDA团队资源匮乏(计算资源,工程师资源),同时在算法和系统实现上都挑战极大。我个人认为最大挑战在信心方面:我们能不能做到?在此之前,有多位知名科学家和资深工程师在训练大规模LDA的问题上耕耘已久,他们已经把算法和系统实现推进到相当的高度,即使采用当时最先进的技术,仍不可能实现我们的目标。必须做出显著超越前人的奇迹技术突破才有可能实现目标。我和学生都是第一次从事大规模机器学习的项目,名不见经传,何德何能,能比另外一些特别牛逼的人物做的还要好?</p> <p>首先是算法上的突破。我在重现和把玩SparseLDA 和 AliasLDA时,被可遇不可求的灵感眷顾:解耦Gibbs 采样中与词自身相关的因素和词所在文档上下文的因素这两个因子,能做到单个词采样复杂度与主题个数无关。马维英院长第一次听我介绍完这个想法和初步实现结果后说 too good to be true,的确,谁能想到这样一个小小的insight,竟然能把单个词采样复杂度降到O(1),理论上使得达成那个宏伟的目标成为可能。这个灵感来的偶然又必然,机遇偏爱有准备的人。我动手能力比较突出,很快就重现了SparseLDA 和当时刚刚在KDD 上发表并获得最佳论文奖的AliasLDA 算法,同时理论功底又比较扎实,很快就深刻理解了它们的关键所在。我不断把玩这两个算法,在直觉和理论分析指引下做一些改动,然后观察是否有效,终于在一次改动后发现计算效率陡升,让人怀疑是不是出现了有益处的bug,再三推敲后终于确认,这是一个有深刻内涵的新发现。这又一次印证了我从清华数学系林元烈老师那学到的一个诀窍:熟能生巧。他的随机课程巨难无比,我刚开始怎么都入不了门,和很多自认佼佼者的同学一样竟然期中考试不及格。林老师说了一番这样的道理:他认识很多大牛数学家,即使是像他们那么聪明的人,在掌握一些艰深的数学科目时,也是通过做特别多习题才能悟道。我就硬着头皮做了很多习题,有的证明看不懂,甚至都背下来了,也是突然一瞬就知道了随机过程怎么回事。每次遇到困难,在说放弃之前再坚持一会儿结果就会不同。</p> <p>找到理论上性质很好的算法,只是万里长征第一步。怎么高效地用程序实现,特别是在分布式环境下接近线性加速,包含了一系列的技术挑战,任何一个环节掉链子,所有努力都会化成泡影。做这类事的特点就是,兵来将挡,水来土掩,在你不知道前人这些技巧时,你要自己发明出来,但在系统领域极大概率是这个发明已经在经典文献中被提出过了。我们解决了两个突出的难题,超大规模模型的内存瓶颈和通信瓶颈。100万的词典和100万个主题,模型之大,前所未有,意味着需要若干TB的内存,如何存储和支持快速访问也极其严峻。在分布式环境下,如何有效掩盖通信开销又不损失模型精度,也是当时面临的一个主要难题。我的学生高飞在工程实现方面特别给力,交给他的事情总能又快又好的做完。事后回顾这段经历,他说,这段日子是他最愉快的经历之一,偶尔会感到绝望,总发现我在前面仍激情满满的坚持,他深感佩服。我的领导马维英和刘铁岩研究员则克服重重困难,为这个项目提供资源支持和高屋建瓴的指导。同时,我们和CMU Petuum 团队,Eric Xing, David Dai, Jinliang Wei, Qirong Ho, 尽管身处太平洋两岸,但几乎每天都有邮件讨论,每周都有好几次电话会议,遇到技术难题大家凑在一次分析,提出不成熟的好点子又立刻能得到挑战,共鸣和支持,缺少任何一个人,结果都不是大家看到的样子,这就是一个优秀团队的魅力所在。</p> <p>没有前面技术突破,绝不可能达到目标。仅仅有前面的算法突破,没有执行成功,这项研究也就是一个微不足道的trick,绝不可能产生后来的影响。</p> <p>InfoQ:LightLDA 如何借助DMTK 框架做并行化? LightLDA 有哪些优点?</p> <p><strong>老师木:</strong> 这里可能有一个小小的误解。在Github上发布时,LightLDA 是作为Distributed Machine Learing Toolkit (DMTK)的一个组件发布的,但实际上LightLDA 最初是使用 Petuum 的参数服务器实现并行化。在LightLDA论文发表后,微软酝酿和发布了DMTK项目,这时候把LightLDA 作为DMTK的一个主要应用集成进去了。LightLDA 的优点就不多说了,主要是快,扩展性好,用少得多的硬件资源就可以解决规模大的多的问题。我来说一下开源版本的缺憾吧。首先,理论上单个词采样复杂度是O(1),在工程实现上,因为随机访存造成cache miss太多的原因,没有完全发挥算法的优势,不久以后,清华大学朱军和陈文光教授的课题组做了一些新的创新,提出了WarpLDA,重排训练数据的访问顺序,大大减少cache miss,才真正发挥了这类O(1) 复杂度算法的威力;其次,LightLDA 开源的代码并没有包含数据预处理和在线预测这一整套工具链,使得用户必须自己去开发和踩坑;最后,有一些较高级的特性虽然在内部版本实现了,却并未在开源代码中发布,譬如能搞定长尾语义的非对称先验的LDA等。我们也没有把单线程版本发布出来,方便同行做纯粹地算法比较。</p> <p>InfoQ:通过LightLDA项目,得到了什么启发?</p> <p><strong>老师木:</strong> 第一,的确存在不可替代的技术,平凡的创新和破坏式创新的效果不可同日而语,后者往往有四两拨千斤的效果。</p> <p>第二,要敢于迎接挑战,承担风险,个人理解,这相对于平凡而稳妥的道路更划算,做一件挑战但有风险的事,可能需要付出于平常事3倍的努力,但可能获得做10件平常事才会有的回报。</p> <p>第三,无论是科学研究,产品研发,还是商业竞争是智商,意志,情商等综合素质的全面比拼,不仅要有不可替代的优势,在其它任何方面还不能有短板。</p> <p>第四,机会总是眷顾有准备的人,有所准备才能抓住稍纵即逝的机会。总结,LightLDA 让我体验了做成一件有影响的事所需要的所有困难,我好像对看上去很难的事不会感到畏惧。</p> <h2>关于人工智能从业</h2> <p>InfoQ:人工智能前景良好,那么从业者能发挥什么角色?</p> <p><strong>老师木:</strong> 有三种类型的技术可做:</p> <p>一,研究机器学习算法或原理,解答怎么做(How)或为什么这么做(Why)的问题,譬如研究怎么训练深度学习模型,什么样的神经网络结构效果最好,为什么深度学习要比其它机器学习方法效果好等等,简略称为原理问题;</p> <p>二,机器学习的基础设施,什么样的软硬件设计能使得机器学习算法计算更快,能用上更多数据,或者使模型规模更大,例如研发深度学习软件框架,或深度学习专用硬件等等,可归结为计算力问题;</p> <p>三,如何应用机器学习技术(算法和计算力)解决工作和生活中的实际问题,譬如互联网广告系统设计,推荐系统,游戏博弈(如AlphaGo),自动驾驶等等,可归类为应用问题。</p> <p>InfoQ:从事哪种类型的工作更有竞争优势? </p> <p><strong>老师木:</strong> 这三种类型的工作我恰好都做过,应该说哪个都很有用武之地,哪一个方向能做到顶尖水平都不易,做好了都能赢者通吃,全栈则更有优势。当然,这些工作也存在一些具体的差别。理论问题,进入门槛较高,工作岗位不太多,一般是兴趣驱动,看天赋和运气,这方面的突破,影响范围广,惠及全行业,从创业看,难以形成独立的商业模式,一般是在大学或企业研究院开展。计算力问题,影响力能到达全行业,通常是业界巨头和精干的创业团队的强项,岗位不太多,门槛也比较高,但主要看后天努力,一般是努力总有结果,创业上有可能形成独立的商业模式。应用类型的问题,业界需求最大,进入门槛低一些,确定性高,离商业近,周期短,见效快,影响力一般受限于特定领域。统计上,少数人从事理论和计算力类型的工作,大部分人从事应用驱动的工作。现在的开源软件和公开课非常普及,为有志于在此方向上有所造诣的同行提供了前所未有的良好条件。</p> <p>最后的话:“遍地黄金的日子过去了,低垂的果子已经没了”,技术创新主导的时代必将来临,让我们以“像鹰一样的眼光,像狼一样的精神,像熊一样的胆量,像豹一样的速度”,去抓住属于技术人的机遇。</p> <p>老师木将在2018年1月AICon全球人工智能技术大会上给大家分享深度学习平台技术演进,想要探讨更多技术问题,可到现场跟他进一步交流。大会还涵盖自动驾驶、搜索推荐、智能医疗、智能教育、人脸识别、智能助手等领域的落地案例分享,点击“阅读原文”,一起探索AI的边界!</p> <p>阅读原文链接: <a href="https://aicon.geekbang.org/?utm_source=wechat&utm_medium=ai-front&utm_campaign=1030" rel="nofollow,noindex">https://aicon.geekbang.org/?utm_source=wechat&utm_medium=ai-front&utm_campaign=1030</a></p> <p> </p> <p>来自:http://www.infoq.com/cn/articles/software-platform-deep-learning-compute-capability</p> <p> </p>