十年前,在MSRA的那个夏天,当我第一次尝试机器学习研究时,我感到很迷茫,失去了大部分科学研究中巨大的不确定性。十年后,当下一步即将迈出的时候,未来还是那么的不确定,却多了一份期待。这些变化也带着过去十年经验的影子。开头:什么是科学研究?大三进入交大APEX实验室。有幸跟随戴文渊学长做机器学习。当时觉得“机器学习”这个名字很崇高,就选择了这个方向,但是做了一年。之后一直想不通,非常向往独立做科研、写论文的生活,但始终不知如何下手。我进实验室一年后,文远去了百度。那个时候,还没有收到前辈真传的我,开始了第一阶段的科研。从大四到硕士二年级,我不断地自己探索,不断地问自己“什么是科研”。与课程作业不同,学术研究没有特定的问题、特定的方法和特定的答案。文远的离开让我不知所措。我当时的想法很简单,快速找到一个具体的方向,完成一篇论文。因为ACM班的机会,暑假在MSRA做了一个短期的实习。虽然学到了很多,但是并没有给我答案。MSRA回来后,在实验室薛老师的建议下,我选择了一个现在看来正确但错误的方向——深度学习。那是AlexNet出现的两年前,深度学习的主流热点是无监督学习和受限玻尔兹曼机。没有导师的指导,没有工具,凭着实验室里的两张显卡和自己写的CUDA代码,开始了两年半的深度学习。实验室的学长问我,??你打算做什么,我说:“我想用卷积RBM来提高ImageNet的分类效率。”这个答案打通了图书馆和实验室无数个日日夜夜,为了给实验室的老机器多带一块大功率显卡,我们打开其中一台机器的机箱,在外面多插了一块外接电源.我的生活继续在参数调优的循环中:视觉权重的图像看起来有点像人脸,但准确率始终没有提高,我又来了。从一开始破解显卡代码的兴奋,到一年后的焦躁,再到时不时在树下踱步想弄清楚如何添加旋转不变模型的尝试,朝着这个方向,我花了本科四年到硕士一年的一半时间,直到最后什么都没有。现在看来,我当时犯了一个很明显的错误——常见的科学研究要么是问题驱动的,比如“如何解决ImageNet的分类问题”;或方法驱动,例如“RBM可以用于什么”。当时我把要解决的问题和解决问题的方案同时锁定,成功的可能性自然就低了。如果当时仔细看一下整个领域的各种想法,比如乐村很早就已经把endtoend做完了,也许结局会不一样。当然,没有如果。赌了两年半,剩下的只有紧张,什么时候能发论文。心急,开始打算换个方向,因为当时RBM有一篇比较经典的文章应用于推荐系统,开始接触推荐系统和kddcup。幸运的是,这次我并没有将RBM作为唯一的方法,而是更广泛地研究了推荐系统中的矩阵分解算法,并在实验室中构建了一个更通用的矩阵分解系统。在推荐系统方向的努力也逐渐有了回报,我们在KDDCup11这两年都取得了不错的成绩。KDD12在北京,放弃了过年的时光。我完成了我的第一篇关于基于特征的分布式矩阵分解的论文,我很高兴能投票给KDD。4月底,我们收到了KDD的提前拒稿通知——论文连第一轮审稿都没有通过。收到拒稿通知的时候我非常沮丧,因为这是我第一篇大部分独立完成的文章。转折点是在5月,KDDCup12收官排名,我们拿到了第一个赛道冠军。我还记得我赢得KDDCup12冠军的那一刻。扫走。那时,我还没有完全明白什么是科学研究,只是隐约觉得自己可以继续尝试。零年:能做些什么我的科研观的第一个转折点出现在硕士即将毕业的时候。李航老师来我们实验室做了关于机器学习和信息检索的报告,并与我们进行了讨论。在做报告的过程中,我激动得时不时的想跳起来,因为我好像知道怎么解决这么多有趣的问题,但我从来没有想过我以前可以做这些问题。与李航老师接触后,同年夏天,我有幸与李航、杨强一起去香港实习。实验室的很多前辈都曾去香港跟杨强老师一起工作,回来后似乎都豁然开朗,在科研上进步神速。去了香港之后,我开始明白为什么——researchhorizo??ns。经过几年的训练,我当时可能知道如何解决一个现有的问题,但我还缺乏其他一些必要的技能——如何选择一个新的研究问题,当结果不理想时如何改变,在研究中找到新的突破口。方向,如何知道整个领域的问题之间的关系等等。“你从香港回来升级了吗?”——来自一位英雄的评论。这可能是我在香港实习三个月最好的总结。在香港实习结束时,我得到了我的第一份正式会议论文(那年在ICML)。因为KDDCup,我认识了我现在的博士生导师Carlos的博士后Danny,Danny把我推荐给了Carlos(UW)和Alex(CMU)。申请的时候很幸运拿到了UW和CMU的offer。在访问CMU时,我遇到了传说中的神学大师李牧。我和他都感叹,现在是大数据火起来的时候,但是等我们毕业了,不知道会是个什么样的时代,反之亦然。总是有更重要的事情要做。想想这段谈话仍然很痛。我最终选择了UW,开始了我六年的博士生活。多亏了博士之前在APEX实验室和香港的经验,我似乎不再担心博士开始时我能做什么。第一年:一不小心能收获什么如果说我在UW的第一年有一个主题,那可能就是“意外”。我在交大的时候,因为兴趣,经常去系统生物学研究员敖平的小组会议,讨论随机过程和马尔可夫链。UW第一学期无意中看到一篇文章,讨论如何使用Lagevin过程进行采样。我想这就是上次小组会议讨论的内容。事实证明,这些方法也可以用于机器学习。直接借用了原来交大会议上的知识,完成了第一篇关于HMC高效采样的文章。我没有继续朝这个方向努力,而是另一位同在小组会议的同学继续按照这个方向完成博士论文。同年,我和导师开始“质疑深度学习”——如果其他机器学习模型有足够大的模型容量和数据,是否能达到和深度学习一样的效果?当时Carlos看好kernelmethods,而我也因为过去的一些经验决定尝试TreeBoosting。虽然在视野上还是败给了卷积网络,挑战的尝试失败了,但是实现高效Treeboosting挑战这个假设的系统被小伙伴建议开源了,后来变成了XGBoost。第一年暑假结束的时候,因为一个偶然的原因,对分位数素描算法产生了兴趣。这里的主要问题是如何设计一个近似的可合并数据结构来寻找分位数。这个方向有一篇经典的GK-sketchpaper,但是只能解决数据点没有权重的情况。经过一两天的推导,终于把结论推广到爬山途中的加权情况。有趣的是,新证明看起来比原来的证明简单得多。这个结论并没有单独发表,却意外地用在了分布式XGBoost算法中,证明也被收录在了XGboost文章的附录中。研究不会在一夜之间发生。做自己想做的事,并做好。一开始,你很感兴趣,但几年后,你会有意想不到的收获。这种感觉很好。二三年级:选择做什么在新生聚会上,卡洛斯告诉我,你已经发表了论文,然后你应该静下心来做研究,“只做最好的论文水平的研究”。.与很多nicetutor不同的是,Carlos对学生的要求非常严格,说话也很直白,甚至有些“尖锐”。无论我们提出什么样的想法,很多老师总是先肯定,而卡洛斯会非常直接地质疑。一开始会很不适应,觉得自信心受到打击,但慢慢习惯了,就会习惯这种风格。到目前为止,诚实的反馈确实是让我受益最大的事情。读博一年后,我思考的主要问题是,要做什么样的问题,才值得自己深入去努力,做扎扎实实、有影响力的工作。在我读博的第三年,Carlos建议我写XGBoost作为论文。用他的话说:“写一篇能让读者学到东西的文章。”与传统的写作方式不同,我们在文章的每一章都插入了实验结果,以验证该章提出的观点。而他对图的处理现在已经成为我的习惯,直接在图中插入箭头注释,减轻读者的阅读负担。经过几番打磨,论文终于变成了我们想要的样子。博士前对深度学习的遗憾让我逐渐将注意力转回深度学习。这个时候,我选择了不再孤军奋战。在读博士的第二年和第三年,我和感兴趣的朋友一起开始了MXNet项目。该项目从零开始,仅用了一年的时间就完成了一个完整的结构。我第一次看到了通过汇集每个人的力量并共同努力可以创造出什么。研究的乐趣不只是发表论文,更多的是你能给别人带来什么,或者更大胆地说——如何一起改变世界。博士二年级暑假,在朋友的介绍下进入谷歌大脑与IanGoodfellow实习。当时GAN论文刚刚发表,我有幸成为Ian的第一个实习生。在实习开始的时候,我们讨论了需要完成的问题。伊恩和我把可能的项目画在风险回报曲线上,让我选择。最后,我选择了一个我提出的题目,在这条曲线中,风险最高,回报也最高。我一直有一个理想,希望建立一个终身学习的机器学习系统,解决可能出现的问题。这个理想太模糊了,但我们试着想出了一个可能的小目标——知识迁移。如果一个机器学习系统想要终生学习,那么在不断收集数据之后,必然需要扩大模型的规模,以学习更广或更深的知识。按照现在的做法,我们只能放弃原来的模型,换了模型再训练,显然是不够的。高效的。是否有一种方法可以从经过训练的网络中迁移知识成为一个重要的问题。我首先花了一个半月尝试更明显的知识蒸馏方法,但从未得到积极的结果。上个月,我改变了主意。在实习结束的前一周,我打开了最近在Tensorborard上的一组实验结果:实验表明新的想法产生了积极的效果。最后这几步的运气,也为我的冒险带来了一个比较满意的结果。这篇论文最终发表在ICLR上,是我最喜欢的成果之一。在我读博士的第三年,我和我的朋友们开发了一种内存优化算法,可以训练更深层次的模型,复杂度低于线性。当时我很激动,把结果写下来,然后把稿子拿给导师看。他告诉我:嗯,如果这个结果提交给NeurIPS,它可能是一个海报,但这不是特别有趣。在我沉默之后,他又补充了一句:论文越多越好,相反你可能会尝试优化你的论文中质量最低的一篇。最后我们只是把论文挂在了Arxiv上。Carlos说的可能偏激(这篇论文还是影响了很多后续的工作),但确实是正确的。用李牧之前说过的一句话来概括,保证每篇论文的质量接近于单调提升,已经是一件困难但值得去做的事情。选择做什么愿景与取得良好结果的能力同样重要。眼界决定了工作影响力的上限,能力决定了能不能达到那个上限。敖平老师曾经在交通大学跟我说过,一个人做一件简单的事和做一件困难的事,其实所花的时间是一样的。因为再简单的问题也有很多琐碎的地方。如果你想得到一些东西,你必须放弃一些东西。既然如此,何不总是选择跳出自己的舒适区,选择一个最让自己兴奋的问题呢。第四年后:第三年,我和小伙伴们参加了GTC。结束后,我一个人在老黄党的角落里发呆。深度学习的框架开发已经铺开,但是下一步该怎么做,顿时迷茫了。第三年的暑假,我没有去实习,而是决定尝试自己开发在学校脑海中出现的抽象概念——DeepLearningIntermediateRepresentation。暑假过后,完成了第一个版本,可以灵活支持深度学习系统中计算图的内存优化。但是我总觉得还是少了点什么——系统的瓶颈还是离底层算子实现更近一些。暑假过后,在飞往加利福尼亚的飞机上,我试图在纸上画出可能的循环变换来优化矩阵乘法。回来后,我们决定推进一个更大胆的项目——尝试通过自动编译生成代码来优化机器学习的底层。之前对这个项目有过一些想法,但是一直不敢吃这只螃蟹。原因在于它的两个特点:从零开始,跨越多个领域。由于低级代码生成和对新硬件的支持,我们需要重新解决许多以前被现有操作系统和驱动程序隐藏的问题。这就像在一无所有的荒岛上重建。像一座城堡。它还涉及系统、编程语言、体系结构和机器学习等领域。这让我想起了我以前在ACM类中重建编译器和MIPS处理器并连接它们的经历。也正是那次经历,让我觉得吃多领域的螃蟹来解决问题是一件很刺激的事情。那次经历给我留下的第二个烙印是明白了合作与传承的重要性。这门课的设计有一个传统,每门课的老师都是上一届的学长担任。每个班级的学生都会在以前的基础上有所提高。我也为这门课做了一些小贡献。演变到现在,这门课已经从单纯的答辩变成了在线测评的OJ。大家齐心协力塑造课程。推广新的机器学习系统,塑造这门课程,需要各个团队学生的通力合作,足够的时间耐心的关注和持续的改进。我的合作者也被“包裹”到该项目中。我的架构合作者一直想设计新的AI硬件,我花了很多时间讨论如何在原型完成后共同设计新硬件。我们开始讨论如何管理片上内存,如何相对容易地生成指令集,甚至暴露了如何调度内存读写和并行计算。有一天,我告诉我的合作者,我们需要引入虚拟线程的概念来隐藏内存读写开销,然后他很快告诉我,这是架构中经典的超线程技术,发明者是负责人Hank我们部门的。.我们也在不断地重新发现经典的解题方法在新的场景中的应用,这让我觉得自己上了最好的架构课。过去两年在许多关键技术问题上的突破发生在有趣的时刻。我在排队观看西雅图艺术博物馆的无限镜子展览时,在星巴克餐巾纸上写下了第一个由加速器记忆副本支持的提案。后来,程序语言方向的同学也继续参加。我们争论最多的是如何平衡函数式语言和经典计算图,做出大家都能理解的中间表达式。这个讨论还在继续。经过大家的努力,TVM的第一篇论文终于在立项两年后发表。两年间,参与项目的同学也从两个人,到一个团队,再到一个新的实验室,一个社区。这两年也是我博士期间最充实的两年。因为做过很多“跨界”的工作,经常被问到你属于哪个领域。在过去的六个月里,我一直在不同的地方做报告。报告是这样开头的:算法突破、数据爆炸、计算硬件升级支撑着机器学习的变革,而这三者的融合就是机器学习体系。这就是我从事机器学习系统工作的原因。一位教授曾经问过我这样一个问题,如果明天有一种新的化学反应过程可能会彻底改变机器学习,你会怎么做?我回答:“我会全身心投入研究和研究这个化学过程。”虽然不知道遥远的未来需要什么,不管是系统、算法还是化学,从问题出发,用一切可能的方法最好地解决机器学习问题,这应该是研究我想坚持的风格。.小结在写这篇小结的时候,心里有很多感叹。我经常在想,如果我在对深度学习感到焦虑的时候,再放开一点点会怎么样,如果在实习结束的时候没有完成实验又会怎样。但现在看来,很多困难和无奈都是随机起伏的一部分。只要有足够的时间和耐心,随机过程总会收敛到一个相对稳定的状态。每个人的研究路径都不一样,我的经历应该是万千路径之一。医生的经历就像是用五年多的时间作为筹码投资自己,去突破做自己没有想到的事情。不管在电影中的跌宕起伏,它都是不可替代的一部分。科学研究从来不是一个人完成的,尤其是我。我在交大的时候和一群年轻的同学一起探索推荐系统的算法,博士期间搭建的每一个系统都包含了很多合作者的心血。是大家的共同努力,才有了现在的成绩。十年来,我个人得到了很多老师、同学、家人的鼓励和帮助。感谢他们给了我这宝贵的十年。
