如何成为一名高效的机器学习研究者,并在这个领域取得成就?这需要养成哪些习惯?最近,一篇发布在Reddit机器学习板块的帖子引发了广泛的讨论。
帖子中,一位网友提问:“那些高效的机器学习研究者,都有哪些习惯?”比如,他们会时常跟踪Arxiv上的最新研究,利用睡眠时间训练模型,充分利用Stack Overflow等资源。除此之外,他们还具备哪些习惯呢?
事实上,世界上不乏优秀的机器学习研究者,也不缺少好的建议和指南。成为高效的机器学习研究者,最关键的是要有良好的自我管理能力和坚持不懈的决心。
OpenAI的研究科学家和联合创始人之一John Schulman曾撰写了一篇《机器学习研究指南》,提供了许多关于问题选择和时间管理的建议。在他看来,成功的关键在于解决正确的问题,并不断取得进步,实现持续的成长。
许多其他研究者也有自己独特的见解。例如,吴恩达在斯坦福大学的CS230课程中专门开设了一堂课,介绍如何阅读论文和进行研究;Reddit社区中的资深研究者也分享了许多快速开发机器学习产品和高效进行研究的方法。
选择研究课题是一项需要深思熟虑的任务,选择正确课题的能力往往比技术技能更重要。随着研究的深入,我们会逐渐发现课题的不同面貌,从而快速判断哪些方法可行,哪些方法不可行。
实际上,提升选择课题能力的方法有很多: - 阅读大量论文,并积极参与讨论; - 成立研究小组,吸取他人经验; - 向同行寻求建议,听取不同的意见; - 花时间思考哪些研究可能带来成果。
一般来说,我们有两种方式来决定下一步的研究工作: - 想法驱动:如果你在阅读文献时有了新的想法,可以立即着手进行实验。 - 目标驱动:如果是为了达成某个具体目标,那么需要解决实现目标过程中遇到的各种问题。
这两种方法并非互相排斥,任何领域的机器学习研究都与某些目标有关。从某种意义上说,想法驱动的研究是目标驱动的一部分。John Schulman在他的博客文章中提到,目标驱动的研究更加具体和明确,他本人也一直采用这种方法。
然而,想法驱动的研究存在一个风险,即容易被其他研究者的想法所“窃取”。为了避免这种情况,需要对研究主题有深入的理解,并且观点与他人显著不同,这并不容易实现。
在博士阶段的前半部分,研究的目标是让机器人能够操作可变形的物体,例如手术机器人打结和家用机器人折叠衣物。为了实现这一目标,研究者们决定从人类示范中学习,从RP2打结任务开始,逐步攻克子问题,其中一个关键问题是轨迹优化。这项工作最终成为了该项目中最具影响力的部分。
在博士阶段的后半部分,研究者对强化学习产生了兴趣,并将重点放在机器人运动上。目标明确后,研究进展迅速。为了使3D机器人学会奔跑,研究者专注于策略梯度方法,因为这种方法最适合理解和分析。在此期间,研究者开发了TRPO和GAE,并成功实现了最初的运动目标。
在研究过程中,当研究者使用策略梯度方法得到初步结果时,DeepMind团队也在Atari上取得了突破。然而,研究者认为Q-learning并不是适合其目标的最佳方法,因此继续使用策略梯度方法。这一坚持使得研究者开发出了TRPO、GAE和后来的PPO。
以目标为导向的研究有时会陷入一个陷阱,即过分追求直接而乏味的解决方案,这可能会阻碍研究者在机器学习领域的成长。研究者应该将研究定义为具有通用性和泛化性的解决方案,可以在其他问题上得到应用。
例如,在研究机器人运动时,研究者尽量避免将特定领域的知识过多地融入解决方案中,而是将问题简化为核心问题——在模拟中实现运动。通过一系列特征工程和奖励函数的设计,研究者谨慎地进行了一些调整和优化,这些调整不会对算法产生重大影响。目前,研究者正在使用游戏作为实验平台,确保算法的核心思想适用于机器人技术。
在机器学习领域,即使是非常聪明且勤奋的人也可能无法取得卓越的成果。原因之一是他们所研究的问题潜力有限:这个任务是否有可能提升10%还是10倍?
在更大的目标下进行增量研究(10%的提升)是最有效的方法。 例如,AlexNet在2012年提出时并没有引入任何全新的组件,只是累积了大量的小改进,但它却带来了前所未有的新成果。在日常研究工作中,性能会逐步提升,但所有步骤都应该朝着一个更大的目标前进。
研究是一条漫长的旅程,在这条道路上,可能会发现新的算法,发表新的论文,也可能会在最后才得到结果。为了在这条旅途中开发新的算法和见解,需要长时间集中精力解决一个问题。
然而,我们不知道旅程的终点在哪里,因此需要培养有效的习惯,以不断朝着更好的结果迈进。
养成记笔记的习惯非常重要。例如,每天创建一个条目,记录当天的工作内容、想法和实验结果。
在此基础上,每过一两周进行一次回顾性的总结,记录实验结果的分析、有价值的见解、代码进度以及下一步的工作计划。
这样做有什么好处? - 一方面,笔记本可以帮助你及时记录想法,并提醒你在回顾过程中重新思考一些可能被遗忘的问题。 - 另一方面,笔记本就像一个收纳箱,帮助你整理实验结果。有些结论容易被遗忘,例如哪些超参数很有价值,这时你就可以参考笔记内容。 - 此外,笔记还可以帮助你梳理时间管理方面的问题。有时你可能会想:“上周我都做了些什么”,翻阅笔记就能找到答案。你可能会发现自己需要提高时间管理能力,或者发现自己在过去几个月里频繁转换想法,导致半途而废。
说到这里,我们再来探讨一下“换思路”的问题。通常,解决一个具有挑战性的问题需要投入足够的时间和精力。但是,有时难以判断:我已经投入了足够的努力吗?是否应该换一条路走?
根据经验,频繁更换思路比停留在原地不动更容易失败。尽管可能存在一些具有巨大潜力的新思路,但更常见的情况是失望。如果你回顾笔记内容,发现过去一段时间内大部分精力都花在未完成的项目上,这样的项目既不算失败,也没有明确的成果。
因此,可以采取一种策略:设定固定的时间尝试新思路,例如每周花一天时间探索与当前项目完全不同的想法,这样也有助于拓宽知识面。
在研究生涯中,无论如何分配时间,你都需要学习很多东西。但从长远来看,如果你有规律地留出时间专注于个人发展,就更有可能取得出色的工作。具体来说,在从事现有项目的同时,应该抽出一部分时间来充实机器学习领域的基础知识。
充实机器学习领域的知识有很多方法,主要包括阅读教材、学位论文和其他论文,并复现算法。在研究生涯初期,建议将时间重新分配在教材和论文上,重点选择部分内容进行消化和理解,同时基于感兴趣的内容复现实验和算法。
大多数学生在完成学校课程后不再花时间阅读教材,这是一个错误的做法。与论文相比,教材通常以更集中的方式传递知识。会议论文通常包含一个主要的新观点,但背景知识部分过于简略。此外,在阅读论文过程中,除了论文本身,还需要花费更多时间理解复杂的符号和术语。与论文不同,好的教材融合了几十年的思想,以循序渐进的方式展示复杂的符号。
阅读学位论文也是不可或缺的。对于感兴趣的课题,可以阅读相关研究者的博士论文。机器学习领域的博士论文通常包括引言和背景材料、一些已发表在顶级会议上的论文以及结论和展望。论文的背景材料和结论部分通常凝聚了专家对该领域过去和未来观点的总结,从中可以获得很多有益的见解。
在斯坦福大学的CS230课程中,吴恩达也分享了他的阅读论文的建议。高效阅读论文的关键在于多次阅读,每次阅读的目的都不同。
首先,第一遍只需阅读标题、摘要和图表,摘要能告诉你论文的主要内容,而许多深度学习研究都可以总结成一两张图表。第二遍则需要阅读引言、结论和图表,其余部分可以暂时忽略。在阅读引言时,可以忽略相关研究部分,因为第二遍需要抓住主要思想。
第三遍阅读时,可以纵览论文主体,但那些耗费时间的数学推导部分可以暂时跳过。第四遍则需要阅读所有内容,但仍然可能有一些部分无法理解,可以暂时跳过,以后再攻克。
除了上述建议,Reddit上的网友也分享了他们的观点,其中一些人认为团队合作非常重要。通过与同事交流,解释不明白的观点或算法,并说明自己尝试做的事情,通常更容易发现问题和潜在问题,同事也能提供自己的见解。
除了学术领域,还有网友分享了在工业界交付产品时的一些实用方法和建议: - 为自己感兴趣的项目创建一个工作代码文件夹。 - 如果发现有趣或类似的内容,尝试使用已发布的代码。 - 在运行Python时,可以使用pyenv来轻松应对不同的需求。 - 如果代码库有效,创建一个标记为“有效”的文件夹,方便下次查找。 - 学会创建数据集并进行预处理和分类。 - 收集与研究相似的数据集。 - 当有更好的代码出现时,尝试使用。 - 当意识到需要改进观点时,使用已有方法优化数据集。
在机器学习领域,每个人都有自己的一套研究方法,一些好的建议和做法不一定适用于所有人。因此,认清自己并探索适合自己的道路至关重要。