如何“快”、“准”、“狠”成为优秀算法工程师

https://www.cnblogs.com/DicksonJYL/p/9713948.html

怎样成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。

那么,一个优秀的算法工程师必须具备哪些素质?我们给出的答案是这样的:

数学知识

编程能力

机器学习与深度学习的知识

应用方向的知识

对自己所做的问题的思考和经验

除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来我们将按照这几个方面进行展开,详细的说明如何学习这些方面的知识以及积累经验。

数学知识

与其它工作方向如app、服务器开发相比,以及与计算机科学的其他方向如网络,数据库,分布式计算等相比,人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多打算入门的人或者开始学习的人感到明显的压力。因此我们应该要考虑的最核心的问题是:机器学习和深度学习究竟需要哪些数学知识?先看下面这张表:

机器学习算法和数学知识关联表

上面的表给出了各种典型的机器学习算法所用到的数学知识点。我们之前已经总结过,理解绝大多数算法和理论,有微积分/高等数学,线性代数,概率论,最优化方法的知识就够了。除流形学习需要简单的微分几何概念之外,深层次的数学知识如实变函数,泛函分析等主要用在一些基础理论结果的证明上,即使不能看懂证明过程,也不影响我们使用具体的机器学习算法。概率图模型、流形学习中基于图的模型会用到图论的一些基本知识,如果学习过离散数学或者数据结构,这些概念很容易理解。除此之外,某些算法会用到离散数学中的树的概念,但很容易理解。

编程能力

编程能力是学好机器学习和深度学习的又一大基础。对于计算机类专业的学生,由于本科已经学了c语言,c++,数据结构与算法,因此这方面一般不存在问题。对于非计算机专业的人来说,要真正学好机器学习和深度学习,这些知识是绕不开的。

虽然现在大家热衷于学习python,但要作为一名真正的算法工程师,还是应该好好学习一下c++,至少,机器学习和深度学习的很多底层开源库都是用它写的;很多公司线上的产品,无论是运行在服务器端,还是嵌入式端,都是用c++写的。此外,如果你是应届生,在校园招聘时不少公司都会面试你c++的知识。

C++最经典的教材无疑是c++ primer,对做算法的人来说,这本书其实不用全部看,把常用的点学完就够了。对于进阶,Effective c++是很好的选择,不少公司的面试题就直接出自这本书的知识点。

接下来说python,相比c++来说,学习的门槛要低很多,找一本通俗易懂的入门教程学习一遍即可。

数据结构和算法是编写很多程序的基础,对于机器学习和深度学习程序也不例外。很多算法的实现都依赖于数组,链表,数,排序,查找之类的数据结构和基础算法。如果有时间和精力,把《算法导论》啃一遍,你会有不一样的感受。对于应届生来说,学完它对于你通过大互联网和人工智能公司校园招聘的技术面试也非常有用。

上面说的只是编程语言的程序设计的理论知识,我们还要考虑实际动手能力。对于开发环境如gcc/g++,visual studio之类的工具,以及gdb之类的调试工具需要做到熟练使用。如果是在linux上开发,对linux的常用命令也要熟记于心。这方面的知识看各种具体的知识点和教程即可。另外,对于编程的一些常识,如进程,线程,虚拟内存,文件系统等,你最好也要进行了解。

机器学习与深度学习

在说完了数学和编程基础之后,下面我们来看核心的内容,机器学习和深度学习知识。机器学习是现阶段解决很多人工智能问题的核心方法,尤其是深度学习。因此它们是算法工程师的核心知识。在这里有一个问题:是否需要先学机器学习,还是直接学深度学习?如果是一个专业的算法工程师,我的建议是先学机器学习。至少,你要知道机器学习中的基本概念:过拟合,生成模型,ROC曲线等,上来就看深度学习,如没有背景知识你将不知所云。另外,神经网络只是机器学习中的一类方法,对于很多问题,其他机器学习算法如logistic回归,随机森林,GBDT,决策树等还在被大规模使用,因此你不要把自己局限在神经网络的小圈子里。

首先来看机器学习,这方面的教材很多,周志华老师的机器学习,李航老师的统计学习方法是国内的经典。这里我们介绍国外的经典教材,首先是PRML,此书深厚,内容全面,涵盖了有监督学习,无监督学习的主要方法,理论推导和证明详细深入,是机器学习的经典。此外还有模式分类这本书,在这里不详细介绍(另外推荐雷老师的《机器学习和应用》,将于10月于清华出版社出版,这是一本理论与实践并重的好书)

深度学习目前最权威的教程是人邮出版社出版的《深度学习》,江湖人称花书。它涵盖了深度学习的方方面面,从理论到工程,但美中不足的是对应用介绍得相对较少。

强化学习是机器学习很独特的一个分支,大多数人对它不太了解,这方面的教程非常少,我们推荐下面这本书:《An introduction to reinforcement learning》。美中不足的是这本书对深度强化学习没有介绍,因为出版得较早。不知最新的版本有没有加上这方面的内容。

在这里需要强调的是,你的知识要系统化,有整体感。很多同学都感觉到自己学的机器学习太零散,缺乏整体感。这需要你多思考算法之间的关系,演化历史之类的问题,这样你就做到胸中有图-机器学习算法地图。

开源库

上面介绍了机器学习和深度学习的理论教材,下面来说实践问题。我们无需重复造车轮子,熟练的使用主流的开源库是需要掌握的一项技能。对于经典的机器学习,常用的库的有:

libsvm

liblinear

XGBoost

OpenCV

HTK

Weka

在这里我们不一一列举。借助于这些库,我们可以方便的完成自己的实验,或是研发自己的产品。对于深度学习,目前常用的有:

Caffe

TensorFlow

MXNet

除此之外,还有其它的。对于你要用到的开源库,一定要理解它的原理,以及使用中的一些细节问题。例如很多算法要求输入的数据先做归一化,否则效果会非常差,而且面临浮点数溢出的问题,这些实际经验需要你在使用中摸索。如果有精力把这些库的核心代码分析一遍,你对实现机器学习算法将会更有底气。以深度学习为例,最核心的代码无非是实现:

各种层,包括它们的正向传播和反向传播

激活函数的实现

损失函数的实现

输入数据的处理

求解器,实现各种梯度下降法

这些代码的量并不大,沉下心来,我相信一周之内肯定能分析完。看完之后你会有一种豁然开朗的感觉。

应用方向的知识

接下来是各个方向的知识,与机器学习有关的应用方向当前主要有:

机器视觉

语音识别

自然语言处理

数据挖掘

知识图谱

推荐系统

除此之外,还有其他一些特定小方向,在这里不一一列举。这些具体的应用方向一般都有自己的教材,如果你以后要从事此方向的研究,系统的学习一遍是必须的。

实践经验与思考

在说完理论与实践知识之后,最后我们来说经验与思考。在你确定要做某一个方向之后,对这个方向的方法要有一个全面系统的认识,很多方法是一脉相承的,如果只追求时髦看最新的算法,你很难做出学术上的创新,以及工程上的优化。对于本问题所有的经典论文,都应该化时间细度,清楚的理解它们解决了什么问题,是怎么解决的,还有哪些问题没有解决。例如:

机器视觉目标检测中的遮挡问题

推荐系统中的冷启动问题

自然语言处理中文分词中的歧义切分问题

只有经过大量的编程和实验训练,以及持续的思考,你才能算得上对这个方向深刻理解,以至于有自己的理解。很多同学对自己实现论文上的算法没有底气,解决这个问题最快的途径就是看论文算法的开源代码,在github上有丰富的资源,选择一些合适的,研究一下别人是怎么实现的,你就能明白怎么实现自己的网络结构和损失函数,照葫芦画瓢即可。

计算机以及人工智能是一个偏实践的学科,它的方法和理论既需要我们有扎实的理论功底,又需要有丰富的实践能力与经验。这两个方面构成了算法工程师最主要的素质。科学的学习路径能够让你取得好的学习效果,同时也缩短学习时间。错误和浮躁的做法则会让你最后事倍功半。

如何“快”、“准”、“狠”成为优秀算法工程师相关推荐

  1. 快准狠!Intel论文揭示自家车牌识别算法:LPRNet

    (关注52CV--有价值有深度的公众号~) 来自工业界的最佳实践. 车牌识别是一个老生常谈的话题,在工业界已经得到广泛应用.当深度学习在各种视觉识别任务上刷新更高精度的时候,却常常被认为计算量远大于传 ...

  2. AliExpress智能营销引擎大揭秘-AnalyticDB如何做到快准狠省

    简介:AliExpress(简称AE)是从集团内wholesale孵化出来面向全球消费者的B2C电商平台,目前也是全球化电商业务的排头兵.AnalyticDB MySQL作为链路核心,支撑了AE业务的 ...

  3. AliExpress智能营销引擎大揭秘 - AnalyticDB如何做到快准狠省

    业务介绍 AliExpress(简称AE)是从集团内wholesale孵化出来面向全球消费者的B2C电商平台,目前也是全球化电商业务的排头兵.当前AE为全球220+个国家提供在线购物服务,支持3端(P ...

  4. 计算机本科211调剂到双非值得吗,经验分享:从双非到211,调剂是场快准狠的战役...

    经验分享:从双非到211,调剂是场快准狠的战役 摘要:最近在论坛中,看到很多18的学弟学妹们焦急询问调剂的相关事宜,作为一个过来人,我是有一些经验的,今天和大家分享我调剂的过程,希望对大家有所帮助. ...

  5. “快准狠”找到系统内存的问题

    "快准狠"找到系统内存的问题 文章目录 "快准狠"找到系统内存的问题 前言 一.内存性能指标 二.内存性能工具 三.性能指标和工具的联系 四.如何迅速分析内存的 ...

  6. 5分钟超快速写,快写练习讲究快准狠~

    5分钟超快速写怎么画?画快些有哪些技巧?很多小伙伴在学习速写的时候都会遇到各种问题今天美术集网校带大家了解下快写的绘画技巧: 5分钟超快速写,快写练习讲究快准狠~ 5分钟超快速写,快写练习讲究快准狠~ ...

  7. 如何“快准狠”的找到内存的问题

    如何"快准狠"的找到内存的问题 内存性能指标 内存性能工具 性能指标和工具的联系 如何迅速分析内存的性能瓶颈 小结 内存性能指标 为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存 ...

  8. 创业公司考勤管理如何做到快准狠!

    考勤管理是一个公司基础的事务性工作,需要涉及到员工每日考勤情况,月末考勤统计,考勤数据关联绩效,工资发放几个相关的步骤,工作量大而繁琐.正是由于传统的考勤管理极其耗费精力,企业纷纷转向了自动化考勤,实 ...

  9. 观察 | 从0到700万,钉钉只用3年,原因就是快准狠!

    深圳,是一个特别容易让媒体产生联想的城市,因为,这里是腾讯的大本营,而钉钉又特别喜欢在这里开发布会,这已经是第三次了,如果说是巧合,估计没人会信. 我已经记不清,这到底是第多少次参加钉钉的发布会.回想 ...

最新文章

  1. HALCON基于灰度值的模板匹配
  2. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc
  3. 音视频技术开发周刊(第126期)
  4. Spring MVC总结
  5. 坡度土方计算案例_土石方工程造价中的细节解析(案例+计算式)
  6. win32开发(按键消息)
  7. 工厂模式和策略模式区别
  8. python encode函数_关于字符串:在python中使用unicode()和encode()函数
  9. php array_diff 用法
  10. MacBook 电脑Touch Bar该怎么设置
  11. 深圳大学计算机网络实验五:Socket编程
  12. 白话斯坦福机器学习课程-CS229 - 监督学习应用:梯度下降
  13. 【Python入门】5-1 条件判断 if、if-else、if-elif-else
  14. 【QA单】柿饼派及柿饼M3模块相关QA(持续更新....)
  15. centos 上搭建FC SAN
  16. 物联网在智慧校园里的应用
  17. FFMPEG录屏(1)----录制桌面
  18. K8s安装dashboard可视化界面
  19. 一个专业跨境电商人才需要做哪些数据分析
  20. html5页面弹幕代码,html5新年许愿文字弹幕代码

热门文章

  1. 作为一名程序员,最大的成就感来自哪里?
  2. 正态分布,此际回头看,原来并没有事
  3. 不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星
  4. Facebook AI新研究:可解释神经元或许会阻碍DNN的学习
  5. 赠书 | 人工智能变“人工智障”?关于因果关系的新科学
  6. 深度学习再登Science:万物皆可做神经网络处理器,你甚至可以用锅碗瓢盆
  7. 更快更强,谷歌提出SWideRNet:全景分割新标杆来啦!
  8. 港中文周博磊:十年之间的CVPR与我们(附CVPR2020部分论文链接/开源代码/解读)...
  9. 春节假期延长了,这里给你推荐几本2020年不容错过的机器学习书籍!
  10. MATLAB中repmat是什么,在NumPy中,MATLAB的repmat是什么?