算法|三年前,我差点成了爬虫大师

最近很多刚入学的学弟学妹给我们留言,听说算法岗现在竞争很激烈,还能转机器学习吗?实习对于找工作重要吗?

算法|三年前,我差点成了爬虫大师
文章图片

看完他们的疑问,三年前的经历在我眼前历历在目。
研一修完毕业学分后,我去创业公司实习了一年。期间,我从爬虫入手,一路摸爬滚打,实现了千万级微博评论自动抓取,在即将成为“爬虫专家”前,受师兄指点转向DL算法。
下面我以「就业」为导向,分享一条亲身经历的学习路线。参考这个方法,在深度学习方向拿到offer进大厂,不是啥难事儿。
一、研一:基础理论学习
研一的主要工作是学理论,打基础。
然鹅学校的课程基本属于科普讲座,很多内容仅靠上课是远远不够的。
这里我把第一年的学习任务细分了4个方向。

1)深度学习理论
基础不牢,地动山摇。没有扎实的基本功,无论是做科研还是做项目,都很容易捉襟见肘。
那怎样学习效率最高呢?
如果你觉得看大头书很枯燥(比如《深度学习》花书),我推荐你直接看吴恩达和李宏毅老师的深度学习视频课。
内容既权威又有趣,看完会让你觉得学习简直是一天中最快乐的事!
算法|三年前,我差点成了爬虫大师
文章图片

算法|三年前,我差点成了爬虫大师
文章图片

这些网课都有配套的编程练习,学一课做一课,养成好习惯,及时查漏不缺。

看完视频,如果想检测一下自己的学习效果,推荐你参考我在知乎的一篇回答,看看第一部分“理论基础”问题,自己能轻松解答多少。
如果你是面试官,你怎么去判断一个面试者的深度学习水平?[1]
例如了解前向传播反向传播,以及链式求导;给一个两层的MLP和简单的二维向量,能推导出 forward propagation,再用 chain rule 推导出 back propagation。

2)确定研究方向
经过前面的理论学习,你应该发现深度学习领域有很多细分方向,例如语音、自然语言处理、视觉、强化学习、纯深度学习理论。
所以第二步我们要明确自己的研究方向,并在之后两年的学习中有所突破。
如果你喜欢语音交互,熟悉C++,可以选择语音识别、语音合成等研究课题;
如果你喜欢研究文本和对话,熟悉Python和爬虫,可以选择自然语言处理方向;
如果你喜欢图片与视频,熟悉Python,对算法落地也很感兴趣,可以选择计算机视觉方向;
至于强化学习、深度学习理论研究等方向,如果不是自身基础非常扎实或有优秀的师兄师姐指导,建议谨慎入坑。
这一步大家不要着急,既要了解不同方向,更要认真了解自己,包括能力、性格、特质。如果对自己研究领域没有热爱和兴趣,到了中后期会非常痛苦,即便再换方向,沉没成本也会很高。
好比让你挑一道菜吃十年,什么才会是你的首选呢?

3)阅读经典论文
选好方向之后,下一步的重点是阅读该领域的经典论文,包括传统方法,以及近期热点。
如果你和我一样主攻自然语言处理方向,那应该对最早期的神经网络语言模型(2003)、静态词向量word2vec(2013)、动态词向量ELMO(2018)、预训练语言模型BERT、RoBerta、GPT(2018-2020),以及近期流行的prompt训练(2021)都有清晰的认识,明白哪些场景适用哪种方法。
然后再往下细分,选择子领域内的论文阅读。
如果研究对话系统,对于常规的分类、匹配算法应该非常熟悉,同时了解基于神经网络的DST算法,不同召回策略等等。
还不知道怎么搜论文的同学,这里教你两种万能搜索方法。
1. 正向检索
在谷歌学术、arxiv、ACL Anthology输入英文关键词,检索相应主题的paper,注意查看发表年份和引用数量。
或者直接查找近年的survey文章,在综述中查看主要的研究分支和related work。
算法|三年前,我差点成了爬虫大师
文章图片

2.反向检索
在谷歌学术的搜索结果页面,点击某一篇论文的“被引用次数”,跳转进入引用了该论文的所有paper。
算法|三年前,我差点成了爬虫大师
文章图片

底层逻辑是引用了A论文的其他论文,基本都和A论文所属的研究领域一致。
这两种检索方法,可以大幅提高查找文献的效率。

4)强化一门主流编程语言
通过以上3步,我们已经具有了相对系统的理论基础。然而“巧妇难为无米之炊”,有idea却无法通过编程实现,还是白搭。
所以接下来,我们要给军火库增添几样重型武器,包括一门主流编程语言(深度学习一般用Python),深度学习框架(推荐Pytorch),服务器调用(Linux指令),IDE使用(Pycharm或Vscode+jupyter lab)等。
有了这些工具,开发深度学习项目会方便很多。
而且从目前大家都在卷的情况看,coding已是基本功,是技术岗通过面试的底线。
一边学习,一边每天在leetcode上刷1~2道算法题,校招找工作会事半功倍。
进入研二,大家可选的路更多了。有的同学继续在实验室从事科研,以做实验发paper为目标,有的同学已经走出校园开始提前实习。
这两种选择没有好坏,关键要适合自己。最怕每天窝在宿舍吃外卖打游戏,毕业只多了张文凭。
二、科研与学术
有些同学是主动从事科研的,例如我身边就有本科发表顶会,硕士毕业已手握6-7篇CCF-A一作的巨佬。
也有导师不放实习,“被迫”滞留实验室的同学。研二时的我就属于这一类,虽然拿到了大厂实习offer,又被劝退重回学校搞科研。
总的来说,做科研四分靠实力,三分靠努力,还有三分天注定。
实力首先指理论扎实,具有敏锐的学术嗅觉,懂得挖掘idea;英语阅读、写作过关,用词地道,知道怎样写paper容易中稿;同时编程强悍,能快速迭代实验,验证结果。
有同学可能某方面薄弱些,可以通过大三大四以及研一研二的努力来弥补。
即便手握七成概率,paper能否中稿还和评审人的口味等“随机因素”相关,有一定运气成分。
所以做科研挺有风险的,如果忙活了2-3年没中论文,硕士生涯几乎等于nothing。
之前听一位985师兄说,他们实验室有50多个深度学习方向的博士,每当夜深人静之际,经常能听到博士宿舍楼传来哭声(科研压力太大,没有达标数量的paper毕不了业)。
甚至还有博士生在实验室做实验,做着做着就哭了。
算法|三年前,我差点成了爬虫大师
文章图片

三、项目与实习
相比之下,在互联网公司找到一份实习要容易很多。
虽然内卷天天有,但只要研一没摸鱼,研二进一家第一第二梯队的大厂一般问题不大。再不济,也能去偏头部的创业公司。
在公司实习,主要是积累项目经验,把之前学习的理论落到实处。同时提前了解公司的管理流程、开发部署环境等等。
实习经历将会是简历的一大亮点,越来越多大厂开始更加重视实习。一段充沛的实习经历(3个月以上)丝毫不逊色于发表一篇顶会论文。
算法|三年前,我差点成了爬虫大师
文章图片

这是我导师部分硕士的毕业去向,有很多学术大佬,他们也会提前去公司实习。有的顺利转正,有的跳槽拿了更好的offer。
如上,走大厂实习转正是拿到校招offer的很好选择。部分大厂(如阿里)很多hc很早就预定给实习生转正了,走常规秋招难度要大很多。
如果想实习导师却不放人,建议提早和导师沟通协调。如果只能留在实验室,赶紧看看有没有靠谱的项目,能提供指导的师兄师姐。
如果导师放养,又不让实习,还不给机器,那兄弟你只能自求多福了!
四、总结
研究生2-3年的时间非常短,如果热爱学术,想要对整个研究领域产生个人影响,建议先出门右拐读个博。
另外,深度学习也没有想象中的那么高大上。大部分业务导向的算法岗,很多时候在和数据分析打交道、跟各个部门对齐需求,真正让你训模型跑实验的比例其实很低。
在工业界,模型是否新颖不是最重要的,通过A/B测试,验证算法能给公司真正带来经济效益才是关键。
为什么还有那么多同学反馈算法面试好难呢?
因为僧多粥少,除了计算机,还有各个专业的同学一起往里卷,门槛自然水涨船高。因而有了“面试造火箭”的说法,公司也正好通过面试刷掉一批想浑水摸鱼的人。
从这个角度看,提早选择开发岗也是一种不错的折中。开发岗需求大,和算法的薪资差距也越来越小。
不管选择什么,认真了解自己,适合自己的才是最好的。
千淘万漉虽辛苦,吹尽狂沙始到金。
无论什么岗位,成长、薪水、福利都是和付出成正比的。只有自己努力,才能在研究生阶段学有所成,收获满意的offer!
【算法|三年前,我差点成了爬虫大师】- END -

觉得还不错就给我一个小小的鼓励吧!

    推荐阅读