高效的机器学习研究者,应该具备这 6 个习惯
一名优秀的机器学习研究员有哪些特质?是码力超强?还是理论功底一骑绝尘?
码力和理论固然重要,但是良好的习惯才应该是检验是否优秀的唯一标准。
紧跟Arxiv Sanity Preserver的最新研究,让模型训练不眠不休,最大限度的利用Stack Overflow.....除了这些,还有哪些是成为高效ML研究者必备的呢?
近日,一位网友在 Reddit 上发帖提问:「高效的机器学习研究者,都有什么样的习惯?」对此,不少网友纷纷留言支招,好不热闹。
而此前,Open AI 的创始成员之一和研究科学家 John Schulman也专门写过一篇《机器学习研究指南》,从选择研究问题的能力到研究驱动力,再到具体的研究方法上,提出了自己的独到建议。我们先来看:
一、培养选择正确的研究问题的能力
在机器学习研究中,具备正确选择研究问题的能力,甚至比你本身拥有的技术能力更重要。而这种能力是通过长时间观察哪些想法最终成功、哪些观点最终被遗忘而培养出来的:那些成功的想法可能会发展成为一些领域内新观点和新进展的基石,而那些最终被忽略的想法可能是因为它们太过复杂或太过脆弱,又或者是带来的增量进展过小。
这种日积月累的观察,能够让你学习到,哪些观点是有长远价值的,哪些观点可能只能够“昙花一现”。
对于这种能力的培养,大家可能也在探索一些捷径,下面这几种方法可为大家提供一些参考:
第一,阅读大量的论文,并有批判性地对这些论文进行评价。如果有可能的话,尽可能邀请机器学习领域的出色研究者来共同探讨这些论文。
第二,尝试加入研究主题相似的研究小组,以此汲取他们的研究经验,并培养良好的团队协作能力。
第三,在研究问题的选择上,可以向前辈研究者或其他有经验的研究者寻求建议。需求他人的建议并不可耻,而当你最终决定好一个正确的研究问题时,你的技能潜力就会被激发出来,并能够很大程度很好地进行研究。
第四,花点时间思考怎样的研究才是有用的、能做出成果的,比如问问自己以下几个问题:
- 理论在什么情况下是有用的?
- 什么情况下,经验成果能够迁移到研究中?
- 是什么让一些观点能够被广泛接受,而另一些却最终被遗忘?
- 机器学习领域的未来趋势是什么?哪些研究方向有可能会让其他的研究方向望尘莫及?
其中,第一点至第三点,目的旨在优化你的研究环境以及从其他研究者那里获得一些建议、汲取一些经验,而第四点则要求你自己进行独立思考。
而第一点从第三点的重要性,想必可以从“几乎所有带有冲击性的、有影响力的工作都是由一小部分的研究团队和机构做出来的”这一事实得到验证。这并不是因为这些研究团队或机构的研究者比其他研究者要更聪明得多,而是因为他们站在“巨人的肩膀”上,拥有更高密度的专业知识和视角,从而能比社区中的其他研究者先行一步。
不过如果你很遗憾无法在这样的环境中开展机器学习研究工作,也不要气馁,你也可能通过额外的努力,培养自己的专业能力和独特的视角,来走在别人的前面。
二、研究由观点驱动还是目标驱动?
选择好研究的问题后,一般而言,你可能会通过两种方式来决定接下来做什么:
第一,观点驱动,遵照一些文献的观点来开展接下来的工作。如果你正好阅读到观点和思路与你接下来要开展的工作一致的论文,那自然是最好。接着你就可以开始一个项目来测试你的想法。
第二,目标驱动,目标是发展一些你希望获得的新的 AI 技能,与此同时解决一些能够让你离最终目标更近一步的问题。在实验环节,你可以尝试测试一些文献中现有的方法,之后基于这些方法提出自己的新的方法来进行优化完善。
当然,这两种方法并不是互斥的,任何机器学习子领域的研究都不可避免地涉及到一些目标(比如说目标检测),而所有“观点驱动”的项目也代表着该子领域发展目标的进展情况,从这个意义上而言,“观点驱动”的 研究实际上是“目标驱动”的研究的一种实例形式。
而这里单独列出的“目标驱动”,指的是个人的目标比机器学习某个子领域的发展目标更明确,强调的是“成为第一个吃螃蟹的人”,而不是基于某项研究进行优化和改善。
从长远来看,“目标驱动”的研究对大多数研究者而言更具有价值。
“观点驱动”的研究存在一个很高的风险就是:可能会重复其他研究者的研究工作。世界各地的研究者阅读的文献材料都差不多,这让他们很容易产生相似的想法。而如果想通过“观点驱动”的研究来做出突破性的工作,就需要对你自己的研究课题建立独一无二的深度认知,并且能够以与社区其他研究者不同的视觉来开展研究,有些人可能能做到这样,但是做到的难度很高。
而另一方面,“目标驱动”的研究下,你的目标本身就能够给予你区别于其他研究者的独特视角,并引导你提出别人未曾提出的问题,让你获得更大的进展。不仅如此,这种研究方法也会让你变得更有动力:每天清晨都能够带着对实现目标的憧憬起床。这会让你在起起伏伏的研究持久战中,更易于坚持下去。
在团队协作方面,“目标驱动”的研究有助于团队研究者的协作研究并从问题的不同方面来开展研究工作。而“观点驱动”的研究由1到2人组成的“团队”开展,是最有效的。
三、高瞻远瞩,一步一步向目标高峰攀登
有些既聪明又勤奋的人为什么无法做出好的研究?其中一个重要原因就是,他们研究的问题并不是重大的问题。
当你开始一个研究项目前,你不妨问下你自己:这个问题研究下去的前景有多大?将带来10%的改进还是10倍的改进?不少研究者常遇到的一大瓶颈便是:正在开展的项目看上去有意义,然而结果却只能在一些指标上实现小小的提高。
在试图实现一个更大目标的过程中,增量性的工作(实现10%的改进)是非常有用的。例如,Krizhevsky、Sutskever和Hinton 2012年发表的一篇关于使用卷积神经网络来分类ImageNet 的开创性论文中,没有提出任何全新的算法部分,而是在很多方面实现了小的改进,结果实现了前所未有的结果,这在当时让几乎每一个人都倍感惊讶(虽然在现在看来,我们认为这没有什么)。
在日复一日的工作中,你可能在性能或理解上只取得了一些增量改进,但是不积跬步无以至千里,这些小的改进会推动你朝着更大的目标前进。
如果你打算就一些增量观点开展研究,需要意识到这些研究工作的有用性取决于它们的复杂度。对基准稍加改进的方法最好是非常简单,否则几乎没有人会愿意使用它,甚至你自己都不想使用。举例来说,如果可以实现10%的改进,最好2行代码就能做到,而如果能够实现50%的改进,可以再增加10行代码。
现在大家不妨回去看看自己的机器学习成果表,你制定的长期研究规划是否足以实现这些成果呢,如果你还看不到一条通往最终目标的道路,就应该尝试调整下你自己的规划了。
四、合理使用笔记本
一旦打算开发机器学习新算法,就必须长期将精力集中在一个问题。强烈建议研究人员有一本专用的笔记本,纸质版的也好,电子版的也可,然后用来记录每天的想法和实验。
如果是电子版的笔记本,建议每天创建一个条目,在这个条目中写下“你正在做什么“,有什么样的想法,以及实验结果。每隔一两周做一些回顾,回顾内容包括阅读所有的日常记录,包括想法见解、代码进度、下一步的打算等等。另外需要将这些日常记录浓缩成一个简单的摘要。
一些细节也不容忽视,例如在复习过程中随时补充遗漏的内容,将实验结果保存在一个统一的位置,便于迅速查看结果。
让笔记让更好的监控时间使用,避免因为对想法、线索在时间上的安排不足而使得研究半途而废。
五、有舍有得,切勿“恋战”
在机器学习研究中,不可避免的会遇到很具挑战性的问题,不抛弃,不放弃的精神往往让你投入过多的时间。但是经验表明有些问题不管你如何都努力,注定会走向失败。聪明的做法是适可而止,为自己设定一个“限度”,超过限度就放弃吧。
另外,过于频繁的切换所研究的问题也会常常导致失败。典型的表现是:正在为一个想法的实现苦苦挣扎,另一个有希望的突然出现在脑中,然后就转而“挣扎”这个新想法。
如果机器学习想法很快就能上手尝试,那就去试一试,初步受挫也不要失望,合理的坚持说不定就能见到曙光。
如何做到合理“舍得”,经验的做法是借助笔记本及时回顾项目细节,可能会发现,大部分时间都花在了“产生可交付成果”的项目上,还有一部分时间是花在了半途而废的项目上。所以,及时复习,清醒的保持研究的一致性和贯彻到底。
另外一个比较有效的策略是:花一些固定的时间预算尝试那些与工作主线不同的新想法。比方说,每周花一天时间做一些与你的主要项目完全不同的事情。这在满足“贪婪”的同时,也有助于拓宽知识面。
六、多读、多写,教科书是很好的老师
机器学习的每个项目都会带来新的挑战,聪明的人都是在做项目的过程中边学技能边补充个人背景。为个人发展留出时间,从长远来看,可以显著提高进阶机会。
具体而言,机器学习研究者都应该分配一部分时间来提高机器学习素养,如果仅仅是谋划当前的项目,不愿花精力提升,那么在了解了日常工作所需的基础知识之后,研究者很可能会停滞不前。
当然,待在舒适区很惬意,“站”着不动也花费不了什么精力。所以,在职业生涯的早期应该尽很大的努力扩大舒适区。阅读你感兴趣的教科书、论文以及复现相关算法。给自己制定合适的进阶规划,通过阅读一小套的相关论文和教科书逐步提升。
大多数机器学习专业的在校学生在毕业之后很少会花时间阅读教科书,这是非常不好的习惯,相比论文,教科书的知识更加密集,也更能扩展基础知识面。一本优秀的教科书往往涵盖了先关领域近几十年的思想,并且书中所使用的符号和术语也都比较正规,叙事方式也是徐徐渐进,由浅入深。
除了教科书,相关研究人员的博士论文也是非常棒的学习材料。一般来说ML研究员的博士论文的撰文都有固定的格式:1.研究背景以及前沿问题;2.之前发表的论文(有一种说法是,把之前发表的论文“装订”在一起就能写博士论文了);3.结论和展望。从上面你可以看出,在第一部分和第三部分能够获益最多,因为他们包含了对该领域的过去、未来的统一观察。
课本和博士论文帮你建立了基础知识,但是要想当时代的弄潮儿,还得读论文,一篇论文往往集中于比较新的一个点,并且具有创新性。通过阅读摘要,观察实验对比,丰富你的创新思维。
如果你是刚开始入坑的研究员,应该多花时间复现论文中的想法,并与自己的实验方法对比。因为这与被动的阅读相比,能够获得对问题的更深理解,另外,一旦你将比较先进的技术复现出来,那么离超越他可能就只有一步之遥。
除了阅读开创性的论文并复现它们之外,还应该关注冷门论文。用批判的眼光阅读,并找到能够帮助你的点,为你的其他想法打开大门。
Reddit网友支招
https://www.reddit.com/r/MachineLearning/comments/f4oxuj/discussion_what_are_some_habits_of_highly/
关于此类问题的讨论,Reddit机器版块从来都是不甘落后,18个小时热度已经达到265。在回复评论中很多网友分点评论给出了建议!总的来说有以下几条:
1. 从早期的试点实验中获得洞察力,不要把时间浪费在可能、大概、差不多的想法上。
2. 不要老是怀疑你选择的损失函数。
3. 和同事多多交流,解释不清楚的原理直接上手板书介绍。
4. 大多数人都喜欢谈论他们的工作。
5. 为感兴趣的项目创建代码项目文件夹,并按照功能进行排序。
6. 学着构建数据集,会清理和排序以及收集。
7. 保持数据分类良好
8. 明白“设计汽车发动机的人往往不是赛车手”,完美才是完善比较大的敌人。
9. 在处理棘手问题的时候,可以将其一分为二。
10. 知道什么时候该偷工减料,什么时候该坚持到底。