找回密码
 立即注册
查看: 765|回复: 14

想要从事算法工程师,要掌握什么?

[复制链接]
发表于 2021-7-30 14:40 | 显示全部楼层 |阅读模式
学历要求?技能?
发表于 2021-7-30 14:43 | 显示全部楼层
想要了解算法工程师的岗位要求,不妨先仔细阅读一下各大公司的招聘要求。
一、了解招聘需求

下面是腾讯的两则招聘:
(1)算法工程师
(2)数据挖掘工程师


总体而言,机器学习和数据挖掘类职位主要考察两方面的知识:
    机器学习和数据挖掘的理论知识编程开发和数据结构算法的基础
对于已有工作经验的同学,还要加上业务理解能力。


我们利用以上三个维度,将应聘者大概分为 10 类,下面我们看下各位同学都适合哪些岗位和发展方向。
图片来源:36 大数据


    A 类在机器学习和数据挖掘的理论知识方面有很深的造诣
主要是负责做最顶尖机器学习相关学术研究。比如创造一些新的算法,例如早期的 SVM,LDA 以及最近的一些深度学习模型。但是处在塔尖的的他们对于这些算法在业务场景的应用或者算法的实现兴趣并不大,主要精力都花在了理论研究上。主要成果发表在顶会或者顶期上。他们主要存在于一些研究机构中,如国外高校或者企业研究院。一般企业如果需要这样的人,也是挖过来当镇厂之宝,不属于我们讨论的范围。


    B 类既对算法有比较深入的了解,又有高超的编程技术
这类同学对算法有深刻的理解,但可能没有达到创造新算法的层次,这类同学的数学水平可能也达不到炉火纯青的地步。他们的兴趣不在于各种繁琐的理论推导,而是在于对已有算法进行改进,并且给出最好的实现,造福广大人民群众,例如 LIBSVM,SVDFeature,paramater server 这样的工具。当然,这样的人才也是可遇不可求,而且他们也需要一个比较大的平台来施展自己的能力。他们的工作应该能够成为一个企业数据挖掘的大杀器。


    C 类对算法有一定的了解,但是不够深入,开发的经验有限
很多理论方向的研究生博士生可能就处于这个状态,即使能够发表一些看起来不错的文章,但离真正做出好的实际的数据挖掘工作还有很长的一段距离,需要一步一个脚印的踏实前进。但以目前的情况,去不错的大企业工作也是很容易的。


    D 类码农中的翘楚,横扫各路 ACM、ICPC 比赛的英雄
虽然他们对于机器学习理论和数据挖掘的应用场景不是很了解,但凭借他们强大的编程能力,在应用开发方面无人能及,适用于任何需要落地的场景。


    E 类: 属于一般的码农,能写一手好代码,但是对机器学习知之甚少
这种情况的同学,如果希望成为一名算法工程师,那么需要花费比较多的时间在理论基础上,要能够沉得下心去推公式,总之,还是有一段路要走。


    F 类工作贴近业务,对数据也有一定敏感性,可能是 excel 和 sql 的高手
但是这和数据挖掘的工作还有一定差别。最适合他们的岗位可能是 BI 或者数据产品经理。在这些岗位上,他们同样可以发光发热,做出卓越的贡献。


    G 类他们有一定的算法基础,同时对数据挖掘的业务落地也有丰富的经验,瓶颈主要在于编程开发能力
这在大数据的场景下尤为明显。毕竟最好的方式是自己想 idea,自己实现,至少实现一个原型。那么 R 或者 Python 是一个很好的选择。没有 coding 能力,再好的算法也出不来。同时又不能像理论大牛对理论基础有很深刻的理解和研究。这种情况非常被动,只能努力提高自己的编程能力。


    H 类对机器学习算法有一定的了解,熟悉各种业务,也有一定的开发能力
在数据挖掘的具体工作中,可以从业务出发,设计算法,也能对算法进行基本的实现。实际上这样的工程师还是很多的,特别是有一定工作经验的。他们的工作经验会对数据挖掘的工作起到很大的帮助。他们在算法以及编程的上的能力可能不是很高,但是足以丰富他们的思维方式,也方便与人沟通。


    I 类对机器学习算法有一定了解,也有较强的开发能力
这类同学适合做偏向开发的数据挖掘岗位。他们很可能是学校的应届毕业生,学习了一些理论知识,也锻炼了开发的能力,但还缺乏实际的工作经验。互联网的数据挖掘岗位正是他们大展拳脚的好地方。


    J 类各项技能都很全面,也很适合做 Leader
但是这样的人毕竟可遇不可求。另外,每一项都好其实也就是每一项都不好,人的精力总是有限的。在一到两个方面做的比较突出,同时另外的方面也不要太弱以至于成为短板,这样就挺好的了。
各位同学目前分别是哪种类型,并希望自己成为哪种类型呢?总体而言,如果是希望以后做科研的同学,就把精力主要放在理论上即可,编程语言使用高效的 Python 以及 Matlab,能够快速实现自己的想法。希望成为企业中的算法工程师的同学,要在对算法的理解上以及开发能力上,提升自我。最后,如果是希望做开发的同学,主要需要提升自己的开发能力。


在实际招聘过程中,对于大多数一般的有一定经验的程序员或者应届毕业生。除了基本的代码能力外,以下几个方面通常是算法工程师考察的重点:
    机器学习算法的理解,比如常见算法的基本思想原理、应用场景、特点和求解方法。 可以从两个分支考察,一个是使用经验,比如实际的调参经验,使用技巧,面向 H 类。还有就是一些算法的实现方法,面向 I 类。实际的项目经验,特别是数据挖掘工作。一方面考察他之前的工作情况,另外也看他的归纳总结能力与解决问题的能力。针对项目的一些细节提问,也可以看出他的做事方式和对一些知识的掌握情况。对于业务的理解能力和敏感性,可以结合实际工作中的一些问题来考察。即使没有实际工作经验,也是可以看出他们在这个方面的潜力。同时也考察出理论和实际结合的能力。沟通表达能力。相对于纯开发的程序员,数据挖掘岗位对这个能力的要求高出不少。在整个面试的过程中,其实都有对这个能力的考察。
二、夯实算法基础


力扣 (LeetCode) 作为全球极客挚爱的技术成长平台,致力于为同学们面试、求职提供帮助。

在这里,力扣君也为大家整理了一些程序员在 面试中 需要掌握的算法,熟练掌握它们可以帮你在面试中如虎添翼,百战百胜。

算法 - Algorithms

    排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、剪枝技巧图论:最短路、最小生成树、网络流建模动态规划:背包问题、最长子序列、计数问题基础技巧:分治、倍增、二分、贪心
数据结构 - Data Structures

    数组与链表:单 / 双向链表、跳舞链栈与队列树与图:最近公共祖先、并查集哈希表堆:大 / 小根堆、可并堆字符串:字典树、后缀树
在 互联网公司最常见的面试算法题有哪些? 问题下的回答中,力扣君更加详细地整理了一些面试常见的算法并且对每种算法罗列了很多题目,在此就不赘述了,感兴趣的同学可以点击链接了解更多内容。

互联网公司最常见的面试算法题有哪些?如果不谈面试的需求,对于程序员来说上面提到的那些算法依然非常重要,可以说上述内容都是作为一个程序员必须掌握的算法

有人可能会觉得,这些基础的算法在工作中完全用不到,安安静静地做一个 CRUD Boy 多好。
其实不然,虽然同是程序员,程序员之间也是可以分出个三六九等的。一名出色的程序员一定是熟练掌握各种算法的。扎实地理解与掌握这些基础算法,能帮助你收获更强的竞争力,在自己的岗位上快速晋升。

那熟练掌握这些算法,到底可以为身为程序员的我们带来什么呢?

提升代码效率
比如,现在让你实现这样一个功能:给你一些有序的数字,动态地查找目标数字。实现这一功能的方法有很多种,当面临不同情况的时候,我们需要使用不同的方法。

    查找频率很低时,对于每一次查询,暴力从前向后遍历,每次查询的复杂度为 O(N),能解决问题。当查找频率很高时,对有序数字使用二分查找,每次查询复杂度为 O(logN)。或者使用哈希表,每次查询的复杂度为 O(1)。如果数字非常多存不进内存里,可以使用 B 树 的思路来优化查询。当引入密集的插入操作,查询不太密集的时候,可以使用 LSM 树 的思想完成这一功能。
如果你熟知各种基础算法,那么你就可以很容易地针对不同的场景找到合适的解决方案,并且将它们变成代码,以提升程序的效率。而不是遇事不决,先上暴力,虽然解决了问题,但是在时间与空间上还有很多不足。

提升能力、借鉴思路、获得启发
通过学习这些算法,可以提升我们在计算机方面的能力:抽象建模能力、逻辑思维能力等,并且积累一些解决问题的基本思路:折半、倍增、贪心、分治等。
现实中的问题都大相径庭,但是我们通过将其抽象并建模之后,会发现问题的本质是相似的,我们往往可能从某一个基础算法中获得启发,从而高效地解决问题。而达到这一境界,就要求我们首先对基础算法能非常了解,并达到熟练运用,融会贯通的地步。


下面给大家推荐几个算法学习的网站:
对于算法的学习的平台,只要关注以下三个维度来进行选择:

    第一、能够学习算法的原理,在动态规划之后的很多算法,都需要花时间去理解,需要有一个学习的过程。所以,学习算法的过程无论是边学边做还是简单的学习,最好可以附带一定的教学功能。第二、可以对算法进行练习的在线测评系统 (OnlineJudge)。如何选择一个适合自己的 OJ 去练习?力扣君认为首先要看其支持的语言种类与检索功能,另外是否有定期的原创题目,原创比赛。第三、针对第二点,明确进行算法练习的目的,单纯为了提升算法能力还是在提升的同时也想为自己的技术面试做准备。
<hr/>一、力扣 Leetcode(http://leetcode-cn.com)

    集教学与和练习与一体
力扣的 探索卡片 针对每一种算法都有详细的教学和习题,非常适合初学者来进行练习。

    技术面试必备刷题平台
拥有上千道原创算法题的 力扣题库,国内外不少知名 IT 公司技术面试时的首选题库。如果你正在准备技术面试,来力扣刷题肯定没错。

题库 - 力扣 (LeetCode)
    活跃的社区
在力扣 题解 版块发起对一道题的讨论,如果你没有好的解题思路,可以和其他小伙伴一起学习交流。

    每周一次的原创竞赛题
参加每周一次的 力扣周赛,你可以通过周赛来赢取力扣积分兑换相应奖励,如果时间没有那么充裕,也可以参加力扣的虚拟竞赛。力扣的竞赛题更偏求职风格,比赛过程中错误的数据会显示出来以方便选手调式,对多数程序员来说可以说相当友好啦!

二、Github (https://github.com)
Github 除了开源项目以外,也有一些大型的学习算法的项目。比如:

    著名的算法可视化项目
https://github.com/algorithm-visualizer/algorithm-visualizer
其中将许多著名的算法都做了可编辑的动画,对于后期理解图论等相关算法有很大帮助。

    基于 Python 的算法合集
https://github.com/qiwsir/algorithm
亮点是这个项目是中文的,算法由浅入深,相对适合从零开始学算法的。

三、Topcoder(http://topcoder.com)
想挑战自我?可以试下 TopCoder
参加过 TopCoder 比赛的童鞋可能会对它印象深刻,它有它独特的魅力。TopCoder 没有测试用例,在比赛中,完成代码后可以去直接阅读别人的算法,并构造错误用例来为对方扣分。
可以说 TopCoder 很适合学有所成的人去寻找下刺激,不过建议有一定的刷题基础再进行尝试。

四、Coursera(Coursera | Online Courses & Credentials by Top Educators. Join for Free)
Coursera 上有各所大学的算法课程。有很多都是世界顶尖的算法课,有兴趣学习的程序员也可以不妨前去一试。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-30 14:43 | 显示全部楼层
必备技能、工程能力、业务owner和产品的视角。算法工程师们在工作中也不能只会写代码,还需要各方面的综合能力。
(阿里淘系算法工程师琦舞,从事推荐算法行业五年左右,聊聊她的看法。点赞关注我们,后续解锁更多阿里淘系技术干货。)

————————————————————————————————————————
21世纪貌似是个全员转码的时代。大数据、机器学习、人工智能的培训班层出不穷,很多学生冲着算法岗的高薪,争先恐后转码,这也导致了这个赛道上的人越来越多,但只有少数人可以拿到心仪的offer,拥有金字塔顶尖的薪酬。知乎上的话题从算法岗19年一片红海,到20年诸神黄昏,再到21年灰飞烟灭。。。
如果你数学基础还不错,也有一定的编程功底,你完全可以速成机器学习,一个月啃完西瓜书花书南瓜书,两个月手撕竞赛模型,一年憋出一篇水文。既然入行如此简单,为什么算法工程师之间的薪资差异却如此巨大呢?算法这个方向,恰恰是入门易,精通难。比如,何种模型应该何时何地应用于哪个场景,是个很需要经验的事情,当然也建立在对公司业务具有深刻理解的基础上。
除此之外,我们要认清学术界和工业界的差异,在工业界,公司为什么要招聘你?给公司解决问题的。一个大问题,必然伴随着无数个小问题,过程可能会很难,不过话说回来,不难,要你干嘛?发论文不是目的,解决问题才是。
下面说说我的理解。
正如智慧的查理芒格所说,人只有做自己感兴趣的事情,才能成功。如果不喜欢的事情还要做到很好,那对人性的要求过高。如果你不喜欢写代码,下面的回答可以跳过了。答主是真的喜欢数学和代码,我觉得数学和代码像舞蹈一样,都是优雅的艺术,而我们是匠师,打造出优雅漂亮的代码是我们的职责。工作期间,不是每天都有时间写代码的,能够写代码的一天,绝对是快乐的一天。答主工作五年,对每天的工作仍然有很高的热情,工作带来的成就感和满足感,是很多事情远不能替代的。
但算法工程师们在工作中也不能只会写代码,还需要一些其他方面的综合能力。下面具体聊聊。

聊聊工程能力的重要性。

拿舞蹈来举例,如果我们把算法训练出的模型比作一支成品舞,那么工程能力就是舞蹈基本功。如果完全没有练习过基本功,或者基本功差,手脚不协调,通过努力,你也可以学会这支成品舞,但却离艺术和美感度相差甚远。如果基本功非常扎实,那么你学任何一支新舞,皆是水到渠成自然而然之事。
如果你工程能力很强,基本功扎实,在工作过程中需要解决一些实际问题时,便可以很快上手解决,理论和实践之间,就差一双手。


聊聊工作中必备的工程能力。

(一个算法工程师不会写代码,正如一个裁缝不会裁剪。)
有个答主已经回答得很全面了,我就我的工作经验列出几条不可或缺的工程能力。
一名合格的算法工程师必须要具备的工程能力:
1、debug。快速定位问题的能力十分宝贵。这点是最重要的。
2、Python、Java、C++等,这三种编程语言很重要,使用的频次从高到低。模型离线训练时需要用到Python(无论是tensorflow还是pytorch框架),线上serving或者实现定制化的算法策略时,一般用Java实现,线上Query predict服务一般用C++实现。
推荐多看一些优秀的语言类书籍,对自己编程习惯的养成很有帮助,多看书多思考多写代码多实践,代码肯定会越来越6的。后面我会写一个专题,与大家分享对我有帮助的一些算法/语言类技术书籍。
3、hive sql。这是工作中使用频次很高的语言,我们都是sql boy/sql girl。
4、shell、Awk等。快速处理数据以及调用一些python、java脚本时,经常会用到。
5、scala:在我工作的前几年用spark比较多,训练非深度模型很方便,与hive sql的交互也十分方便。
6、对分布式框架的理解。这个非常重要。比如tensorflow框架中的ps/worker/chief是怎么协同工作的,参数更新在哪里,模型训练在哪里?


除了必备的工程能力,一个合格的算法工程师,并不仅仅是算法工程师,他必须要有业务owner和产品的视角。
有些时候,算法效果提升遇到瓶颈时,不妨想想,从用户角度出发,从产品层面出发,是否还有更好的切入点。我们也应该深入思考业务运行机制,从投放供给端,通过冷启,到召回,到粗排,到精排,最后到排序机制,哪个链路都有可能出问题,哪个链路都有优化点,所以说,一个全栈全链路的算法工程师是稀缺的人才。供给/召回/精排/机制的联动优化,才有可能使线上效果取得质的飞跃。
一个优秀的算法工程师,既可以玩转模型,又对产品有独到的见解和思考。比如信息流推荐场景的优化,当你作为一个真实的用户去体验推荐视频流时,就会很容易发现一些产品或者系统层面的问题,然后再回归到算法,用技术手段或与产品合作去解决这些问题。只有这样,公司的产品才有可能越做越好,算法优化的天花板才会越来越高。


最后打个广告,介绍下我们团队。我们是阿里电商推荐搜索算法团队,拥有全球最大的电商推荐、搜索算法场景,是每年双11/618购物狂欢节的背后中坚力量。具有基于深度学习、认知学习、端云一体化的算法/工程体系,近两年发表16篇A类论文。我们团队需要工程能力过关、算法基础扎实、对代码和算法有深度热爱的同学。欢迎同学们加入我们团队。可内推,简历可发邮箱:yangruqi_zju@163.com。


(本篇内容作者:阿里巴巴淘系技术部-琦舞)
——————————————————————————————————————————
阿里巴巴集团淘系技术部官方账号。淘系技术部是阿里巴巴新零售技术的王牌军,支撑淘宝、天猫核心电商以及淘宝直播、闲鱼、躺平、阿里汽车、阿里房产等创新业务,服务9亿用户,赋能各行业1000万商家。我们打造了全球领先的线上新零售技术平台,并作为核心技术团队保障了11次双十一购物狂欢节的成功。详情可查看我们官网:阿里巴巴淘系技术部官方网站。
点击下方主页关注我们,你将收获更多来自阿里一线工程师的技术实战技巧&成长经历心得。另,不定期更新最新岗位招聘信息和简历内推通道,欢迎各位以最短路径加入我们。
阿里巴巴淘系技术
发表于 2021-7-30 14:52 | 显示全部楼层
一、前言

工作时长2年的算法工程师来强答一波~
一直以来,被问到最多的问题就是「算法的学习路线」。
今天,它来了。
我会带着大家看看,我们需要学些啥,利用这个假期,我甚至还收集整理了配套视频和资料,暖男石锤啊,这期文章有用的话,别忘三连哦!
二、学习路线

主要分为 4 个部分:数学基础、编程能力、算法基础、实战。
本文提到的资料,我都整理好了,有需要的自取(提取码:jack):

https://pan.baidu.com/s/12tbVrUF056pY7aCyMpgl1w
1、数学基础

在机器学习算法中,涉及到最为重要的数学基本知识有两个:线性代数概率论
这两也是大学的必修课了,如果知识早已还给老师,也没关系,哪里不会学补哪里
线性代数研究的是线性空间的性质,数据通常会被表示为欧式空间中的点,而这些点经过一系列变换后会映射到另一个空间,在新的空间中隐藏在数据中的规律才得以显现。
所以线性代数作为研究空间的一门科学,是入门机器学习的最要基础之一
视频:推荐 MIT 的老教授 Gilbert Strang 的线性代数上课视频。
没学过线代的同学会发现这门课程,讲得清晰而且直观,深入线代的精髓,完全不是那种理论堆砌的讲法,而且老教授幽默风趣,很有人格魅力。
英文不好,也不用担心,字幕是中文的
教材:推荐《线性代数及其应用》,作者是 David C. Lay 。
喜欢看书的朋友,这本书一定不能错过。
这本书详细地介绍了线性代数在几何学、计算机图形学、经济学、概率论、信号与系统、微分方程等领域的应用,给人以直观的认识。
概率论是研究不确定性的一门科学,生活处处是概率。机器学习算法需要对现实情况建模,自然是少不了将概率论作为工具。
这门课入门并不难,大家可以挑一本评分还可以的书开始学习。
这里推荐陈希儒的《概率论与数理统计》,讲得很详细,如同听一个老者回忆自己的概率与统计心得,相信读者也会有所收获。
如果时间充裕,推荐先学好数学基础。如果时间不够,那就跳过数学基础部分,学算法的时候,哪里不会补哪里。
2、编程能力

编程语言,需要至少掌握两门, Python 和 C++。
工作中,Python 主要用于处理数据算法调研模型训练的工作,而 C++ 则是负责工程落地
算法工程师,需要针对落地场景,对算法的可靠性和实时性等方面进行优化,C++ 工程能力必不可少。
Python 是一门非常友好的编程语言,不但易于入门而且功能强大,在进行机器学习算法开发的过程中会大量使用 Python。
视频:我上学看的第一个视频,就是小甲鱼 Python 课程,风趣幽默,涉及Python 语法基础、网络爬虫、Pygame 飞机大战等内容,内容很丰富。
实战是最好的老师,学习 Python 的时候,可以找一个自己喜欢的方向,去实战。
边实战,边学习。比如写爬虫、做小游戏、玩各种有趣的算法等。
这里面,爬虫是最简单的,很容易有成就感,让你坚持学习下去,下载小说、下载漫画、下载音乐、下载电影、抢票等等小程序。
这个推荐我的一个 Github star 量 11.4k+、fork 4.5k+的爬虫项目。
每个实战,都有对应的文章教程,代码开源
项目地址:https://github.com/Jack-Cherish/python-spider
教材:推荐《流畅的Python》,书看完有些难度,但是哪来当个手册用,很方便,哪些语法忘记了,翻阅一番,必能有所收获。
C++ 是一种面向对象的程序设计语言,无论你是做算法,还是做开发,亦或者是做测开。C++ 都应该掌握,它是一个基础的编程语言。学会了这门编程语言,再学其它,就会更得心应手。
视频:这部分推荐慕课网的免费教程,很好的入门视频,老师讲得绘声绘色、形象生动、通熟易懂。
一共分为 7 章,每章视频的时间是 2-3 个小时,半个月可以轻松刷完,学习顺序是:
    C++远征之起航篇C++远征之离港篇C++远征之封装篇(上)C++远征之封装篇(下)C++远征之继承篇C++远征之多态篇C++远征之模板篇
教材:推荐被誉为“圣经”的《C++ Primer》,经典巨著,非常棒的书。
编程语言基础学完了,接下来就是数据结构与算法。
数据结构与算法是程序员的内功,每一个工程师的必修课。
数据结构的学法,我推荐是直接看书,一边学习一边刷题,同时进行,这样学的速度快。
就如同书名一样,这是一本像小说一样有趣的算法入门书,非常易懂,强烈推荐。
可以与这本书一同学习的,就是《剑指Offer》,里面讲解了 66 道+ 常见数据结构题,解析思路,简单易懂。
两门书一起看,轻松入门数据结构与算法。
不过《剑指Offer》讲解的代码都是 C/C++,没有 Python 版本,想看 Python 版本的,可以看我整理的教程,C++ 和 Python 都有实现和讲解,题目已按照类型划分好。
项目地址:https://github.com/Jack-Cherish/LeetCode
两本书都看完,题也刷完了,那就算是入门了。
想进阶,进一步学习,直接上 LeetCode。
力扣可以从 HOT 100 或 精选算法 200 题刷起,题目相对于《剑指Offer》要增加一些难度,但每道题目都有对应的解题思路和答案。
坚持刷完 200 道,大多的面试轻松搞定,完全够用。
当然要面试谷歌级别的大佬,Hard 题是不能放过的。
刷题地址:https://leetcode-cn.com/
Tip:刷一遍题,回头看还会忘,不要怀疑自己,要反复刷,反复练习。
同时,推荐一个非常好的谷歌大佬的刷题笔记:
Jack-Cui:看完谷歌师兄的刷题笔记,多语言通吃,秒杀 88% Leetcode 题目3、算法基础

恭喜大家,在做了前面这么多基础工作之后,终于可以开始入门机器学习算法了。
机器学习
视频:推荐吴恩达老师的机器学习视频,吴恩达是整个领域的巨头之一,学术地位很高。同时,他出的视频也对新手非常友好,入门的不二之选。
教材:还是那句话,光看不练是不行的。《机器学习实战》,理论结合实战,适合新手。
《机器学习实战》使用 Python2 实现,有些细节讲的不够细致,对此我进行了完善,使用 Python3 复现了一遍,并结合 sklearn 以及更多的好玩例子,进行讲解。
全网阅读量 500w+:
对应的 Github 开源代码 Star 3.3k+,fork 3.1k+。
在线阅读地址:
https://cuijiahua.com/blog/ml/
深度学习
深度学习是现在的算法工程师绕不开的一个子领域,是机器学习的子集。
视频:还是推荐吴恩达老师的深度学习视频,也是对新手非常友好。
教材:说实话,深度学习,我并没有看过书,都是视频+ Github 开源项目学习的,不过被誉为深度学习领域圣经的“花书”,可以备一本。
深度学习框架
深度学习框架有很多,Tensorflow、Pytorch、Paddle、MXNet、Caffe等。
我在工作过程中,用的最多的是 Pytorch,其次是 Tensorflow。
新手上手,推荐先学 Pytorch,可以直接看 Yunjey Choi 大佬的 Github 教程,简单入门:
项目地址:
https://github.com/yunjey/pytorch-tutorial
Pytorch 深度学习框架学习,也可以看我写的 Pytorch 深度学习实战系列教程,有垃圾分类、图像分割等结合实战的小项目。
Github 开源代码 Star 400+,fork 250+。
项目地址:
https://github.com/Jack-Cherish/Deep-Learning
4、实战

实战实战,文章反复提到了这么多次,仅仅这些还是远远不够的。
因为更多时候,你是跟着视频 or 文章的思路去实战,这缺少了独立思考的过程。
学了这么多,你并没有独立完成过一个项目,数据怎么处理,怎么分析问题,用什么算法解决问题,也没有独立思考过。
算法工程师的岗位竞争也比较激烈的,为了在茫茫人海中脱颖而出,我们需要以团队个人的形式,独立完成一些项目,只有这样,你才能更具竞争力。
对于学生党,做项目,最简单直接的方法就是参加竞赛
推荐两个参加竞赛的地方,一个是国外的 Kaggle,另一个是国内的阿里云天池
两个竞赛的奖金也都很丰富,根据自己的喜好,参赛即可。
Kaggle:https://www.kaggle.com/
阿里天池:https://tianchi.aliyun.com/competition/gameList/activeList
既能打比赛,又能赢奖金,何乐而不为呢?
上文提到的资料,都放在了 Github,需要的自取:
上文提到的资料,都放在了Github,需要的自取。三、絮叨

这篇文章整理的也是我的学习路线。
要说需要学多久,那就看个人的学习动力了。
如果你想去一家不错的公司,但是目前硬实力不过关,我觉得还是有必要去努力一下的,技术能力的高低决定你能走多远,平台的高低,决定你能飞多高。
如果可以通过自己的努力,进入自己心仪的公司,一定不要松懈怠慢,职场成长和学习新技术一样,不进则退。
你往往会发现,身边实力越强的人越努力,最高级的自律就是享受孤独
创作不易本期硬核,感谢点赞支持!笔芯~ 记得关注我哟 @Jack-Cui
刷题的话,也可以看另外一个大佬的刷题笔记。
Jack-Cui:看完谷歌师兄的刷题笔记,多语言通吃,秒杀 88% Leetcode 题目祝点赞的人,人人都是offer收割机!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-30 14:58 | 显示全部楼层
以阿里算法团队招聘要求为例,要考察候选人的哪些能力?

有个普遍规律:在前序阶段做严格的控制会大大降低后序阶段的实现难度,比如招聘,人招进来之后是要管的,招聘的时候高标准、严要求,后续管理起来就会轻松很多。
招聘时首先要确定职位模型( job model )。对于我们所处的时代背景来说,新算法层出不穷,但唯一不变的是数学基础、计算机基础和动手能力。
你很难预测新技术的具体实现,但当新技术出现时,你需要快速地分析、学习并掌握它。而且,工作中经常要解决从来没有遇到过的新问题,这就要求候选人在面对没见过的问题时具备分析判断,在具体约束条件下找完整解决方案的能力。另外,在复杂的业务场景中,问题经常没有确定性的答案,往往是通过对过程的合理性来判断整个方案是否合乎要求。寻找答案的过程很少有一帆风顺的,大概率会遭遇挫折,这就要求候选人不断尝试、不断修正,去抵达终点。
至于教育背景、之前的从业经历,威视认为不怎么重要。如果一个人能力强,是不需要靠学校学位来旁证的,直接用行动证明就行了。

对于候选人的考察,威视往往从基础的硬技能、创新性 / 开放性思维、精神素质三方面考察。
硬技能
1. 数学:包括概率论与数理统计、矩阵论、随机过程。
2. 计算机基础:包括操作系统、组成原理、数据结构。
3. 算法能力:包括对领域内主流模型进行优缺点对比、在设定的场景中选择合适的方案等。
由于算法工程师的种类有很多,我先以数据挖掘工程师为例,如果想长期在这个行业深耕下去,那么从一开始就力争让自己成为具有策略优化和数据挖掘能力的全栈数据挖掘人才,而非只懂“调算法包,跑代码”的单一技能程序员。
也就是需要你既有解决数据挖掘流程问题的横向能力,又有解决数据挖掘算法问题的纵向能力。
如果你对算法工程师的能力模型还想有更多的了解,也可以看看这个 CDA数据挖掘工程师就业班_就业培训课程-CDA数据分析师官网
除此之外,我始终强调,不管是不是科班出身,每一个程序员都应该花时间了解和学习计算机科学相关的基础知识,因为所有关于如何编程的底层逻辑和原理都在那里了。
这里有4本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~
全网累计下载100w+次,瞬间让你起飞的计算机基础知识切记:学习资料在于精,不在于多,多反而不是好事,作为一名程序员,大家的学习时间都太宝贵了,我们要把80%时间投入在最有价值20%的学习内容上,具体内容可以看上面这篇资料贴。
创新性 / 开放性思维
前面的硬技能,看的往往是结果,而对思考能力的考察,看的是过程,看候选人是否有方法论、思路是否清晰、是否言之有据。所以,威视经常在面试过程中考智力题,这种面试方式往往是讨论式的。
如果候选人能够完成,最后再请他做个总结,观察其归纳要点的能力和视线的高度。
有些候选人结束面试后仍然会继续思考,给出更好的回答。
精神素质
公司对人才的要求是:乐观、皮实、聪明、自省。
四个词里面有两个都在强调坚韧不拔。在面试过程中,会看候选人在解题不顺时的表现,有时甚至故意刺激一下候选人,观察他的反应,偶尔还会故意在中途改变限制条件。这是因为阿里巴巴内部竞争激烈,经常需要拥抱变化,如果心理承受力脆弱,是不适合当同路人的。
还有一点很重要:自我驱动力,这是从降低对内管理成本来要求的。
硬技能、创新性 / 开放性思维和精神素质缺一不可。即使这三方面都满意了,如果主管、主管的主管、 HR 对候选人明确提出疑虑便直接放弃该候选人。
你可能会问:这样做,会不会错失优秀人才?这种方式几乎可以确保招进来的同学肯定是好的,但有时候确实会错失一些优秀的候选人,不过这不会造成严重的后果。相比之下,招进来不合格的人才会造成大麻烦。
发表于 2021-7-30 15:02 | 显示全部楼层
本人目前武汉某211高校硕士,今年毕业,找的工作也是算法工程师。今年算法工程师岗爆火,竞争惨烈啊,若非之前拿到了某为的实习,并转了正,怕是要做炮灰了。
进入正文:
首先不能说学历不重要,但更重要的是技术,分享一篇文章给你,算是鸡汤文,不过也是有启发的——大专生也能进阿里?
再次对于算法岗的要求,你完全可以去大公司或心怡的公司招聘官网上看看他们是怎么要求的,然后针对之加强训练。
基础是很重要的,决定着你在笔试中的成绩和部分面试中的表现。要说基础包括什么,就看计算机科班学什么了。计算机网络技术和操作系统是必不可少,对编程语言的掌握程度,对编程能力的强弱也是一定会考查的。
最后一点是个人建议,翻看了你以前的问题,觉得你可能在考研上还有些想法。如果技术不是很强,或不想要低薪资的话,可以考虑考研,到985、211高校镀个金,顺便把自己的技术提上来。我本科时找工作最高只给6000,研究生时是16000。最后一句,如果真要考的话,一定要找个好导师,一定要找个好导师,一定要找个好导师,不然会在毕业时恶心你,甚至在读研期间让你很痛苦。。。我深有体会啊。。。
愿有助于你。
发表于 2021-7-30 15:10 | 显示全部楼层
9年广告算法背景推荐以下回答:
https://www.zhihu.com/question/426743420/answer/1555802922
发表于 2021-7-30 15:16 | 显示全部楼层
给大家分享一点新的职位,可以了解一下,相互帮助
https://u.wechat.com/IJDN3tW8RiVL71I3pi9soho (二维码自动识别)
发表于 2021-7-30 15:20 | 显示全部楼层
工作内容、任务、职责:
1、通过机器学习 (Machine Learning, ML, 主要通过数据训练一个模型,然后用这个模型进行预测,比如分类)、自然语言处理(Natural Language Processing, NLP, NLP可以说是机器学习在文本上的应用)的技术,用智能客服代替人工客服,减少人力成本;
2、进行线上模型优化,搭建机器学习平台。
工作考核要求:
1、项目为公司带来的实际收益,比如减少人工的数量、成交量、投诉率等;
2、机器学习平台的使用率、落地的项目(智能客服、机器判责、智能硬件)等。
学历要求:
最好硕士及以上学历,优秀本科生也可以。
行业知识背景:
有机器学习、NLP顶级会议、期刊者优先。

求职知识背景:
1、收集求职信息、网申、投递简历
主要通过求职网站(前程无忧、应届生、牛客网)、公司的公众号、校内网、公司的官网以及师兄们发布的一些内推的消息(师兄内推会更有用),进行网申或者内推,投递简历。
2、准备在线笔试
a.需要刷一些在线的编程题,比如leetcode、牛客网;
b.需要温习机器学习的一些基础知识,比如统计学习方法、机器学习;
c.需要温习计算机的一些基础知识,比如数据结构、计算机网络、数据库。
3、准备现场面试
a.需要刷一些常见的面试编程题,比如剑指offe、编程之美;
b.需要温习机器学习的一些基础知识;
c.需要整理自己在学校的科研和工程项目。
重要的大学课程:
机器学习
数据挖掘
C++
数据结构
重要未开设的大学课程:
自然语言处理

专业技能:
1、需要掌握基础的机器学习原理和实现,并能够快速应用到项目中;
2、需要具有自然语言处理背景,对NLP的常见领域,比如分类、机器翻译、摘要 (分类比如,一段文字,机器能够自动判断关于经济还是政治这样的类别,机器翻译就是通过机器将英语翻译成中文,摘要是把一大段文字,机器用简短的句子表示(类似标题)),有1-2个比较擅长;
3、关注最新的机器学习和自然语言处理的论文和技术,熟练使用TensorFlow,能快速复现论文中的方法;
4、需要具有一定的工程能力,熟练使用linux,熟练应用c++进行线上代码的开发。

通用技能:
工程能力、数据统计、分析和建模、沟通能力。
常用工具
1、编程语言,计算机各个岗位都需要,c++, python;
2、操作系统,多数计算机岗位需要(算法、大数据、研发),linux;
3、机器学习/自然语言处理,需要的深度学习的工具, TensorFlow。
个人发展路径:
1、算法工程师 (人工智能工程师):在必要的辅导下,能够独立负责一个子模块或者一个项目具体任务的算法相关的工作,对及时性和准确性负责;
2、高级算法工程师:能够承担某一项目的算法相关工作,对工作成果负责;
3、资深算法工程师:能够独立组织,实施项目的算法工作,对低层次的人员进行指导;
4、专家算法工程师:在领域内具备一定的影响力,能够能够独立组织、实施项目的算法工作高质量完成;
5、高级专家工程师:在多个领域具备一定的影响力,能够在公司层面发挥技术影响力。
发表于 2021-7-30 15:30 | 显示全部楼层
前两年在网上屡屡爆出应届算法工程师拿到不菲年薪的新闻,那么成为一名算法工程师要掌握哪些内容呢?让我们盘点一下。
首先这个是要和你选择发展的方向有一定的关系的,单纯的师算法工程师,他们的职责我认为更纯粹,他们需要知道如何把现实问题转化为数学的模型,并且把模型调到极致,从而解决问题。所以,算法工程师工作内容比较单一,但是更专,需要更好的数学功底。
然而像大数据挖掘工程师需要了解整套数据流入的过程,包括数据的接入、预处理,然后需要知道怎么用数据解决实际的业务问题,说白就是想办法让数据产生价值。
但是他们要掌握的基础基本上都是一样的
良好的数学基础和编程能力,这个要求学生阶段要深入学习基本知识。
对数据结构和算法有深入的了解和应用,可以通过在牛客题霸或其他同类网站进行刷题提升。
业务能力,能够使用算法建立模型,贴合业务解决实际问题。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 13:38 , Processed in 0.105885 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表