欢迎关注SIGAI人工智能平台
SigAIwww.zhihu.com文章来源:
SIGAI人工智能讲堂zhuanlan.zhihu.com如何成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。
市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。为了更好的帮助大家学习和成长,少走弯路,在今天的文章里,SIGAI的作者以自己的亲身经历和思考,为大家写下对这一问题的理解与答案。
首先来看一个高度相关的问题:一个优秀的算法工程师必须具备哪些素质?我们给出的答案是这样的:
数学知识
编程能力
机器学习与深度学习的知识
应用方向的知识
对自己所做的问题的思考和经验
在技术方面大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来我们将按照这几个方面进行展开,详细的说明如何学习这些方面的知识以及积累经验。
数学知识
人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多打算入门的人或者开始学习的人感到明显的压力。首先我们考虑一个最核心的问题:机器学习和深度学习究竟需要哪些数学知识?在SIGAI之前的公众号文章“学好机器学习需要哪些数学知识“中已经完整讲述,可以点击链接查看原文,不再赘述。
SIGAI的“人工智能数学基础”课程将带你全面系统的回顾机器学习所需的数学知识,包括高等数学,线性代数,概率论与数理统计,确保数学不会成为你学好机器学习和深度学习的障碍。
课程名称:
人工智能的数学基础-课程详情sigai.cn导师简介:王老师
本科毕业于北大数学科学学院,曾入选IMO国家集训队,中国科学院数学院统计学硕士,普渡大学统计系博士生。在应用数学、机器学习方向有深厚的造诣,擅长理论与应用的结合,曾在知名AI公司从事核心算法的研发。
编程能力
编程能力是学好机器学习和深度学习的又一大基础。对于计算机类专业的学生,由于本科已经学了c语言,c++,数据结构与算法,因此这方面一般不存在问题。对于非计算机专业的人来说,要真正学好机器学习和深度学习,这些知识是绕不开的。
要作为一名真正的算法工程师,应该要好好学习一下c++,至少机器学习和深度学习的很多底层开源库都是用它写的;很多公司线上的产品,无论是运行在服务器端,还是嵌入式端,都是用c++写的。此外,如果你是应届生,在校园招聘时不少公司都会面试你c++的知识。
C++最经典的教材无疑是c++ primer:
对做算法的人来说,这本书其实不用全部看,把常用的点学完就够了。对于进阶,Effective c++是很好的选择,不少公司的面试题就直接出自这本书的知识点:
接下来说python,相比c++来说,学习的门槛要低很多,找一本通俗易懂的入门教程学习即可上手,SIGAI的免费python视频课完全可以做到从零基础入门机器学习,目前已有3w次的学习记录和多次的内容迭代。
课程名称:AI领域的Python核心编程-课程详情sigai.cn
导师简介:丁老师
毕业于北航测控系。现任某AI公司技术副总裁,AI软件系统架构师,GitHub百星作者,HackerRank Python板块满分,累积面试100+AI算法研发及Python开发人员。
数据结构和算法是编写很多程序的基础,对于机器学习和深度学习程序也不例外。很多算法的实现都依赖于数组,链表,数,排序,查找之类的数据结构和基础算法。如果有时间和精力,把算法导论啃一遍,你会有不一样的感受:
对于应届生来说,学完它对于你通过大互联网和人工智能公司校园招聘的技术面试也非常有用。
上面说的只是编程语言的程序设计的理论知识,我们还要考虑实际动手能力。对于开发环境如gcc/g++,visual studio之类的工具,以及gdb之类的调试工具需要做到熟练使用。如果是在linux上开发,对linux的常用命令也要熟记于心。这方面的知识看各种具体的知识点和教程即可。另外,对于编程的一些常识,如进程,线程,虚拟内存,文件系统等,你最好也要进行了解。
机器学习与深度学习
在说完了数学和编程基础之后,下面我来看核心的内容,机器学习和深度学习知识。机器学习是现阶段解决很多人工智能问题的核心方法,尤其是深度学习,因此它们是算法工程师的核心知识。在这里有一个问题:是否需要先学机器学习,还是直接学深度学习?如果是一个专业的算法工程师,我的建议是先学机器学习。至少,你要知道机器学习中的基本概念,过拟合,生成模型,ROC曲线等,上来就看深度学习,如没有背景知识你将不知所云。
首先来看机器学习,这方面的教材很多,周志华老师的机器学习,李航老师的统计学习方法是国内的经典。这里我们介绍国外的经典教材,首先是PRML:
此书深厚,内容全面,涵盖了有监督学习,无监督学习的主要方法,理论推导和证明详细深入,是机器学习的经典。此外还有模式分类这本书,在这里不详细介绍。
SIGAI的“机器学习”课程全面、系统的讲授机器学习理论与方法。课程内容全面,结合代码、实验程序、实践项目,让你加深对算法的理解,将为你后续的学术研究与产品研发打下坚实的基础。
课程名称:机器学习-课程详情sigai.cn
导师简介:雷老师
硕士,毕业于清华大学计算机系。人工智能和机器学习领域资深专家。前知名智能硬件与智能家居公司CTO,前百度高级工程师、项目经理,有超过12年的机器学习、机器视觉、自然语言处理学术研究有产品研发经验。同时具备深厚的理论功底和丰富的工业经验。
深度学习目前最权威的教程是下面这本书:
它涵盖了深度学习的方方面面,从理论到工程,但美中不足的是对应于介绍的相对较少。
SIGAI精品课程“深度学习”全面、系统、深入的讲解深度学习技术。包括深度学习算法的起源与发展历史,自动编码器,受限玻尔兹曼机,卷积神经网络,循环神经网络,生成对抗网络,深度强化学习,以及各种算法的应用。
课程名称:深度学习-课程详情sigai.cn
导师简介:雷老师
硕士,毕业于清华大学计算机系。人工智能和机器学习领域资深专家。前知名智能硬件与智能家居公司CTO,前百度高级工程师、项目经理,有超过12年的机器学习、机器视觉、自然语言处理学术研究有产品研发经验。同时具备深厚的理论功底和丰富的工业经验。
强化学习是机器学习很独特的一个分支,大多数人对它不太了解,这方面的教程非常少,我们推荐下面这本书:
在这里需要强调的是,你的知识要系统化,有整体感。很多同学都感觉到自己学的机器学习太零散,缺乏整体感。这需要你多思考算法之间的关系,演化历史之类的问题,这样你就做到胸中有图-机器学习算法地图。其实,SIGAI在之前的公众号文章“机器学习算法地图”里已经给你总结出来了。
开源库
上面介绍了机器学习和深度学习的理论教材,下面来说实践问题。我们无需重复造车轮子,熟练的使用主流的开源库是需要掌握的一项技能。对于经典的机器学习,常用的库的有:
libsvm
liblinear
XGBoost
OpenCV
HTK
Weka
在这里我们不一一列举。借助于这些库,我们可以方便的完成自己的实验,或是研发自己的产品。对于深度学习,目前常用的有:
Caffe
TensorFlow
MXNet
除此之外,还有其他的。对于你要用到的开源库,一定要理解它的原理,以及使用中的一些细节问题。如果有精力把这些库的核心代码分析一遍,你对实现机器学习算法将会更有底气。以深度学习为例,最核心的代码无非是实现:
各种层,包括它们的正向传播和反向传播
激活函数的实现
损失函数的实现
输入数据的处理
求解器,实现各种梯度下降法
这些代码的量并不大,沉下心来,我相信一周之内肯定能分析完。看完之后你会有一种豁然开朗的感觉。
应用方向的知识
接下来是各个方向的知识,与机器学习有关的应用方向当前主要有:
机器视觉语音识别
自然语言处理
数据挖掘
知识图谱
推荐系统
实践经验与思考
在说完理论与实践知识之后,最后我们来说经验与思考。在你确定要做某一个方向之后,对这个方向的方法要有一个全面系统的认识,很多方法是一脉相承的,如果只追求时髦看最新的算法,你很难做出学术上的创新,以及工程上的优化。对于本问题所有的经典论文,都应该化时间细度,清楚的理解它们解决了什么问题,是怎么解决的,还有哪些问题没有解决。例如:
机器视觉目标检测中的遮挡问题
推荐系统中的冷启动问题
自然语言处理中文分词中的歧义切分问题
只有经过大量的编程和实验训练,以及持续的思考,你才能算得上对这个方向深刻理解。很多同学对自己实现轮上的算法没有底气,解决这个问题最快的途径就是看论文算法的开源代码,在github上有丰富的资源,选择一些合适的,研究一下别人是怎么实现的,你就能明白怎么实现自己的网络结构和损失函数,照葫芦画瓢即可。
计算机以及人工智能是一个偏实践的学科,它的方法和理论既需要我们有扎实的理论功底,又需要有丰富的实践能力与经验。这两个方面构成了算法工程师最主要的素质。更多及时的AI类技术干活好文请关注公众号“SIGAI”。
http://weixin.qq.com/r/Li727lLEuQ-GrRaN93s8 (二维码自动识别)
推荐阅读
[1] 机器学习-波澜壮阔40年 SIGAI 2018.4.13.
[2] 学好机器学习需要哪些数学知识?SIGAI 2018.4.17.
[3] 基于深度学习的目标检测算法综述 SIGAI 2018.4.24.
[4] 用一张图理解SVM的脉络 SIGAI 2018.4.28.
[5] 理解神经网络的激活函数 SIGAI 2018.5.5.
[6] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 SIGAI 2018.5.8.
[7] 理解梯度下降法 SIGAI 2018.5.11.
[8] 理解凸优化 SIGAI 2018.5.18
[9] 理解牛顿法 SIGAI 2018.5.31
[10] 大话Adaboost算法 SIGAI 2018.6.2
[11] 理解主成分分析(PCA) SIGAI 2018.6.6
[12] 理解决策树 SIGAI 2018.6.11
[13] 用一句话总结常用的机器学习算法 SIGAI 2018.6.13
[14] 理解过拟合 SIGAI 2018.6.18
[15] 卷积神经网络的压缩和加速 SIGAI 2018.6.25
[16] k近邻算法 SIGAI 2018.6.27
[17] 机器学习算法地图 SIGAI2018.7.6
[18] 反向传播算法推导-全连接神经网络 SIGAI2018.7.9