第一篇:不是计算机专业,如何转行写代码、到企业做 AI?听听这位机器学习科学家的经验与建议
不是计算机专业,如何转行写代码、到企业做 AI?听听这位机器学习科学家的经验与建议
本文是科研圈互动栏目“直播跟你聊”第二期“毕业后想(转行)进入互联网公司,需要做哪些准备?”直播现场的文字实录。本期主播为:
· 张瑞(知乎机器学习团队负责人,北京邮电大学通信与信息工程专业硕士)· 王恂(知乎技术团队 HRBP)· 何子(知乎技术团队 HRBP)| 写在前面 | 象牙塔早已不是科研毕业生求职时的唯一选择。
出于对自身发展与就业环境的考虑,越来越多的毕业生已不再把求学阶段的研究领域与方向作为进入职场、选择行业时的唯一参考。互联网行业迅速崛起,人工智能新一轮浪潮袭来,非计算机领域的科研毕业生,是否有机会参与其中? 入行互联网是否可行?面对不同类型互联网的公司,应该如何选择?转行做算法是否现实?需要做什么样的准备,才最有利于自己的发展?
以上几个问题,过来人与亲历者也许最有发言权。本周五,科研圈邀请知乎机器学习团队负责人张瑞、知乎HR王恂、何子作客科研圈直播间,围绕“转行机器学习”、“互联网求职”、“机器学习行业现状与发展”、“在知乎这样的互联网创业公司工作”四个子话题与读者进行直播分享,以下是直播的文字实录。
关于转行机器学习,这里有一些建议
非机器学习专业的学生,如何进入机器学习行业? 张瑞:其实我自己就不是机器学习专业的,我研究生在北京邮电大学,专业是通信与信息工程。我从通信转行到互联网再到机器学习,感觉这个跨度还不是很大,尤其是通信的同学都要学习很多数理统计和信息论的知识,而这恰恰又是现代计算机科学和统计机器学习的基础。
如果你的计算机基础和数学基础足够扎实,那么其实机器学习并不像你想象得那样神秘或者高不可攀,通过自己不停地学习和实践,是可以成为一个合格的机器学习工程师的。比如我自己刚毕业的时候做的是后台开发,做了几个月之后,有一个机器学习的任务,应该是文本挖掘方面的。在我主动接过来之后,算是入坑了机器学习,感觉这个领域还挺有意思的,后来有意识的去多接触一些这方面的知识,多去承担一些这方面的任务,直到成为一个专职的机器学习工程师。
这里也给大家提一个比较实用的小建议,同学们在上学期间,可以多去参加算法大赛,像国外的 Kaggle 这样的平台,很多大企业在上面发布数据集,通过比赛你能很快锻炼实操能力,国内这样的算法比赛也很多,BAT 基本年年都会办,我们今年也办了机器学习挑战赛,总奖金是 8 万,赛题围绕语义分析来设计的,有了竞赛的成绩再去实习甚至是拿 offer,这也可以说是一条捷径吧,大家有兴趣可以到来看看我们的比赛。学科跨度大一点的转行现实吗?比如物理、生物专业的同学想转行做机器学习,您对他们有什么建议? 张瑞:很多企业的机器学习团队是非常欢迎数学、物理、天文、生物之类的同学加入的,因为这些专业的同学往往数学基础都非常扎实,对机器学习理论和模型的学习非常快,掌握得也比较深入和透彻。如果能够再有一定的工程能力,其实这样的人才也是非常稀缺的。
我的建议是,针对自己的现在的短板和你的目标,进行有针对性的学习。如果你想做纯理论性的研究,那就好好补充自己的数学知识,特别是统计学、信息论、优化理论、高级数据逻辑等,学习一些基础的代码知识,比如最基本的要学会使用 R 或者 matlab 做仿真。如果想进入互联网工业界,那么需要在两方面都加强一下,一是机器学习的理论,这个有比较好的数学基础其实理解起来是很快的。另外是工程能力,比如基本的数据结构和高级编程语言等,这块可能对之前没有接触过的同学挑战会比较大一点,但如果入门了接下来的掌握就比很快。
那报个 IT 培训班是不是比较合适?
张瑞:从我接触到的一些人来看,大家对只有过培训班经历的从业者,一般评价不是特别高。我的猜测可能是培训班太过于急功近利,导致培训出来的人基础比较差,这可能是一种所谓“流沙筑高台”的教育,比较类似应试教育。只学习培训班教给你的知识,你可能在遇到新问题的时候,完全没有任何思路,偏偏你在工作中遇到的绝大多数都是新问题。我的建议还是沉下心来打好基础。
其实现在在线教育资源挺多的,比如 Coursera 吴恩达在上面讲机器学习,Hinton 在上面讲深度神经网络。也可以参考一些书,入门的话我建议先从《机器学习实战》这样的书入手,敲一下代码,有个直观的了解,然后再阅读李航老师的《统计学习方法》,推一下里面的模型和公式,思考一下模型,为什么要这么设计、为什么要这么优化等等。如果是工程知识,比如就是写代码的话,报个 IT 培训班入个门应该是 OK 的,当然如果自学能力强的完全可以靠自学。但一定要记住,培训班教你的知识是远远不够的,甚至名校的计算机专业,如果只是靠学校里学到的知识仍然是不够的,你终究还是要通过自学来解决问题,比如多阅读一些优秀的开源项目,多动手,然后找一些工业界实习的机会之类的。
关于互联网求职,这里有一些经验
在选择互联网公司的时候怎么比较 offer?在知乎这样的创业公司工作,和 BAT 之类的大公司有什么不一样? 张瑞:我自己在大公司待过,后来有过两家创业公司的工作经历,可以说说我的理解。我觉得在大公司工作和在创业公司工作,是“点”和“面”的区别。大公司有非常完善的做事流程,一件事情会拆分得非常细,也有很多人——比如你的 mentor 或者 leader 来指导你或者监督你,很多时候是按部就班,做非常细节的事,你的工作方法、业务思维会得到体系化的成长,但缺点是你可能会对业务的全局缺少掌控和思考。
创业公司则不一样,往往是走比较扁平化的风格,少了很多条条框框的约束,也会对每个人的能力——包括业务 sense、沟通能力、主动性,都有非常高的要求,所更鼓励大家多发挥自己的创造力和能动性。
我可以用知乎来举例说明一下创业公司对“创造力”的追求。知乎是非常提倡黑客精神和海盗文化的。知乎在创新工场办公的时候,没有办公牌,只有一面海盗旗。海盗精神究竟是什么?有的人认为是共享,有人认为海盗精神是自由、不受约束。知乎的正式员工都会收到一本《黑客与画家》作为案头书,作者 Paul Graham 说过一个好的创业者应该是什么样的,我们把这句话翻译成“总搞得掂”,也就是我们的海盗精神。我们对工程师的要求就是这样:一个好的工程师不只是能解决别人交付的问题,还能够判断什么是最重要的问题,然后全神贯注投入最大精力,去解决最重要的问题。选择什么样的公司,首先要看你的个人性格,你是特别喜欢进取呢,还是特别喜欢按部就班地学习和成长?比如如果你觉得自己是一个比较有自驱力,也比较有创造力的人,那还是在创业公司会有比较大的发挥空间;其次要看这个岗位是不是你所喜欢的、你想要的,根据这些你可以列一张表,把你最希望的东西和公司能给你的,去做一个匹配,看哪家公司最能满足自己的需求。
对于初入职场的人,企业会比较看重哪些方面?怎么做好从校园到职场的准备?
张瑞:从知乎的经验来看,企业归根结底看重的,还是上面的四个字:“总搞得拈”。我把这表述成“在尽可能少的输入下,实现尽可能多的输出”。
什么意思呢?从输入上讲,一是不能靠别人的督促和指导才能保证工作的产出,应该有一定的自我驱动的能力,主动把自己要做的事情给做好。二是上面提到的,要有主动发现和判断问题的能力,也要有主动承担责任的勇气和决心。另一方面是输出,要有把种种想法落地的能力。这个想法可能是别人交给你做的,也可能是你自发的 idea,总之是你要能把它落地。不能是想法很多,但最后要实际去执行的时候就会各种拖泥带水或者半途而废,都是不行的。
王恂、何子:总的来说,企业首先看重你的软实力,比如是否有好奇心、学习能力、遇到困难是否可以迎难而上、不惧挑战。而在业务能力上,这需要你对自己的专业有基础的认识,具有最基本的思维方式和 sense。
关于准备,首先你需要明确目标,想考研、出国、或者拿到某家名企的 offer,都是目标,你都要按照这个目标定计划去实现。其次在实现这个机会的过程中,你需要有主动性,也就是很强的自我驱动力,三天打鱼两天晒网是很难成事的。另外一个非常有用的小诀窍是善于review,就是做学习总结和工作总结,总结自己走了哪些弯路、怎么样可以做的更好。同时在这个过程中多请教过来人的经验。
知乎在面试工程师的时候,主要通过什么考察他们的能力? 张瑞:不同的同学考察的侧重点有所不一样。我们做标准化面试,面试的判断标准有很多条,可以写很长的几页纸,但归根结底是一条,就是判断你的主动性、你的成长能力,最终是对你的产出的预期。
比如对计算机的应届生同学,我们会考察数据结构和算法,例如写个二分查找。但这不等于说二分查找写得好就可以解决问题,而是我们认为,计算机的同学,掌握基本的数据结构和算法是一项基本的能力,如果连这个能力也没有,那我觉得你在学生阶段的主动性、学习的意愿、勤奋程度之类都值得怀疑。当然有同学也说我数据结构掌握的不好,但我实际写代码的经验特别多那怎么办?那我们也可以考察你的工程能力,是不是真的符合一个经验丰富的开发者的标准。具体到机器学习工程师,一般来说,我们会需要工程能力、对机器学习的理解都比较强的人。其实很多同学对这个职位有误解,比如有的人认为做机器学习的,不需要有多么强的开发能力。我觉得这不对。我举几个例子,比如 caffe 的作者贾扬清、xgboost 的作者陈天奇,都是机器学习的大牛,但人家开源出来的代码写的也非常漂亮、非常优雅。另外一种误解则是,既然机器学习的现成工具都这么多了,我就当做一个黑盒去搭积木似的组合就好了,这种观点也是不对的。这种人面临的主要问题是,如果这个黑盒运行的一切符合预期还好,如果有不符合预期,你必须要知道怎么去改进和优化,比如知道是目标函数选择的不对,还是特征选择的不好,还是模型选择的有问题等等。这些都需要比较扎实的理论基础。
有同学问到企业和实验室的文化差别,两者是不一样的,后者学术氛围浓厚,鼓励你去探索和学习,前者则强调个体的主体意识,你需要为自己的项目、为自己的行为负责。关于机器学习行业,这些情况也许你想了解现在机器学习在工业界有哪些应用方向?发展的趋势怎么样?
张瑞:机器学习在工业界很早之前就已经有很多的应用场景了,比如搜索引擎中需要的很多自然语言处理,大部分是通过机器学习技术来完成的;再比如推荐或者互联网广告早已引入了很多机器学习的技术。
这波人工智能的浪潮带来了新的东西,实际是由深度神经网络的发展引发的。这里有几个背景:
一是数据,这些年互联网、移动互联网,以及以传感器构成的的物联网发展很快,工业界和学术界能获取到的数据越来越多。只以互联网举例,2005年-2017年,中文互联网的网页数量增长了几十倍;二是计算能力的进步,根据摩尔定律,每过18个月,计算机的计算能力就会涨一倍,而价格会降50%。这意味着我们可以获取相比之前廉价得多,也强大得多的计算能力;三就是机器学习本身的发展。其实所谓机器学习,本身仍然是神经网络模型,但是引入了一些新的训练方法和思想,这个是一个非常成功的 rebranding(再包装);而在一些任务上,机器学习也确实展现了远超传统技术的能力。
综合起来我们可以看到,机器学习在最近几年取得了非常大的进展,不再仅仅局限于几个应用场景了。比如无人驾驶:无人驾驶得益于各种传感数据、图像数据的丰富,也得益于嵌入式芯片计算能力的提升。再比如 AlphaGo:它的成功既得益于深度学习模型的强大表示能力,也得益于计算资源的丰富,在这之前谈“围棋可以通过搜索策略来获取最优解”,基本上都是不可想象的。
新的机器学习技术在很多传统任务上也展示出了非常好的效果。例如用深度学习做推荐和广告投放,在数据量足够的情况下,效果优于传统的机器学习技术。几年前很多公司就开始做色情图片识别,但往往天线宝宝的图片也会被判定为色情,需要大量的人力来纠正,而使用卷积神经网络(CNN)等来做色情图片识别,准确率有很大的提高,现在一般都能做到 95% 以上了,大大减少了审核人力的成本。还有翻译:现在基于机器学习的翻译已经做的非常不错了。年前我出国旅行去俄罗斯,实际上一些翻译软件已经能够帮我完成日常的对话了,比如点个菜问个路软件翻译出来的结果还都比较靠谱,所以起码机器可以替代语言的导游。
其实个人要想判断一个行业的趋势和前景比较难,大家可以多关注行业专家的一些观点,多去向学长学姐、老师们请教。现在机器学习在研发领域有什么瓶颈吗?
张瑞:从目前的技术进展上来看,我们的发展水平离所谓的“强人工智能”还是有挺大差距的。无论是传统的机器学习还是深度学习,现在在某个特定的任务上,都需要人去监督、指导和设计,才能获得比较强的能力,在通用场景下,并没有非常强,或者说非常确定的自我进化的能力。
现在机器学习的瓶颈在于理论基础,很大程度上仍然在“吃老本”。深度学习习近平些年的发展,大家有目共睹,但并没有非常牢固、清晰的数学基础。所以现在有种调侃的说法,很多从业者把模型调优、改进戏称为“炼丹”,就是需要不停地尝试,没有一个非常明确的、有理论指导的改进方向。但话说回来,从应用层面上可以暂时抛开理论,先享受这个工具带来的便利——就像人类发明了火药,但很长时间内并不知道火药的威力是来自于化学键的重新组合释放的能量。如果你想在知乎工作,这里有一些小背景在知乎做机器学习是什么样的体验?
张瑞:知乎的机器学习团队是支撑整个知乎的业务发展的。知乎作为一个知识社交平台,希望通过机器学习技术,让更多人在知乎更方便、更高效地获取和分享知识,同时帮助我们的运营同事维护一个良好的社区氛围。比如我们的首页推荐算法,可以更高效地给大家推荐感兴趣的东西,而不完全是按照时间线来展现。再比如用户画像、比如自然语言的理解,比如我们的内容分发的产品——推荐、搜索和信息流等,都需要机器学习技术的支撑。
知乎很早就开始用机器学习解决业务问题了。去年我们组建机器学习团队,从一开始的 3 个人,目前已经有近20 人。手头上的任务越来越多,人力还是比较紧张。这里也打个广告,就是我们在非常努力地招人,无论是刚毕业的同学,还是比较资深的科学家,我们都非常愿意聊一聊,看看有没有一起工作的机会的,大家感兴趣的可以直接把简历投到我私人邮箱 zhangrui@zhihu.com。
知乎整体的工作环境和福利待遇怎么样?
何子:知乎的福利待遇是一日三餐、六险一金、年底双薪、下午茶、水果饮料零食无限量供应、标配 Mac 及电脑补助、人体工学座椅、游泳健身及攀岩卡、丰富的兴趣小组,比如我们书法班的班长晓曦曾请来了中央美院的老师教大家学书法。
工作上,我们有完善的人才培养和激励机制,比如我们会每年一次的频率来 Run 一次 Hackthon,也就是黑客马拉松这样的创意活动,鼓励大家开脑洞、进行创新尝试。15年知乎 Hackthon 的内部优胜是“版权保护平台”。
我们有“Tink Day”,大家一起花时间去优化代码,以及实现一些 amazing idea。当天的 Tink Day 结束后我们会有一个 Show time,给当天的 Tinker team 去展示他们的作品,并且评出优胜 Tink 团队。除了可以完成一次跨组合作,更多的是工程师整体完成一个项目的竞技。
同时我们有帆船培训,可以去去亚洲帆船中心获得船员执照。知乎鼓励工程师同学去参加各种技术论坛、国内、国外知名的技术分享会,比如会给工程师买去参加谷歌的 I/O 的门票。
怎么加入知乎?除了机器学习工程师,还有哪些正在招聘的岗位?
王恂、何子:点击科研圈网站招聘频道搜索“知乎”,或者进入知乎的招聘官网,都能找到知乎正在招聘的岗位。技术方面,知乎的后台、前台、iOS、安卓都在招研发工程师。大部分研发岗位都在北京,少部分开发岗位设立在成都。运营方面,我们招聘多个领域的运营,比如生物、计算机、商业、人文,特别欢迎在这些领域有专业积累的同学来应聘,比如我们自己就有法学本科毕业的来做法学运营,心理学毕业的来做心理学运营。
知乎也有丰富的实习生岗位开放:校园平台实习生、内容运营实习生、客户运营实习生、新媒体实习生、数据平台开发实习生、后端开发实习生、数据挖掘实习生。后几个技术实习岗位都要求大家至少熟悉至少一门语言,在读同学都可以尝试去面一下。
实习生在知乎实行 Mentor 制,入职就有Mentor 指导。实习3-6 个月有转正的机会,正式工作中每半年有 Performance Reviw有可能得到晋升的机会。怎么去实习?zhihu.com/jobs 点击 “实习生招聘”就可以了解了。