6年机器学习学习之路总结(16分钟版)

文摘   2024-08-10 17:21   新加坡  

这篇文章记录了作者Boris Meinardus在过去六年中深入学习和研究机器学习的经历。他从对物理和数学的兴趣出发,通过学习计算机工程和编程,逐步进入了机器学习的领域。文章详细描述了他在大学期间的学习历程、实验室经历,以及通过自学和实践逐步深入的过程。

  • 文章首先介绍了作者在大学前两年中打下的基础。他学习了数学和编程语言,如C和Java,并在光学物理实验室获得了宝贵的研究经验。

  • 进入第三年后,作者开始接触人工智能课程,特别是强化学习领域,并在相关主题上完成了他的学士论文。

  • 第四年,作者全身心投入到机器学习的研究中,参与多个项目并在顶级会议上发表论文。

  • 第五年,他面临职业选择,决定继续深造,专注于计算机视觉和多模态学习。第六年,作者完成了学业,选择加入他最喜欢的一家AI初创公司,担任研究科学家。

文章通过作者的亲身经历,强调了持续学习和尝试的重要性,以及在追求目标时面对挑战和失败的态度。作者鼓励读者享受学习的过程,并为自己的努力感到自豪。

这是文章的链接,还有在Medium上的截图,发布时间是2024年7月23号,蛮新的一篇文章。

随着大模型时代的到来,算法、算力和数据成为推动技术进步的三大支柱。虽然初创公司可能在算力上不及大公司,但通过精准定位应用场景和积累特定领域的数据,依然可以释放巨大潜力。这正是数据工程师和数据科学家的重要性所在。

我选择翻译这篇文章,是因为Boris Meinardus的经历不仅体现了个人成长和学习的过程,更重要的是,他的故事强调了深入理解机器学习模型的重要性。

同时希望通过分享这篇文章,帮助更多人认识到数据工程师和数据科学家的角色不仅限于数据处理和模型应用,还包括对技术发展趋势的理解和未来可能性的探索。

下面是翻译的正文,我尽量保持了原文的意思,只是在部分地方做了改动,Boris说同意我在微信公众号平台做分享,只要在文章中提到他的文章出处就行。这里我强烈建议有英文基础的读者阅读Boris Meinardus的原文,以获取更加原汁原味的内容。下面是文章的链接:

https://pub.towardsai.net/6-years-of-studying-ml-in-16-minutes-729fb423a2a3

正文

在过去的六年里,我经历了一段充满挑战与成就的机器学习之旅。这段旅程从我完全不了解机器学习开始,直到今天,我即将以研究科学家的身份加入我最喜欢的AI初创公司。这篇博文将详细回顾这六年来的学习与工作经历,分享我在每一年中所做的关键决策和实践,同时揭示一些你应该避免的常见陷阱。

我的旅程始于计算机工程的学习。那时,我对机器学习一无所知,甚至不了解它的存在。然而,随着学习的深入,我逐渐接触到了这一领域,并最终决定投身其中。前两年,我专注于打牢计算机工程的基础,并在此期间获得了我的第一份机器学习学生研究员的工作。这段经历不仅让我得以参与实际项目,还为我赢得了发表前三篇论文的机会,为我的研究生涯奠定了坚实的基础。

在接下来的几年中,我全身心投入到机器学习的研究中,特别是在强化学习和计算机视觉领域。我不断通过自学和实验室实践来提升自己的技能,并积极参与学术界的讨论和交流。这些努力最终让我获得了研究科学家的职位,达成了我当初设定的目标。

这篇博文不仅仅是对我个人经历的回顾,更是希望为那些刚刚开始机器学习之旅的人提供一些指导。我将分享在前几年可以期待的学习和工作内容,以及如何找到第一份学生研究员的工作。最重要的是,我会指出在学习和职业发展中应尽量避免的误区和陷阱。

相信我,这一路走来,我积累了很多经验和教训,迫不及待地想要与你们分享。希望我的经历能为你的机器学习之旅提供一些启发和帮助。

第1-2年

在分享我第一年和第二年的经历之前,我想先谈谈我是如何进入科技领域的。

在高中时期,我对物理和数学充满了兴趣。当时的我年轻且充满热情,心里想着:“研究物理虽然很有趣,但似乎不太赚钱,所以我需要学习工程,比如应用物理。造一个机器人听起来很酷,但我要让它做我想做的事情,还得学会编程!”

那个时候,我还不知道AI和机器学习的存在,但这种想法推动我选择了柏林工业大学(TU Berlin)的计算机工程专业。

前两年真的非常艰难,这似乎是学习工程的必经之路。我必须学习标准课程,如线性代数1、微积分1和2,以及一门微分方程课程。(还好不是偏微分方程!)幸运的是,我对数学的热爱让我在艰难的学习过程中保持了动力,但这并不意味着这些课程对我来说就变得容易了。

一开始,所有这些数学公式和抽象概念看起来毫无意义,你也不知道为什么要学它们。但我向你保证,随着时间的推移,这些概念会变得清晰,你会逐渐理解它们的用途,特别是在学习机器学习的时候!这些数学技能将为你奠定坚实的基础,让你能够从数学的角度直观地理解机器学习模型。

即便在那时,我依然对AI一无所知。我学习了许多电气工程和物理课程,那些课程甚至更为艰难,但也让我接触到了第一门计算机科学课程,并学会了用C语言编程。是的,C语言,没错!毕竟我是计算机工程专业,课程设计的重点是低级编程和电气工程。不过,我也上了标准的Java数据结构与算法课程,以及理论计算机科学课程。这些基本上都是计算机科学专业的标准内容,涵盖了一些理论知识和大量的编程练习。

除了正常的课程学习,我在第一年里还获得了第一份学生研究员的工作,为期大约六个月。我在一个光学物理实验室工作,这份工作不仅为我提供了赚取生活费的机会,还让我有机会提升简历并学习新知识。

在看到大学旁边研究所的招聘信息后,我决定申请这份工作。说实话,当他们邀请我去面试时,我感到非常惊讶。毕竟,除了基本的编程技能和对电气工程的一点了解外,我几乎没有什么可以拿出来展示的,但我猜对于我要做的工作来说,这已经足够了。我负责进行大量的光纤实验和测量。

刚开始这份新工作时,学习曲线非常陡峭,我学到了很多新东西,这是一个非常棒的体验。然而,如果你在同一份工作上持续做超过一年半,学习曲线就会趋于平缓,工作也会变得乏味。我在这份工作上总共待了三年,而在大约八到九个月后,学习的曲线几乎完全平坦了。这是一个巨大的错误……我本该在一年后至少换到研究所的其他团队,但当时我非常疲惫。在前两年里,我每晚只睡六个小时,几乎没有时间锻炼,只是一味地投入到学习和工作中。

尽管如此,我并不抱怨,因为我确实从中收获了很多。我享受并为自己所做的一切感到骄傲。是的,这些都发生在我大学的前两年里!最重要的是,这段时间里我学到了数学和计算机科学的基础知识,并积累了作为学生研究员的工作经验。这一切都为我日后学习机器学习打下了坚实的基础,尽管当时的我对机器学习还一无所知。

注释:

  1. 线性代数、微积分、微分方程:这些是机器学习的数学基础,对理解机器学习算法很重要。
  2. C语言:一种低级编程语言,通常用于系统编程和嵌入式系统。
  3. Java:一种广泛使用的面向对象编程语言。
  4. 数据结构和算法:计算机科学的核心课程,对提高编程能力很重要。

第3年

进入第三年,第五和第六学期时,我终于可以自主选择一些课程了。在第五学期,我发现大学里开设了AI课程,毫不犹豫地,我选择了这门课!可以说,这才是我真正开始机器学习之旅的地方。

不过值得一提的是,这门AI课程其实分为两个部分,而我在第一部分学习的内容并不是机器学习,而是传统的AI方法。(顺带一提,随着大模型的崛起,现在连机器学习都被视为传统AI了。)要知道,AI并不总是等同于机器学习。如果你有一个带有一套规则来做决策的算法,它实际上就是AI。在这部分课程中,我学习了STRIPS方法等传统AI技术。虽然回想起来,这些内容可能并没有那么令人兴奋,但它确实是我的起点,那时的我也觉得还不错。

然而,这门课的第二部分就真的很酷了!第二部分的内容是关于强化学习(RL)的。回头来看,开始学习机器学习却从强化学习入门,确实有点奇怪——在甚至还不知道什么是神经网络之前就直接接触了RL。不过,也许这正是一个证明:如何开始并不重要。如果你坚持下去,最终你会学到所有基础知识,只不过顺序可能会有些不同。当然,如果你有选择,可能不建议这样开始,但你明白我的意思就好。

总之,我在这门课中学习了如赌博机理论、蒙特卡洛树搜索(MTCS)、马尔可夫决策过程,以及Q-Learning等RL算法。因此,在我的第五学期,也就是进入大学2.5年后,我仍然没有接触到太多的机器学习内容。但这些RL课程确实激发了我对机器学习,尤其是RL的浓厚兴趣。这也是为什么我决定在RL方面撰写我的学士论文。

在第六学期,我开始研究用于自主机器人导航的深度强化学习。这次的体验完全是从零开始的深度学习之旅——那时的我甚至还不知道什么是神经网络!为了完成论文,我不得不通过YouTube视频和博客文章自学所有相关内容。

更糟糕的是,一开始我在硬件设置上遇到了很大的困难。当我向导师求助时,他甚至怀疑我是否准备好了,给了我两周时间来证明自己。要是我失败了,他可能就会放弃指导我,那将是非常糟糕的,因为学期已经开始,如果失败,我就得重新找一个论文题目。

但我坚持下来了,并且成功了!这个论文项目花费了我大量的时间和精力——主要是工程工作,而不是真正的模型训练,因为我的论文更多地关注的是DRL代理的部署,而不是训练。尽管如此,我还是学到了很多核心编码技能,比如调试,并且第一次接触并使用了PyTorch。

所以,在我学士学位的最后一年,我慢慢但坚定地迈入了机器学习的世界。这为我日后全身心投入到机器学习领域铺平了道路,也因此我在毕业后决定攻读纯计算机科学的硕士学位。

注释:

  1. STRIPS:STRIPS(Stanford Research Institute Problem Solver)方法是一种用于规划问题的经典算法。它由理查德·福克斯(Richard Fikes)和尼尔森(Nils Nilsson)在1971年提出,用于描述和解决自动化规划问题,特别是在人工智能(AI)领域。
  2. 强化学习(Reinforcement Learning, RL):机器学习的一个分支,关注如何使代理通过与环境互动来学习最优策略。
  3. 赌博机理论:强化学习中的一个基础概念,用于理解探索与利用的权衡。
  4. MTCS(Monte Carlo Tree Search):一种用于决策的启发式搜索算法。
  5. 马尔可夫决策过程:用于建模决策问题的数学框架。
  6. Q-Learning:一种经典的强化学习算法。
  7. PyTorch:一个流行的深度学习框架。

第4年

我的第四年开始了,我终于全身心投入到机器学习的世界中!这一年,我专注于选择与机器学习相关的课程和项目,但这当然也带来了不少挑战。

在我的第一个研究生学期,我的课程相对简单,主要集中在一门大课和一个大项目上。对于这个项目,我继续参与了我在学士论文期间所做的自主机器人导航团队的工作。这个项目仍然以工程为主,因为我们为自主机器人构建了一个基准测试套件,这涉及到大量的失败和调试过程。然而,这次我能够更加专注于使用PyTorch训练我们自己的代理,并开始阅读大量论文来学习PPO(近端策略优化)等内容。

刚开始阅读论文时,确实有些困难,主要是要适应大量的专业术语,但这一切也让我感到非常兴奋。我真的觉得自己像个真正的科学家了!更酷的是,在那年晚些时候,我们的研究成果实际上在IROS(国际机器人与智能系统大会)上发表了,这可是机器人领域的顶级会议之一!对我来说,这简直意义重大——这是我第一篇机器学习论文,而且还发表在如此顶级的会议上。

除了这个项目之外,我还上了第一门真正意义上的机器学习课程。在这门课上,我学习了经典机器学习的所有基础知识,例如什么是监督学习、无监督学习,什么是偏差-方差权衡,以及线性回归、决策树、支持向量机、K-means、PCA(主成分分析)、Boosting和集成学习等方法。我还学习了神经网络的基础知识,包括损失函数、梯度下降、反向传播和正则化的概念。这门课不仅有理论学习,还包含了大量的实际操作作业,每次讲座之后都要用PyTorch实现我们在课堂上学到的知识。

与此同时,我仍然在那个无聊的物理实验室工作,这时我已经在那里工作了2-2.5年了。但幸运的是,我工作的研究所也有一个AI部门!于是,我决定尝试内部调动,申请加入这个团队。尽管我得到了面试机会,但最终还是被拒绝了。我可以理解,毕竟那时候我刚刚开始上第一门真正的机器学习课程,还没有足够的理论知识。

不过,我并没有放弃,而是选择在半年后再次尝试。这一次,我已经完成了机器学习课程,积累了更多的PyTorch经验,最终成功得到了这份工作!这为我的第二学期,也就是第四年的下半年,带来了一个令人兴奋的开始——我终于在机器学习部门担任应用科学家的学生研究员!这次我又迎来了陡峭的学习曲线,对新的工作充满了期待。

在这最初的六个月里,我开始做大量的数据工程工作,主要使用pandas,这对我来说是全新的体验。我在那里学到了很多东西,也为自己积累了宝贵的实践经验。在大学里,我也专注于纯实践学习,选修了两门项目课程。我继续从事机器人项目,但那时我对这个项目已经感到有些厌倦了。尽管如此,我还是坚持下去,因为希望能再发表一篇论文。

与此同时,我开始关注其他更酷的机器学习领域,并选修了另一个项目课程——一个关于医学图像分析的计算机视觉项目。这是我第一次接触计算机视觉,任务是检测3D脑部图像中的动脉瘤。这个项目真的很有趣,但由于我从未接触过计算机视觉,也不懂卷积神经网络(CNN),学习曲线再次变得非常陡峭。我不得不通过观看YouTube视频和阅读更多的论文来自学这些知识。虽然最终项目的结果并不完美,但也不算太差。回想起来,我觉得这是件好事——如果你在回顾旧项目时,认为它们不够好,因为现在你有了更多知识可以做得更好,那就说明你在不断进步!

所以,在这一年里,我尽可能地将时间安排得满满的,几乎所有的精力都投入到了机器学习的项目中。尽管只选修了一门机器学习课程,但这门课非常重要,为我打下了坚实的理论基础。到目前为止,一切进展得还算顺利,但在接下来的一年里,我必须做出一些重要的决定!

第5年

进入研究生的第三个学期,我面临着大学课程和职业发展的双重挑战。在课程选择上,我继续保持对机器学习的专注,但也意识到必须做出一些重要的职业决策。

在这个学期,我选择了一门深度学习课程和两个项目课程。深度学习课程虽然在内容上与我之前学习的机器学习课程有所重叠,但也引入了更多高级内容,比如卷积神经网络(CNN)、循环神经网络(RNN)、自编码器以及一些可解释AI的讲座。虽然这些内容对我来说并不算太新鲜,但我依然非常投入AI的学习,甚至开始在YouTube上观看论文评论视频,并随机阅读一些AI相关的论文。尽管这门课没有太多新内容,但培养了我自学的习惯,这也是我至今仍在坚持的学习方式。

除了这门深度学习课程,我继续在那个已经有些厌倦的机器人项目上工作。老实说,这个项目已经不再让我感到兴奋,但我依然坚持下去,希望能够发表一篇论文,尽管最终未能如愿。这学期的另一个项目课程却非常有趣,涉及强化学习。我必须彻底阅读一篇论文,重新实现并复现其结果。这是一次非常有价值的学习经历,我甚至为此写了一篇博客文章,并尝试投稿到一个顶级机器学习会议的博客文章专栏。虽然最终没有成功发表,但这个项目让我对成为顶尖机器学习研究员的目标更加坚定。

然而,我逐渐意识到,我在研究所的学生研究员工作已经没有太多新意了。尽管我们开始研究图神经网络,但一年多来,我依然在做大量的重复性数据和特征工程工作,学习新知识的机会越来越少。因此,我决定不再犯之前的错误——在一份工作上停留太久。我开始申请顶级机器学习实习,尤其是像亚马逊这样的公司。然而,尽管我获得了面试机会,但由于准备不足,我在面试中表现惨淡,未能通过。随后的几次面试,包括在Nuro和Google DeepMind的尝试,也都以失败告终。

面试的失败让我重新审视自己的职业方向。我决定不再追求实习机会,而是专注于寻找一份新的学生研究员工作,同时为我的硕士论文寻找一个合适的导师。我已经对强化学习感到厌倦,而计算机视觉逐渐成为我的新兴趣,但我想更进一步,探索多模态学习的可能性。然而,在我的大学里,没有教授专注于多模态学习,我不得不在TU Berlin之外寻找更合适的导师。

通过阅读多模态学习的论文并查找作者信息,我找到了一个完美的导师——一位年轻有为、刚刚开始担任教授的学者,他曾在UC Berkeley做博士后研究,并在Meta工作过。他的研究方向正是多模态学习,完全符合我的需求。经过联系和面试,我很幸运地得到了这份工作,并在第四年末开始与他合作。

虽然我的目标仍然是进入大型科技公司,但我也明白,达到目标需要时间,有多种途径可以通往成功。在这个学期,我专注于提升自己的编码技能,继续参与机器人项目,并重新实现强化学习论文。尽管申请暑期实习的尝试失败了,但我决定专注于计算机视觉领域的学习和研究。

在学术方面,我选修了两门与计算机视觉相关的课程:自动图像分析课程和深度学习研讨会课程。在研讨会课程中,我学习了自监督学习,并将我的学习成果制作成了一个关于表示学习的迷你系列。在此期间,我还上了一门更高级的深度学习课程,学习了表示学习、自监督学习、Transformer、GAN、扩散模型、图神经网络,甚至神经微分方程。这门课程让我进一步深化了对机器学习的理解,并为我日后的研究提供了坚实的理论基础。

尽管这学期的课程结束后,我本应完成硕士学位,但我主动决定延长一年时间,这样我可以专注于实习和完成硕士论文。这一年我没有课程安排,完全专注于研究和写作。与新教授的合作让我能够深入探索多模态学习,并最终完成了我的硕士论文。这就是我在最后一年所做的事情,这一年让我真正走上了成为顶尖机器学习研究员的道路。

第6年

我终于完成了大学学业!至少感觉上是这样,因为我再也不用面对考试了。

接下来,我开始了与那位酷炫教授合作的旅程,专注于多模态学习,特别是视频时刻检索的研究。我投入了大量时间阅读相关论文,开发了一个在我评估的基准测试中达到最先进性能的模型,并在很短的时间内写了一篇论文。

在完成这篇论文的过程中,我经历了几周巨大的压力,最终将它提交到一个顶级会议。可惜的是,论文被拒绝了。老实说,我可能明白其中的原因——为了赶上提交截止日期,我在最后阶段匆忙完成了论文的写作。如果我能花更多时间去打磨,也许会更扎实,并有更好的机会被接收。在我的Substack时事通讯中(borismeinardus.substack.com),我分享了更多关于这次拒稿的教训,以及我在机器学习研究中的一些经验。这些内容在Medium上可能不太合适,但对那些在机器学习领域奋斗的人来说,或许会更有帮助。尽管论文被拒绝了,但我不会因此而停下脚步,我计划继续改进这项工作,并很快再次提交到另一个会议。

不过,在完成这些工作的同时,我还得提醒自己,我还没有真正完成我的学位,我还需要完成硕士论文的写作和提交。既然这已经是我的最后一年,我也不得不开始认真考虑接下来的职业规划。

在这一点上,我面临着一个选择:要么跳过博士学位,直接进入顶尖实验室成为研究员,要么继续攻读博士学位。虽然跳过博士学位直接成为研究科学家的可能性不大,但我还是决定尝试申请几家公司的研究职位。酷的是,我的教授已经给我提供了一个博士职位,我很高兴地接受了这个机会,但我仍然想看看自己是否能在不读博士的情况下直接进入行业。

于是,我尝试申请了两家公司的研究科学家职位。首先是DeepMind,尽管我有与他们要求的不同经验组合,但最终还是被拒绝了。不过,我还申请了另一家我最喜欢的AI初创公司。我起初并不抱太大希望,甚至认为自己不会得到面试机会。但在一个夜晚,我突然决定,“为什么不试试呢?”反正他们也不一定会邀请我。

结果可能出乎你的意料,他们真的邀请我面试了!我感到非常震惊,因为这是我最喜欢的一家公司。申请过程相当艰难,我决定全力以赴,看看自己是否足够优秀。长话短说,我最终得到了offer,几个月后,我将开始为他们工作。一旦正式入职,我会宣布是哪家公司,不用担心!对我来说,这真的是一个大事件,我也想让它保持一点神秘感。

总的来说,这些年来,我经历了许多挣扎,但也取得了一些偶尔的成功。最重要的是,我学会了要不断前进。每个人前进的速度不同,有些人比我用更少的时间达到同样的位置,有些人则需要更多的时间。但这并不重要,重要的是每天都在进步1%,并享受你所做的事情,且为你的努力感到自豪。

然而,如果你了解一些常见的错误,你就能避免很多不必要的时间浪费。因此,你可能会感兴趣阅读我的下一篇博客文章,那里我分享了7个机器学习初学者每年都会犯的常见错误!

注释:

  1. CNN: 卷积神经网络,一种常用于图像处理的深度学习模型。
  2. 循环神经网络: 一种适合处理序列数据的神经网络。
  3. 自编码器: 一种无监督学习算法,用于学习数据的有效编码。
  4. 可解释AI: 旨在使AI系统的决策过程更加透明和可理解。
  5. 图神经网络: 一种用于处理图结构数据的深度学习模型。
  6. Leetcode: 一个流行的编程练习和面试准备平台。
  7. 多模态学习: 结合多种类型数据(如图像、文本、音频)的机器学习方法。
  8. Transformer: 一种基于注意力机制的深度学习模型,广泛用于自然语言处理。
  9. GAN: 生成对抗网络,一种用于生成新数据的深度学习模型。
  10. 扩散模型: 一种生成模型,通过逐步添加和移除噪声来生成数据。

附录:下一篇文章的链接:

7个机器学习初学者每年都会犯的常见错误! 

https://pub.towardsai.net/7-mistakes-beginner-ml-students-make-every-year-04c0bd61bb2b


蔡荔谈AI
AI科普 AI培训 超级个体 创业
 最新文章