MIT 博士在读学生 Tom Silver 的AI科研经验谈。Tom Silver 是哈佛大学计算机和数学专业本科毕业生,曾有过 Sabeti Lab、Google、Vicarious 等多家知名 AI 实验室或公司的实习经历。
我朋友马上就要开始 AI 方面的研究,而我恰好要比他早两年入坑,所以他最近一直在向我询问相关的研究经验。这篇文章就是我对自己两年研究经验的总结,其中既有平常的生活感悟,也有研究技巧,希望对读者朋友有一点帮助。
入门
找一个合适的人问“笨问题”
我最开始做研究的时候常常不敢向同事们请教,害怕提的问题听起来太不专业,被他们看不起。这种情况一直持续了好几个月才有所缓解,但我依然非常谨慎,生怕漏了怯。不过现在我已经有了几个知心伙伴,可以直接和他们讨论问题。真希望我可以早一点认识他们!
以前我碰到问题都是直接 Google,满屏幕的链接和资料常常让我十分迷茫;但现在每当我碰到问题的时候,我就可以直接提出来和大家讨论,而不是自己一个人闷头解决。
在不同的地方寻找研究灵感
决定自己下一步要做什么可能常常是很多人科研生涯中最困难的一部分。我这里有几个科研人员常用的策略:
与不同研究领域的人交流。多询问他们感兴趣的问题,并试着用计算机领域的专业术语来重述这些问题。多询问他们有没有想要分析但是用现有技术难以解决的数据集。机器学习中最有影响力的工作很多来自于计算机与生物/化学/物理学、社会科学或纯数学之间的碰撞。例如 Matthew Johnson 等人在 NIPS 2016 上发表的论文,就是受一个小鼠行为数据集启发的结果;再比如 Justin Gilmer 等人在 ICML 2017 会议上的论文,该工作将机器学习方法应用在了量子化学的研究中。
编写一份简单的 baseline 代码来感受这个问题。例如,尝试编写一些控制倒立摆的代码,并进行仔细地校准,或者试试看能不能在自然语言数据集上实现一个词袋模型。编写 baseline 时,我常常遇到一些出乎意料的情况——心智模型或代码中存在错误。就算我的 baseline 代码可以运行了,我通常还会尝试一些其他的想法,以此对问题有更深的理解。
扩展你喜欢的论文的实验部分。仔细阅读那些论文的方法和结果。尝试找到其中最有价值的部分。首先我们可以考虑一些最简单的扩展,问问自己:论文中的方法是否适用。然后可以考虑一下文章没有讨论过的 baseline 方法,并想一下这些方法可能会在哪里失败。
掌握可视化工具和技能
在写代码时,我通常采用的策略是先从创建可视化脚本开始。当写完其他代码后,可视化脚本可以帮助我快速验证代码是否和心智模型相匹配。更重要的是,和其他方法相比,良好的可视化常常可以让我更容易发现思维或代码中的错误。还有一点原因就是自我激励:每当我完成一份代码时,我都可以拿出一份漂亮的图表或视频来向大家炫耀!
当然,针对手头的问题进行正确的可视化可能还需要一些技巧。如果是迭代优化模型(如深度学习),可以先从绘制损失函数曲线开始。此外还有很多技术也可以用来进行(特别是卷积)神经网络的习得权重的可视化以及解释,例如导向反向传播。
在强化学习和规划中,需要可视化的事情则显而易见,就是智能体在环境中的行为,比如 Atari 游戏,机器人任务或简单的 Grid World(例如 OpenAI Gym 中的环境)。通过不同的设置,我们还可以将价值函数及其在训练过程中的变化(如下所示)进行可视化,或可视化已遍历的状态树。
在处理图模型时,对一维或二维变量在推理时分布的变化进行可视化,可以获得很多的信息(如下所示)。衡量可视化技术有效性的一种方法就是,估计你每次分析可视化时脑海中需要提前掌握的信息量。糟糕的可视化结果会需要你对写过的代码进行详细的回顾,而一个好的可视化结果则会让结论呼之欲出。
Tensorboard是一个用于Tensorflow深度学习模型可视化的流行GUI
将分布绘制出来作为证据累积,可以使图模型的调试更容易(来自 Wikimedia)。
通过Q-learning习得的价值函数可以在它所代表的Grid World中可视化(by Andy Zeng)。
学会找出研究人员和论文的基本出发点
虽然很多研究人员会在相同的会议上发表文章,使用相同的术语,并都声称自己的研究领域是人工智能,但他们研究的出发点(motivations)却很可能截然相反。一些人甚至想为这个领域更名来解决问题。在这个领域,至少可以从三种主要的角度出发,分别是“数学”、“工程”和“认知”。
从“数学”角度出发:智能系统的基本属性和限制是什么?
从“工程”角度出发:我们如何才能开发出可以更好地解决实际问题的智能系统?
从“认知”角度出发:我们应该如何对人类和其他动物中发现的自然智能进行建模?
这些出发点并不冲突,AI 领域许多有趣的不管从哪个角度看都非常有意思。此外,个人研究者也常常会受到不同角度的触动,这有助于 AI 领域的交融。
当然,出发点也可能不一致。我有一些朋友和同事,他们明显专注于“工程”角度,而另一些人则主要对“生物学”感兴趣。如果有一篇文章显示现有技术的某些巧妙组合可以在 baseline 上超越目前的最优水平,那工程师们就很有可能对这篇文章感兴趣,而认知科学家则可能丝毫不感兴趣,甚至对其嗤之以鼻。而一篇阐释了生物可解释性(biological plausibility)或认知联系却只停留在理论或者没有严肃结果的文章,在这两种研究者中收到的反响可能就截然相反。
优秀的论文和研究人员会在一开始就说明他们的出发点,但其背后的根本动机则可能隐藏的很深。如果出发点不明显,我们可以从多个角度对文章进行分析,这会很有帮助。
▌从研究社区中汲取营养
找论文
在 arXiv 上有大量的 AI 论文,而且可以免费查看。除了论文数量飞速增长,社区中大量的活跃用户也降低了寻找高质量文章的难度。李飞飞的学生 Andrej Karpathy 建立了 arXiv sanity preserver,可以帮助我们对相关文章进行排序,搜索和过滤。Miles Brundage 常常每天晚上在 Twitter 上发布经过精心挑选的 arXiv 论文清单;这项任务大部分都是由 Brundage Bot 完成的。很多其他 Twitter 用户也时不时分享很多有趣的参考资料——我建议大家可以在 Twitter 上关注一些自己感兴趣的研究人员。
如果你喜欢用Reddit,那么可以考虑使用r/MachineLearning,但这些帖子往往更适合机器学习工程师而不是学术研究人员。Jack Clark 每周会发布一个名为 "Import AI" (https://jack-clark.net/ )的社区新闻简报,Denny Britz 则有一个名为"The Wild Week in AI"的专栏。
一些 AI 大会的论文集锦也值得关注。机器学习领域的三大最顶级会议是 NIPS,ICML 和 ICLR。其他会议还包括 AAAI,IJCAI 和 UAI。具体到这个领域的每个子学科,还会有更具体的会议。计算机视觉领域的会议包括 CVPR,ECCV 和 ICCV;自然语言处理领域的会议有 ACL,EMNLP 和 NAACL;机器人领域的会议包括 CoRL,ICAPS,ICRA,IROS 和 RSS;对于更加理论性的工作,可以关注 AISTATS,COLT 和 KDD 这些会议。这些会议是目前 AI 论文发表的主要渠道,当然也有一些期刊。JAIR 和 JMLR 是该领域两个最重要的期刊。偶尔再高级些的文章也会出现在如 Nature 和 Science 上这样的科学类期刊上。
应该花多少时间来读论文?
关于人们要在了解以前的研究工作上花费多少时间这个问题,我经常听到的建议有两种。第一种,如果你刚刚开始,那么请阅读所有论文!人们经常说研究生的第一个学期或第一年应该只读论文。而第二种建议则是,在对研究领域有了最初的了解之后,不要花太多时间阅读论文!后者的出发点在于,如果没有受到以前的方法影响,研究者就更容易用创造性的方式构造和解决问题。
我个人是同意第一点建议,不同意第二点建议。我认为,在确保原创研究时间的前提下,科研人员应该尽可能多的阅读论文。“如果我不熟悉别人尝试过的方法,那我更容易设计出一种更加新颖,优秀的方法来解决困难问题。”——这种事情似乎不太可能,而且有些太过傲慢自大。没错,用全新的观点来看待问题是很重要,那些业余爱好者的故事很多也都是因为他们跳出传统思维的视角。但身为职业研究人员,我们不能只依赖这种运气性的成分而不深思熟虑来得到一个问题的解决方案。在研究生涯的绝大多数时间里,我们都是在耐心地、一步一步地、有条不紊地解决问题。阅读相关论文则是一种让我们明白自己所处的研究位置以及接下来要尝试的方法的高效方式。
当然,在尽可能多的读论文这件事情上,我需要提醒一下:花时间消化论文与阅读论文一样重要。最好是可以先阅读一些论文,然后仔细记录并反思每一篇文章,而不是一篇一篇的囫囵吞枣式的阅读。
交流>> 视频 > 论文 > 会议演讲
想要理解一个陌生的研究历年,那么阅读论文当然是最容易的途径,但是最高效的途径呢?不同的人可能会有不同的答案,对我而言,和他人交流(理想情况下,和已经了解自己相关想法的人交流)是到目前最快而且最有效的理解途径。如果身边没有这样的人,那么观看和这个主题相关的视频——例如这篇论文的作者受邀进行的演讲——也是一种非常好的理解方式。当演讲者对着现场观众进行演讲时,他们会优先考虑表达是否清晰易懂,而不是表达的准确性。但在大多数论文写作中,这两者的优先级是相反的。在论文中,字数非常重要(作者不能为了讲清楚一个概念而占用太大篇幅),不准确的背景介绍还有可能让人认为作者对该领域缺乏了解。最后,简短的会议演讲则通常形式大于意义。当然,演讲之后与主讲人的交流也是非常有价值的。
谨防炒作
人工智能领域的成功引起了公众的关注,也吸引了更多的人进入该领域,这个循环的影响主要是良性的,但也有一个有害的副作用——炒作。媒体总是想得到更多的点击率;科技公司则希望获得投资者的青睐,并招到更多的员工;同样地,研究人员则希望提高自己论文的知名度和引用量,这些都导致了越来越严重的炒作现象。所以当我们看到媒体报道或者论文的标题时,要多想一想这些背后的因素,提防标题党。
在 2017 的 NIPS 会议的一场论文问答环节中,数百名观众听到了一位相当著名的教授(为了反对炒作)拿着麦克风对论文作者的劝告,教授劝告论文作者在标题中谨慎使用“imagination”这个单词。我对这类近乎公开的反对有着复杂的感受,而且还碰巧很喜欢这篇特别的论文,但我相当理解那位教授的不满。人工智能研究中最常见和但也最令人厌恶的宣传套路之一就是对旧观念改头换面,用一个新术语。一定要小心这些流行语——作为一名严谨的科研人员,还是应该主要根据其实验和结果来判断论文。
▌科研是一场马拉松
制定可量化的目标
在早期寻找研究项目时,我曾花费大量时间来进行头脑风暴。对我来说,那个时候进行头脑风暴就是把脑袋搁在办公桌上,呆呆地希望有些模糊的直觉能够变成具体的见解。结束了一天的头脑风暴后,我常常会感到疲倦和沮丧。这种生活难道就是科研吗?
当然,现实中并不存在能让人立即取得研究进展的秘诀,在黑暗中苦苦摸索是大部分人研究生涯的一部分。但是,现在我发现通过制定可量化的目标,然后规划工作,可以让我的科研生活变得更容易并且更充实。在我不知道接下来要做什么的时候,我经常会尽可能详细地把自己模糊的想法写下来;如果在写下这个想法的过程中,觉得它并不合适,那么写下排除该想法的理由(而不是完全废除这个想法并不再衡量自己的进展)。在没有任何想法的情况下,我们可以采取阅读文章或与同事交流。在每一天结束的时候,我的工作终于有了些实实在在的痕迹。即使这些想法从未被使用过,也在很大程度上提高了我的自信。我不用再担心以后会在相同的想法上浪费时间。
学会认识并避开死胡同
优秀的研究人员会花更多的时间在好的想法上,因为他们在坏主意上花的时间更少。有能力分辨好想法和坏想法似乎主要是经验的问题。尽管如此,无论什么水平的研究人员也都经常遇到下面这样的抉择。我的研究思路有缺陷或不确定,那么我应该试着选择A):进一步挽救或者说继续这个想法,还是选择B):完全放弃这个想法呢?我个人后悔把本应该花在B)上的时间花在A)上。特别是刚开始的时候,我曾经很多次陷入死胡同中,并且在那花了很长时间。我不愿意放弃的根源可能是由于沉没成本误区——如果我放弃这条死胡同,就会白白浪费自己已经花费的时间。
现在我每次放弃一条死胡同时,仍然会感到失望。但我一直在努力告诉自己回溯也是前进的其中一步,这虽然有点反直觉,但我一直在内化这种意识。已经付出的成本是值得的,并没有沉没。如果我今天没有探索这个死胡同,明天就可能会再次钻进去。死胡同不是结束,他们也是正常的科研生活的一部分。希望这些想法中有一个能被我坚持下去。如果没有,还有费曼的名言:我们试图尽快证明自己的错误,因为只有这样我们才能进步。
We are trying to prove ourselves wrong as quickly as possible, because only in that way can we find progress 。― Richard Feynman
动笔!
我曾经有机会向一位非常著名的 AI 研究人员咨询职业生涯早期的建议。他的建议很简单:动笔!除了动笔写博客和论文,更重要的是,每天都要写下自己的想法。自从听取了他的建议之后,我就注意到每当我积极写作而不仅仅是简单思考的时候,我所取得的进展就会有明显的不同。
身心健康是做好科研的前提
科研人员在醉心科研时常常废寝忘食,这是十分危险的表现。我以前常常以这种状态为目标,并常为自己没有达到这种状态而羞愧。我现在明白了(至少在理性层面上),锻炼和精神休息都是投资,而不是分心。如果我花 8 个小时睡觉和 4 个小时工作,我的工作效率反而会比花费 4 个小时睡眠和 8 个小时工作高。
当然,在一个棘手的问题面前中断工作可能仍然非常困难。即使当我已经超过疲惫或沮丧的临界点,并且没有取得任何实质性的进展时,我也不会休息,而是继续钻研。当我终于能够前进一点,并且可以停下来深呼吸一口气时,我就总会为我的坚持感到由衷的高兴。希望我可以在进入研究生涯下一阶段的过程中继续保持这种干劲。
领取专属 10元无门槛券
私享最新 技术干货