python算法工程师书籍_算法工程师路线图(经验浓缩,纯干货!)

说起算法(Algorithm),需要值得注意的是,数据结构与算法,机器学习算法都可简称为算法,但两者是完全不同的。数据结构与算法是计算机科学中的一门基础课程,主要内容是关于如何设计计算机程序,使得程序能够运行更快,占用内存更少。通常所说的程序员面试要刷算法题,指的便是数据结构与算法中的算法。这是程序员很重要的一项基本功,所以不管应聘什么岗位都会有一轮面试是算法面,也称为coding面。

而互联网公司的算法工程师岗位中这个算法则是机器学习算法,说的通俗点,就是人工智能领域中的算法,它是关于如何让机器自动学习和挖掘数据中的规律,并使用算法和模型对未来进行预测。目前来说这也是互联网行业中最热门的一个岗位,开出的薪酬也普遍高于开发岗。今天我就来分享下算法工程师的学习路径,并推荐一些我认为特别有价值的学习资料和学习方法。因为我自己是从数学转到算法的,走过不少弯路的,希望这份路线图能帮助各位想成为算法工程师的朋友少走点弯路,快速进步。

基础篇

1. 数学基础

在机器学习算法中,涉及到最为重要的数学基本知识有两个:线性代数和概率论。

线性代数研究的是线性空间的性质。数据通常会被表示为欧式空间中的点,而这些点经过一系列变换后会映射到另一个空间,在新的空间中隐藏在数据中的规律才得以显现。所以线性代数作为研究空间的一门科学,是入门机器学习的最要基础之一。市面上很多线性代数或者高等代数的教材都是从矩阵和行列式讲起,虽然这种方式也能够构建一个完整的体系,但个人认为这种方式对初学者非常不友好,完全丢弃了线性代数的美感和直观。这里给大家隆重推荐两份学习资料,玩爆国内各种教材和课程。

课程:MIT的老教授Gilbert Strang的线性代数上课视频。没学过线代的同学会发现这门讲的清晰而且直观,深入线代的精髓,完全不是那种理论堆砌的讲法,而且老教授幽默风趣,很有人格魅力。学过线代的朋友也可以利用课余时间重温一遍线代,我自己就是在本科毕业多年后看了这个视频,大有醍醐灌顶之感。英文不好的同学也不用担心,字幕是中文的。话不多说,B站视频传送门:https://www.bilibili.com/video/BV1zx411g7gq?from=search&seid=8130405528296931788教材:《线性代数及其应用》作者是莱(Lay D.C.)。喜欢看书的朋友这本书一定不能错过,这本书详细地介绍了线性代数在几何学、计算机图形学、经济学、概率论、信号与系统、微分方程等领域的应用,给人以直观的认识。概率论。这门科学大家应该都不会陌生,不确定性随处可见,生活处处是概率。概率论是研究不确定性的一门科学,机器学习算法需要对现实情况建模,自然是少不了将概率论作为工具。幸好这门课入门并不难,大家可以挑一本评分还可以的书开始学习。有些书会为了理论的严谨性从测度论讲起,再讲到概率空间等,初学者的朋友避开这种书就好了。这里给大家推荐陈希孺老师的《概率论与数理统计》,可能会有点难,但读完后会收获满满的。

2. 计算机基础

编程语言。任何一门语言抽象地概括都是由基本元素,组合方式和抽象方式构成,万变不离其宗,大家可以看我前一篇文章,如何感受计算机程序的美感。所以会使用任何一门优秀的语言都可以说是掌握了程序设计的基本技能。对于没接触过编程的初学者来说,python是一门非常友好的语言,不但易于入门而且功能强大,在进行机器学习算法开发的过程中会大量使用python。

python入门:《Python编程》是一本的不错入门书籍,书后半部分的三个小项目可以看个人兴趣完成。数据分析入门:在python入门之后,numpy和pandas是进行数据分析过程中常用的两个库。《利用Python进行数据分析》这本书可以快速看一遍,有个印象,遇到不会的可以再查。python进阶:python易于入门并不意味着它是一门简单的语言。《流畅的python》是我强烈推荐的,可以说是市面上最好的python书籍了。这本书会让你深刻了解到什么python这门语言的精髓,对于python的各个特性讲解的非常到位。但这本书会比较难,不推荐新手看。其他语言:在学习完python之后,其他同学可以另选一门语言学习,JAVA和C++二选一就可以了。数据结构与算法。对,这里又说回数据结构与算法的算法了。前面说过这是每一个工程师的必修课。

课程:推荐一门课程,是普林斯顿老教授Sedgewick讲的,他也是《算法》一书的作者。coursera上有原版视频,并有配套练习。课程传送门:https://www.coursera.org/learn/algorithms-part1如果国内的小伙伴不方便访问,可以看b站上的视频https://www.bilibili.com/video/BV1jx411U768?from=search&seid=16885003217719366958刷题:在学习完这些之后,大家就可以适当去刷刷leetCode上的算法题了。这里不建议盲目刷题,可以看看其他大牛总结的经验和套路,比如https://github.com/labuladong/fucking-algorithmTips:可以在准备找工作的时候集中花一段时间开始刷题,不用在这个阶段耽搁太久,可以尽早进入下一个阶段。3. 算法基础

机器学习基础。恭喜大家,在做了前面这么多基础工作之后,终于可以开始入门机器学习算法了。

课程:推荐吴恩达的机器学习课程。这门课对新手非常友好了。学完之后就会对机器学习这个方向有个整体了解。传送门:https://www.bilibili.com/video/BV164411b7dx?from=search&seid=6163277631324258577书籍:推荐周志华老师的西瓜书《机器学习》和李航老师的《统计学习方法》,比吴恩达的课程更深入一些,学完之后会对各个算法有更深的理解。工具:在做机器学习的项目时,推荐使用sklearn这个工具包,其文档本身就是一个很好的学习资料https://scikit-learn.org/stable/进阶:想要更进一步的同学可以尝试阅读三本机器学习神书,"the elements of statistical learning"(ESL),"Pattern Recognition and Machine Learning"(PRML), "machine learning: a probability perspective" (MLAPP), 这三书对于提升内功有非常大的帮助,但涉及的内容较为艰深,不建议新手阅读。我之前就是花了太多的时间啃了ESL和MLAPP,但说实话对面试和找工作加分有限。

进阶篇

4. 算法进阶

深度学习。深度学习是现在的算法工程师绕不开的一个子领域。神经网络的崛起引爆了业界对算法工程师的需求。

视频:入门视频推荐吴恩达deeplearning.ai的系列课程https://www.bilibili.com/video/BV164411m79z?from=search&seid=9617905535791357098这门课程会设计涉及到计算机视觉(CV)和自然语言处理(NLP)。这是算法工程师细分之后最火热的两个领域,也是AI主要的落地方向。工具:在使用深度学习进行编程时,目前最流行的两种编程框架是tensorflow和pytorch。对应的官方文档都有入门教程,各位看官方文档就可以了。不推荐买书,一是书比较滞后,二是书太多是照抄文档。书籍:推荐李沐老师的《动手学深度学习》,知识与动手相结合,是最好的深度入门书籍,没有之一。这本书在网上有开源。https://github.com/d2l-ai/d2l-zh这本书是基于mxnet写的,但这个框架并没有tensorflow和pytorch使用范围广。不过tensorflow和pytorch都有相对应的开源版本。都是很好的学习资料。https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0https://github.com/ShusenTang/Dive-into-DL-PyTorch都有相对应的开源版本。都是很好的学习资料。计算机视觉。作为目前人工智能领域最为火热方向之一。有着不错的就业前景。但不得不说,最近有种人才即将饱和的趋势。加上落地场景有限,个人对这方前景不很乐观。

课程:一门不得不提的Stanford深度学习课程CS231n Convolutional Neural Networks for Visual Recognition,好评如潮的话不多说了,授课教师是李飞飞和她的学生。学完这门课会让你有种赢在起跑线上的感觉,讲的太棒了!https://www.bilibili.com/video/BV1Dx411n7UE?from=search&seid=3061454719072377295书籍:至今没有发现特别好的书。而且也不推荐看书,这个领域更新更快,分支很多,各位想进一步深入了解的朋友推荐多看文章,多做项目。自然语言处理。人工智能领域另一个火热的方向。有着很好的就业前景。

课程:另一门斯坦福的课,深度学习自然语言处理(cs224n),由斯坦福nlp掌门人Chris Manning开设的,也是一门不可多得的好课https://www.bilibili.com/video/BV1Eb411H7Pq?from=search&seid=7371650961379062550书籍:与计算机视觉一样,多看论文多做项目。学到这里,恭喜大家,已经是一名合格的算法工程了!

5. 实战

算法工程师的岗位竞争是比较激烈的。在对基础知识有了很好的掌握之后,就需要更进一步了。有三条路径可以让大家脱颖而出。

项目:做过出彩的项目,这些项目可以是现有的工作,可以是自己从网上找的,或者对开源社区的贡献。算法比赛:在算法比赛拿过好名次。国内外都有著名的算法竞赛平台:国外的如kaggle,国内的如阿里云天池。想要提升自身技术和竞争力的同学可以去打比赛,争取拿个好名次。至于比赛的经验和套路这里就不展开了,感兴趣的朋友可以去搜搜。论文:这条路径适用于在学校实验室或者即将进实验室的同学,对于有资源的同学来说发文章发顶会不是一件难事,但对于没有实验室资源(导师,项目等)的同学来说就比较困难了。这里再稍微提一下职业规划,对于简历不是很过硬的同学想一步到位进大厂可能并不轻松,但是大家可以慢慢来,先去一家小一点的公司工作或实习,在自己的岗位做出些出彩的项目和成绩,然后再进大厂就会很方便了。

最后,祝愿大家都能如愿以偿地拿到自己满意的offer!

你可能感兴趣的:(python算法工程师书籍)