一位本科生在机器学习领域的探索中经历了不少艰辛,这其中的故事让人感到无奈。
究竟是什么让这位本科生如此困扰?
事情是这样的。
他积极参与了一个“机器学习小组”,并被分配到一位博士生的项目中。
自去年9月份起,这位博士生便让他着手处理一些与“知识图谱”有关的任务。
然而,问题从此开始。
这位本科生花费了整整三个月,才成功让GitHub上的一些模型代码得以运行。
他无奈地表示:
在此之前,我花了无数个小时试图理解预处理和评估的相关代码。
结果呢?
我仍然不知道如何让这些机器学习的代码正常运行!
本已感到沮丧,没想到更糟的事情突然袭来。
博士生提出了一个“更高的要求”——让他从一篇论文中找到一个实现相似功能的GitHub项目。
于是,他把现有的代码整合了进去……结果可想而知,完全是一团糟。
事情崩溃了!
我逐步执行每一个步骤,却依旧无法找到问题所在。
我快撑不住了,“再也做不下去了……”
现在每周与博士生的见面让他感到恐惧,因为他知道自己没有任何进展可以汇报。
痛定思痛,作为本科生的他在Reddit上发出了一个“灵魂拷问”:
机器学习代码真的这么难吗?
是我脑袋有问题吗?
你们是怎么做到的?
问题到底出在哪里呢?
“用了一周的时间,却连一个问题都没有解决,完全没有进展可以汇报?”
网友@santiagobMx1993 提出了一个建议。根据实验的期限,这位本科生可以设定一个遇到问题的解决时间,如果无法解决,就寻求同级或上级的帮助,从而快速提升效率。
例如,如果自己花了1天时间未能解决,可以再花5小时找同级的本科生一起探讨,如果仍然没有结果,再尝试花2小时去请教博士生或导师。
网友@help-Me-gRow认为,在科研实验中,寻求帮助是很重要的。有时候,自己看不到的问题,经验丰富的人一眼就能看出。
网友@linveRlan,作为博士生,也强调了沟通的重要性。他认为,帮助本科生助手完成代码调试、解决难题,或者换个更有趣的任务,都是通过沟通可以实现的。
“被分配到完全不在研究范围内的任务,难免会落后于他人?”
网友@staRfRies指出,这位本科生可能需要找到自己擅长的任务,这样才会有成就感。否则,如果给本科生分配博士生才能完成的任务,自然会感到困难。
“我的代码能编译,但一运行就出错?”
网友@TODeedee则提到了基础技能:学习如何进行模块测试(unit test)。
将机器学习模型拆分为数据收集、网络代码和训练代码等部分,并进一步将代码细分成5到25行的小模块进行调试,有助于迅速定位问题。
“给我的一些代码,我真的看不懂,这是我的问题吗?”
网友@Milkteaoppa表示,代码无法运行也可能是因为随便获取的代码质量差,导致理解困难。
如果只是想运行机器学习代码,识别低质量代码并与博士生沟通以改善代码质量都是必要的。
“作为本科生,能调试代码,但对机器学习的代码却无能为力?”
网友@TachyonGun认为,机器学习代码确实难度较大,因为需要掌握很多必要的知识,例如数学。在调试代码时,常常会遇到数值问题,如奇异矩阵和数值稳定性。
因此,想要运行机器学习代码,必须先学习数学知识(数值分析、线性代数、数学建模、概率论/高级统计)以及熟练掌握相关方法(数值和可视化方法)。
实际上,对于这位本科生所面临的挑战,许多科研工作者都有同样的感触:
辛辛苦苦做实验一个月却无法汇报进展,被导师批评;
想要复现一篇论文的代码,结果在解决“代码出错、编译出错、环境不兼容”等问题上耗费了大量时间……
正是因为如此,他们积累了经验,帮助这位本科生找到合适的解决方案。
“感谢大家的帮助。”
在网友的支持下,这位本科生冷静下来,并认真整理了网友们的建议。
他意识到自己崩溃的原因在于缺乏与博士生及其他研究者的沟通,对项目的进行方式不够了解;此外,他也确实缺乏机器学习模型和参数设置的理论基础。
当然,他也明白,自己手中的代码质量确实不高:不仅难以阅读,而且各个模块也非常松散,难以整合。
他决定去找那位博士生沟通,坦白自己遇到的问题。
然而,作为一名本科生,无论是进行毕业设计还是进入实验室,或多或少都会面临与这位“发帖者”相似的困惑。
是否存在快速入门的方法呢?
清华特奖本科生的经验
其实,身为本科生,也有同学已经发表了四篇论文。
这位清华特奖得主高天宇的真实经历中,他的四篇论文均在AI顶会上发表:两篇AAAI, 两篇EMNLP。
对于这些科研成果,他也分享了一些实用的经验,尤其是应对让人感到棘手的“拖延压力”。
高天宇建议,忙碌的同学在高负荷实验期间可以适时切换任务,并记录日常工作,以缓解因拖延带来的心理压力。
此外,他还提出了一条看似反常的建议,就是将事情推到明天。这并不是鼓励拖延,而是让自己跳出一天的忙碌思维,也许明天会有更好的解决方案。
同时,高天宇也建议多与导师及学长学姐沟通:
他们对以往的研究有更深入的了解,也在实验中积累了丰富的经验,可以帮助你避免走很多弯路。
当然,若想加强机器学习的基础理论,高天宇也提供了快速阅读论文的方法:
大多数论文只需看摘要,然后迅速分类。如果觉得有帮助,可以按照以下结构进行分析。
摘要:研究意义(包括前人研究、研究的不足),研究方法,研究结果;简介:主要观点(解决了什么问题);相关工作:文献综述;方法:细节;实验:验证论文的有效性;结论:基本重复摘要。
文献管理工具也是必不可少的。
除了高天宇的个人“秘诀”,NatuRe也曾刊登过关于“本科生进行科研”的相关文章。
NatuRe指出,本科生参与科研项目在顶尖大学中普遍存在。
例如,在MIT,这一比例超过了90%。
从课堂学习到实验室生活,确实是一个巨大的转变。
NatuRe认为,在这个转变过程中,通常会经历三个阶段(并不适用于每个人)。
第一个阶段是“在不理解的情况下从事科研”。
对于刚进入的本科生来说,首先要做什么事情是一个重要问题。
在进行某项实验时,或许并不清楚其背后的原因和本质。
第二个阶段是“在理解的基础上进行科研”。
NatuRe表示,在这种状态下从事科研的学生,往往是实验室希望留住的人才。
他们会在实验室外投入更多时间和精力,去观察实验的局限性,从而培养团队意识。
第三个阶段是“学生研究员”。
在这个阶段,学生会像研究人员一样思考:制定新的问题和假设,规划新的实验以进行测试等。
NatuRe认为,这一阶段的学生对实验室的贡献最大。
此外,NatuRe还提出了一些细节建议,比如时间管理、研究与休息的适度安排、批判性阅读及记录保存习惯等。
最后,作为正在经历此过程或曾经经历过的人,你是否也遇到过类似的问题?
