大家好,我是菜菜卷。
关于是想从事算法岗还是其他岗位,我不做劝退也不做劝进,大家可以根据我另一篇帖子:跨专业秋招上岸大厂cv算法岗学长浅谈岗位选择决定以后想做的方向,本文仅分享一下关于上岸算法岗的经验。
我本科毕业于生物医学工程专业,没有学过任何的计算机相关课程和语言,第一次接触计算机是在2018年考研的时候学习了计算机统考的408(计算机网络,操作系统,数据机构,计算机组成原理)这四门科目,然后复试的时候学习了c++。秋招拿了若干互联网公司的算法岗offer,最后决定入职字节跳动的ssp+。
下面我将以时间线为主线介绍一下各个时期我做了什么(其实主要还是围绕着开头帖子里说的几个方向来丰富自己),想走算法岗的同学可以根据自己的情况往相应的方向努力。
复试结束后到研一开学前
这段时间是到秋招前为数不多的清闲时光,是一个好好打基础的阶段,尤其是对于我这种完全零基础的同学,这段时间可以说是为我提供了很好的充实自己的机会。
python基础
第一个要补的是语言,因为ai算法的话基本上要以python为主,所以最开始学习了python的相关书籍和视频,我使用的书是:python程序设计(见下图),看的视频是北京理工大学嵩天老师的python课程。
机器学习相关理论
在学习完python后,要开始陆续学习机器学习相关的理论知识和实践经验了,我使用的是吴恩达的机器学习系列视频和林轩田的机器学习基石和机器学习技法。
其中吴恩达的会更通俗易懂,更适合入门(强推);林轩田的会更偏重理论公式层面方面的推导,新入坑的同学会听的云里雾里的,有精力和时间的同学可以选择性去学习。
研一上学期
因为研一的课程较多,占用的时间也较多,所以精力实在有限,因为开学前对机器学习大致了解了一些,但是还是不够深入,所以这个阶段我选择进一步加强对机器学习的理论的理解能力和具体代码的实践能力。
首先关于机器学习理论方面的经典书籍有两本:周志华的西瓜书(配合南瓜书使用)
和李航的统计学习方法(第二版)
其中西瓜书讲的跳跃性更大一些,配合南瓜书(西瓜书作者周志华实验室的硕博生写的对西瓜书所有公式的推导)使用更佳;李航的统计学习方法的公式推导会更为详细一些,我当时使用的是统计学习方法,花了整整56天才完成了统计学习方法这本书的所有公式推导和内容理解。(课程任务还是占用了太多时间了,所以只能课余时间和晚上才来看这个)对学弟学妹们来说,两者选一个就好了(统计学习or西瓜书)。
在通篇推倒过统计学习方法的公式后,理论基础也有了一些,所以下面我选择进一步加强自己的实践能力,使用书籍是机器学习实战(见下图)
由于书籍较老,使用的代码都是python2的,我花了41天才将所有的代码转化为python3并且在小的数据集上跑通。总的来说这本书还是比较经典的,不过这个的必要性不如西瓜书或者统计学习方法那样,精力实在有限的同学可以选择跳过这部分。
在补充完机器学习相关的理论和实战以后,可以开始深度学习方向的学习了,推荐吴恩达深度学习视频(强推),因为我做的是cv算法方向,所以在看完吴恩达视频后选择阅读计算机视觉的入门书籍:深度学习入门(鱼书)。
整体来说鱼书有理论有实践,整体不难,我用了10天就完成了整本书的阅读。建议从事cv算法的同学读一下这本书(强推),nlp或者机器学习方向的同学就没有必要读了,因为这本书大部分都在介绍计算机视觉相关的CNN。
哦对,在学习这些基础的时候顺手参加了研究生数学建模拿了奖(虽然没什么含金量)。
研一寒假
研一上基本上算是把大方向上需要的理论基础和实践基础搞定了,所以研一下就开始更细节方向的知识补充了,寒假首先是阅读了一些顶会论文,大致了解了一些前沿的工作大致是怎么样的,并阅读了要做的方向的一些经典论文,构建了一个初步的大致的思路。
同时研一寒假我也开始刷leetcode题目了,为后面的实习和秋招做准备。
研一下学习
主要精力除了上课以外,其他的主要投入有:①. 研究方向的论文阅读; ②. leetcode; ③. ai相关比赛;④.鱼书二刷,吴恩达视频二刷;⑤.深度学习框架的学习
②. 关于leetcode的话,强推一本书,cookbook(在路飞学习交流群:941088436,群文件中有),作者是哈工大的一个博士,关于题目分类整理的非常好,非常利于系统的学习算法。
③.关于ai比赛的话,含金量最高的比如cvpr等顶会举办的比赛,top名次可发表workshop技术报告;其次含金量非常高的比如kaggle和天池,除此之外,科大讯飞,华为等其他平台也有ai相关比赛。
⑤. 关于深度学习框架的话,我当时是学习了TensorFlow2.0和pytorch,不过个人更建议pytorch哈,开源代码较多,pretrain模型更全。这里强推北师大一个大佬的github项目,新手入门tf和pytorch的实例写的很不错。项目链接为:eat_tensorflow2_in_30_days和eat_pytorch_in_20_days。
相关收获的话,刷了大概200道左右的leetcode,拿了kaggle比赛的银牌。
在期末期间开始投递实习,并且最后靠kaggle比赛的银牌和之前含金量不高的数模比赛顺利拿到了百度的算法实习offer。
研一暑假和研二上和寒假
研一刚结束期末考试我就去百度实习了,因为是瞒着老师偷偷去实习的,所以每周四还要按时参加学校组会,当时实习的时候,基本上周一到周五白天都要去公司做实习相关的事情,然后晚上九点多下班后回出租屋读论文,周末在科研之余会刷一些leetcode保持手感,因为leetcode对技术岗的同学肯定还是非常重要的。
11月份的离职回到学校,开始疯狂的leetcode。因为有实验室的每周汇报,所以我就强迫自己每周花两天时间搞完汇报的内容(当然每次都因为内容不足被老师骂,被老师质疑能力低下,不过究竟是为什么,只有我自己懂),剩下的五天算是节约出来了,就高强度的刷leetcode(每个月刷130-150题左右),到寒假前几乎都是这个状态。在放寒假的时候,我leetcode刷题数已经到了接近600题。
此时我也正在筹划着如何在过完年的时候找实习,所以在离过年30天的时候开始准备在推导一遍统计学习方法的公式(面试中可能会问),最终在大年初十前完成了统计学习方法方法公式的第二遍推导。
整体来说对学弟学妹们的建议是最好在研一暑假或者研二上前能够完成以上的基础准备(夯实的理论基础,leetcode,实践能力,其中实践能力最好的证明就是比赛的top名次),然后依靠这些去找互联网大厂的算法实习。
研二下
找实习大概一个月左右的时间,陆续拿到了华为、字节、网易、滴滴、旷视的算法实习offer,因为地点原因,选择去离学校近的旷视南京研究院实习(因为是偷偷去的,每周还要回学校开组会),这段实习比较长,持续了大概6个月的时间,基本上持续的状态就是工作日做实习的事情(忙完了就摸鱼刷leetcode),周五早退回学校开组会,周末做下周科研汇报的内容。
然后从六月底开始,陆续开始投递秋招提前批的简历。
重点:想做算法的学弟学妹们,尤其是实验室不具备发顶会顶刊条件和传统的学弟学妹们,一定一定要在研二下开学之前准备好实习所需的事情,然后研二下的时候尽力实习1-2段,这样秋招的竞争力才会更强一些。再就是秋招投递的话,越早越好,越早越好,越早越好。没准备好的也只能边面试边补充,因为算法hc实在是有限,投的晚可能hc就被别人占了。
最后祝学弟学妹们都可以找到自己感兴趣的方向,踏踏实实一步一步的喜提ssp~