首先说明一下,算法工程师分类很多,所以要首先明白自己想做哪个方向的,去看各大公司的岗位招聘JD,里面有详细的要求,一点一点去学习和掌握相关技术,本文这里说的只是互联网行业里的常规算法工程师岗位,目的教大家如何在自学的情况下如何成为一名算法工程师。
1、数学基础
要想成为一名算法工程师,首先是需要具备扎实的数学基础,其中最重要的是线性代数、概率论与数理统计和最优化方法这三门课。这三门课不仅仅是机器学习的基础,在公司招聘的笔试、面试环节都占有非常高的比重。
线性代数这门课,大学上的可能不够,还需加上工科研究生上的矩阵论。这里推荐清华大学老师的MOOC课程,讲得真的非常好,上完(1)(2)基本够用了:
线性代数(1)(自主模式)-学堂在线-精品中文慕课(mooc)平台
http://www.xuetangx.com/courses/course-v1:TsinghuaX+10421094X_2015_2+sp/about
线性代数(2)(自主模式)-学堂在线-精品中文慕课(mooc)平台
http://www.xuetangx.com/courses/course-v1:TsinghuaX+10421102x_2015_T2+sp/about
工科的概率论与数理统计比较简单,看完浙大那本就够用了(对,就是考研的那本);最优化方法也不难,这里推荐李董辉的《数值最优化算法与理论》也差不多够用了。
这三门课实际上都非常高深,例如浙大那本概率论只是在黎曼可积意义下的,但很多情况不满足,这时候就需要引入测度,所以数学系上的概率论都是在实变函数和泛函分析的基础上进行的,大家有兴趣可以自行深入学习这三门课程。
2、计算机基础
要想成为一名算法工程师,其次需要夯实计算机基础,其中最重要的是数据结构与算法这门课。你要了解最基本的数据结构,包括数组,链表,树,图;以及常用的基本算法包括排序算法,查找算法,动态规划,贪心算法等。不能只了解理论,还需要动手独立的实现这些结构和算法,这也是对自己工程能力的锻炼。
计算机网络,组成原理等也会在笔试的时候考察,对于已经学过这些课的同学,建议直接去刷题就好了,不用特意去复习,没有学过的还是老老实实的去学一遍吧。还有数据库这门课也比较重要,至少你要会常用的sql语句,了解sql的基本原理。
3、机器学习基础
经过前面的课程折磨,现在终于进入了正题,那就是机器学习基础。虽然现在开箱即用的开源工具包越来越多,但并不意味着算法工程师就可以忽略机器学习基础理论的学习和掌握。这样做主要有两方面的意义:
(1)掌握理论才能对各种工具、技巧灵活应用,而不是只会照搬套用。只有在这个基础上才能够真正具备搭建一套机器学习系统的能力,并对其进行持续优化。否则,只能算是机器学习搬砖工人,算不得合格的算法工程师。出了问题也不会解决,更谈不上对系统做优化。
(2)学习机器学习的基础理论的目的不仅仅是学会如何构建机器学习系统,更重要的是,这些基础理论里面体现的是一套思想和思维模式,其内涵包括概率性思维、矩阵化思维、最优化思维等多个子领域,这一套思维模式日后的职业发展是非常有帮助的。如果你脑子里没有这套思维,面对工作中出现的各种问题,那么思考的效率和深度都会非常受限。
知乎上很多人推荐吴恩达的机器学习课程,但个人觉得对于大部分英语不好的人,听着听着估计都要睡着了,所以入门的建议是跟台大李宏毅老师的课程,对入门者更友好:
李宏毅机器学习(2017)
https://www.bilibili.com/video/av10590361?from=search&seid=3931652912250149237
跟完李宏毅老师的课程后有两个选择,一个是再跟吴恩达老师的课程查漏补缺,然后再看书,另一个是直接开始看书。书籍推荐的话个人推荐周志华老师的《机器学习》和李航老师的《统计学习方法》。说明一下,周志华老师的书简单一点,容易入门,但是有些地方跳跃性比较大,读者如果数学基础不好可能会有点懵;李航老师的书比较偏数学化的表达,对数学要求高一些,但是推导过程很完整,读起来更流畅。
4、深度学习基础
鉴于深度学习的火爆,建议在学完机器学习基础后,抽时间学习一些深度学习的内容,因为这部分的内容在算法工程师面试中也经常被考察,仍然推荐李宏毅老师的课程入门:
李宏毅深度学习(2017)
https://www.bilibili.com/video/av9770302?from=search&seid=6590634037455896266
5、编程工具学习
到这里,你终于打好了算法工程师的理论基础,然后你还需要一定的工具,这部分的学习可以和前面的一起进行。个人建议是Python必学(初学者建议安装Anaconda,可以省去安装各种科学计算包时的痛苦),然后再选择Java或C++作为工程语言。
6、深入学习
最后,你需要做的是根据自己的兴趣爱好选择一个部分深入学习。如果还没有建立兴趣爱好,那么建议你去公司的招聘网站,找相关的算法工程师岗位JD,然后再点相应的技能树。现在比较火的招聘方向有个性化推荐,计算机视觉,数据挖掘,风控及反作弊等等。
7、刷题
写在最后,作为算法工程师,扎实的编程能力和基础算法知识,在应对公司招聘时最重要。优秀的互联网公司笔试很看重代码能力,建议多去leetcode上刷刷题,多刷easy和middle难度的。