知乎提问
如何成为算法工程师?怎么成为算法工程师?……这是很多新人的内心疑惑。下面是知乎一位网友的提问:
今年研一,感觉自己什么也不会,导师完全放养,2个月没见过面,从入学到现在一个学期快结束了总共见了5次面,没有项目,没有指导,哎
想做机器学习方面的工作,距离明年秋招还有一年半,目前在看C++Primer,然后学一学数据结构和算法,同时再学李航的《统计学习方法》,但是感觉很吃力。另外,面试肯定需要介绍项目经历,这方面又太欠缺,不知如何是好,辗转反侧,彻夜难眠。
求助各位大佬,我该如何准备,才能拿到一个算法工程师offer?
回答一:
很多小伙伴都在关注这个问题,如果以后想从事算法相关的工作要作何准备。首先呢,现在国内的算法工程师主要的工作是机器学习方面,如计算机视觉,自然语言处理,语音识别,推荐算法等。每个方向所需的技能点有各自不同的侧重,但每个方向还是有共通的部分,如机器学习的数理统计知识,基础算法等。所以说如果想在一年半的时间内拿到心仪的算法 Offer,我们就要夯实基础,并点上对应的技能点,下面从几个维度来谈一下如何准备。
数学知识
数学在机器学习中非常重要,不管是对机器学习相关算法的推导理解抑或是模型搭建都不可或缺。可以说数学是机器学习的基础。其中比较重要的课程有线性代数,概率论与梳理统计,凸优化理论等,学习这些课程能为我们职业生涯打下良好的基础。
计算机相关基础
计算机作为机器学习的平台和工具,如果没有良好的计算机基础或者说没有良好的编程功底是难以胜任算法工程师的工作的。我们 至少要做到对一门主流的编程语言比较熟悉并能灵活运用,如 C++,Python 等,毕竟我们需要编程来实现我们所需的算法。
机器学习基础
对于机器学习的学习,入门的话,可以通过一些网上有名的公开课入门,如吴恩达的机器学习,并辅以业内有名的教材,如国内周志华老师的机器学习,李航老师的统计学习方法等。
纸上得来终觉浅,绝知此事须躬行,如果只有理论知识而不去实践的话,往往都是纸上谈兵,我们的建议是在有一定理论基础,可以适当地做一些项目或者打一些比赛,体验一下机器学习如何解决真实的业务问题,比如可以打kaggle(链接:https://www.kaggle.com/),全球最权威的机器学习比赛平台,比赛问题来自各行各业所遇到的实际问题,开放的数据集非常适合新手练手,如果能在 Kaggle 比赛中取得较前的排名一定能为你简历添上浓墨重彩的一笔。
传统算法
不要觉得机器学习与传统算法如深度优先搜索,动态规划,图论算法等没有关系,传统算法的学习能让你对机器学习相关算法理解透彻,况且机器学习偶尔也会用到传统算法,如一些图论算法在特定聚类算法也有一定的应用。再者,不管是国内抑或国外算法工程师的面试都会有算法题,良好的算法与数据结构基础能让在面试时游刃有余,而对于这方面的学习,同学们也可以来刷力扣(链接:https://leetcode-cn.com/),涵盖了大部分公司的面试算法题,不管是对于准备面试的同学抑或是想恶补算法基础的同学,都是不错的选择。
回答二:
想做机器学习的话建议把《矩阵分析》看懂,多花点时间在这个上面,看懂的意思,简单点就是能够理解这些理论该怎么用。然后是《概率与统计》,了解贝叶斯,分布是什么。最后看《模式识别》,知道什么是线性分类和非线性分类,怎么提取特征。大概有了这些知识你再去学什么公开课就简单多了,基本的机器学习算法,你就算是没听过,看个几天也能懂了。当然这只是理论基础,确保你能往后走得更远。
编程就不要怕困难了,多码多练,有个几次调bug调几天的经历其实也差不多了。如果你计算机算法基础不好的话还需要看《算法导论》,刷刷leetcode。
回答三:
水得很,主要是背诵,不会写快排会背kkt条件的算法工程师多的是,想找工作就好好背书,把李航那本书像背政治那样背下来,把常见数据结构背下来,想学习真才实学就去学cs229,cs231n,cs224n,cs294,cs246,这些公开课就够学一年的,然后你会发现内功不足,估计还得补mit的6004,6828,以及mit老爷子的线性代数,boyd的优化。最后得出结论,还是背书吧,像背政治一样背,也就差不多了,真是水得很。一线互联网技术面,问项目千篇一律,问算法大多数写不出来,问概念倒背如流,我也搞不清要问啥。利益相关匿了。
回答四:
先搞清楚目前行业内招的算法工程师主要在做什么:
第一类是做数据模型进行推荐、分类、识别、预测等工作的建模型算法工程师,通常JD上也写成数据挖掘工程师、深度学习工程师等。这类大体的工作就是结合业务场景,选择合适的算法模型,将数据进行处理后使用模型获得结果,也被戏称为“调参工程师”。
第二类是做针对性方向的算法研究,包括图像、语音、文本等,其囊括了在外界看来很智能的人脸识别、人脸变换、语音生成、语音识别、新闻推荐、智能对话等功能。和第一类的区别主要在于处理的数据非传统的结构化数据,需要进行针对性的处理,比如图像的取点、二值化,语音的要素提取,文本的分词、向量化等等。当进行了数据处理后,后续选择模型时就和第一类类似了。
不难看出,第二类会比第一类需要一些针对性的知识体系,相对来说更好去做准备。
你描述中要做的准备看的出来对主要的能力点有所了解,其实大致的区分下就以下这几块:
从学习安排上,可以以如下的学习路线做准备:
一、数学能力基础
无论是否计算机出身,数学方面的能力在算法工作中是非常必要的基础,需要掌握的程度如下:
1、高等数学,主要包括微分和积分、偏微分、向量值函数、方向梯度、泰勒展开等,才能更好理解算法公式,调参原理,以及迭代时梯度的概念等;
2、线性代数,主要是矩阵运算、高维向量、空间运算,这些是理解深度学习向量空间的基础;
3、概率论及数理统计,或者称之为概率学和统计学,要理解,机器学习本质上是一个概率问题,从数据中学习的不确定性,就是在获得概率值。
二、计算机科学能力基础
算法工程师是一个研发性岗位,写代码的能力也是必须的。
1、掌握基本的排序、查找算法
2、熟悉常用的各类数据结构,如数组、树、表
3、将抽象逻辑思路转为代码,能完成leetcode上中等难度的题目
4、有编程语言学习能力,会python更好,其他语言需要花时间了解其语法特点
以上两大基础,如果是工科出身,应该不会需要太久做准备,可以根据缺少的部分来查漏补缺,这些部分在两个月内完成应该问题不大。
后续才是真的开始做算法的学习:
三、机器学习算法能力基础
1、熟悉常用机器学习算法的原理,包括线性回归、逻辑回归、决策树、K均值、SVM、adaboost、CNN、RNN等
2、能够了解各个算法的优劣和适用的数据场景
3、熟悉常用机器学习算法在代码中的实现,深一些是能自己手写实现,浅一些是能通过使用python的包来调用,熟悉参数
4、能够独立完成完整的数据项目,如在kaggle上尝试解决入门的问题,实现从数据处理到模型选择直到输出结果的过程
第三部分是个长久的事情,不断的熟悉算法和使用,并在实际数据项目中来深化,不去公司实习的话,在kaggle上多做尝试可以积累不少经验。
当能掌握这些后,就可算做正式入门了,目前大厂的实习生或者校招生基本就在这个水平程度,想要得到更好的机会或者能在工作中真的有好的产出,需要更多的努力和学习。
回答五:
算法岗非常重视基础和理论,项目次之。
回答六:
如果热爱这个领域并且有一点数学基本功,能够耐心推公式,其实不用一年也可以。我在大三9月选了模式识别和统计学习这两门课才开始接触机器学习,第二学期3月底决定往这个方向发展并找开始实习,5月拿到算法实习offer,然后9月底转正。由于没有发paper也没有参与真实的项目,找实习这个过程不太容易。