怎样成为一名优秀的算法工程师
Posted ariel-dreamland
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样成为一名优秀的算法工程师相关的知识,希望对你有一定的参考价值。
感谢https://blog.csdn.net/sigai_csdn/article/details/81012167,听君一席话,胜读十年书。
和一个有着多年工作经验的同行朋友交流,他说:一个优秀的算法人员培养成本其实比开发人员要高的多,周期也更长,绝对不是随便一个人都可以跨行的。
怎样成为一名优秀的算法工程师?面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。原作者写这篇文章正是为了更好的帮助大家学习和成长,少走弯路。这里自己重写当时学习,学习如何去学习也是至关重要的,有些时候甚至超越学习本身!
首先来看一个高度相关的问题:一个优秀的算法工程师必须具备哪些素质?作者给出的答案是这样的:
数学知识
编程能力
机器学习与深度学习的知识
应用方向的知识
对自己所做的问题的思考和经验
除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来按照这几个方面进行展开,详细的说明如何学习这些方面的知识以及积累经验。
数学知识:
本人主要针对人工智能、机器学习,深度学习方面。
人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多打算入门的人或者开始学习的人感到明显的压力。首先我们考虑一个最核心的问题:机器学习和深度学习究竟需要哪些数学知识?
算法或理论 | 用到的数学知识点 |
贝叶斯分类器 | 随机变量,贝叶斯公式,随机变量独立性,正态分布,最大似然估计 |
决策树 | 概率,熵,Gini系数 |
KNN算法 | 距离函数 |
PCA算法 | 协方差矩阵,散布矩阵,拉格朗日乘数法,特征值与特征向量 |
流形学习 | 流形,最优化,测地线,测地距离,图,特征值与特征向量 |
线性判别分析 | 散度矩阵,逆矩阵,拉格朗日乘数法,特征值与特征向量 |
支持向量机 | 点到平面的距离,Slater条件,强对偶,拉格朗日对偶,KKT条件,凸优化,核函数,Mercer条件 |
logistic回归 | 概率,随机变量,最大似然估计,梯度下降法,凸优化,牛顿法 |
随机森林 | 抽样,方差 |
AdaBoost算法 | 概率,随机变量,极值定理,数学期望,牛顿法 |
隐马尔可夫模型 | 概率,离散型随机变量,条件概率,随机变量独立性,拉格朗日乘数法,最大似然估计 |
条件随机场 | 条件概率,数学期望,最大似然估计 |
高斯混合模型 | 正态分布,最大似然估计,Jensen不等式 |
人工神经网络 | 梯度下降法,链式法则 |
卷积神经网络 | 梯度下降法,链式法则 |
循环神经网络 | 梯度下降法,链式法则 |
生成对抗网络 | 梯度下降法,链式法则,极值定理,Kullback-Leibler散度,Jensen-Shannon散度,测地距离,条件分布,互信息 |
K-means算法 | 距离函数 |
强化学习 | 数学期望,贝尔曼方程 |
贝叶斯网络 | 条件概率,贝叶斯公式,图 |
VC维 | Hoeffding不等式 |
理解绝大多数算法和理论,有微积分/高等数学,线性代数,概率论,最优化方法的知识就够了。
除流形学习需要简单的微分几何概念之外,深层次的数学知识如实变函数,泛函分析等主要用在一些基础理论结果的证明上,即使不能看懂证明过程,也不影响我们使用具体的机器学习算法。
概率图模型、流形学习中基于图的模型会用到图论的一些基本知识,如果学习过离散数学或者数据结构,这些概念很容易理解。除此之外,某些算法会用到离散数学中的树的概念,但很容易理解。
在机器学习中主要用到了微分部分,积分用的非常少。具体的,用到了下面的概念:
导数和偏导数的定义与计算方法,与函数性质的关系
梯度向量的定义
极值定理,可导函数在极值点处导数或梯度必须为0
雅克比矩阵,这是向量到向量映射函数的偏导数构成的矩阵,在求导推导中会用到
Hessian矩阵,这是2阶导数对多元函数的推广,与函数的极值有密切的联系
凸函数的定义与判断方法泰勒展开公式
拉格朗日乘数法,用于求解带等式约束的极值问题
其中最核心的是多元函数的泰勒展开公式,根据它我们可以推导出梯度下降法,牛顿法,拟牛顿法等一系列最优化方法。如果你想要深入的学习微积分,可以阅读数学系的教程,称为数学分析:
与工科的高等数学偏重计算不同,它里面有大量的理论证明,对于锻炼数学思维非常有帮助。北大张筑生先生所著的数学分析可谓是国内这方面教材的精品。
下面来看线性代数,同样是同济版的教材:
如果想更全面系统的学习线性代数,可以看这本书:
相比之下,线性代数用的更多。具体用到的知识点有:
向量和它的各种运算,包括加法,减法,数乘,转置,内积
向量和矩阵的范数,L1范数和L2范数
矩阵和它的各种运算,包括加法,减法,乘法,数乘
逆矩阵的定义与性质
行列式的定义与计算方法
二次型的定义
矩阵的正定性
特征值与特征向量
奇异值分解
线性方程组的数值解
机器学习算法处理的数据一般都是向量、矩阵或者张量。经典的机器学习算法输入的数据都是特征向量,深度学习算法在处理图像时输入的2维的矩阵或者3维的张量。掌握这些概念是你理解机器学习和深度学习算法的基础。
概率论国内理工科专业使用最多的是浙大版的教材:
如果把机器学习所处理的样本数据看作随机变量/向量,就可以用概率论的方法对问题进行建模,这代表了机器学习中很大一类方法。在机器学习里用到的概率论知识点有:
随机事件的概念,概率的定义与计算方法
随机变量与概率分布,尤其是连续型随机变量的概率密度函数和分布函数
条件概率与贝叶斯公式
常用的概率分布,包括正态分布,伯努利二项分布,均匀分布
随机变量的均值与方差,协方差
随机变量的独立性
最大似然估计
这些知识不超出普通理工科概率论教材的范围。
小时候,小学有一个班会记录本,记得当时爸爸给我写的一句话是:书山有路勤为径,学海无涯苦做舟。
后来我读了大学,读了研究生,爸爸又对我说:攻城不怕坚,攻书莫畏难,科学有险阻,苦战能过关。
这些话我始终记得。希望你更加是一个聪明而勤奋的人,坚定信念,然后聪明而踏实地勤奋着,就应该是这么清晰、简单、明了!
以上是关于怎样成为一名优秀的算法工程师的主要内容,如果未能解决你的问题,请参考以下文章