算法工程师的行业特点:充斥大量数学公式

与其他工作方向,如APP开发、Web开发,游戏开发相比,人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多立志成为算法工程师的人倍感压力。

机器学习和深度学习需要学习的数学知识

首先我们考虑一个最核心的问题:机器学习和深度学习究竟需要哪些数学知识?请看下面这张表:

math.jpg

上面的表给出了各种典型的机器学习算法所用到的数学知识点。其实,理解绝大多数算法和理论,有微积分/高等数学,线性代数,概率论,最优化方法的知识就够了。如果你已经学过大学数学课,只要把所需的知识点复习一遍就够了。

微积分知识

在机器学习中主要用到了微分部分,积分用的非常少。具体的,用到了下面的概念:

导数和偏导数的定义与计算方法,与函数性质的关系

梯度向量的定义

极值定理,可导函数在极值点处导数或梯度必须为0

雅克比矩阵,这是向量到向量映射函数的偏导数构成的矩阵,在求导推导中会用到

Hessian矩阵,这是2阶导数对多元函数的推广,与函数的极值有密切的联系

凸函数的定义与判断方法

泰勒展开公式

拉格朗日乘数法,用于求解带等式约束的极值问题

其中最核心的是多元函数的泰勒展开公式,根据它我们可以推导出梯度下降法,牛顿法,拟牛顿法等一系列最优化方法。

线性代数知识

相比之下,线性代数用的更多。具体用到的知识点有:

向量和它的各种运算,包括加法,减法,数乘,转置,内积

向量和矩阵的范数,L1范数和L2范数

矩阵和它的各种运算,包括加法,减法,乘法,数乘

逆矩阵的定义与性质

行列式的定义与计算方法

二次型的定义

矩阵的正定性

特征值与特征向量

奇异值分解

线性方程组的数值解

机器学习算法处理的数据一般都是向量、矩阵或者张量。经典的机器学习算法输入的数据都是特征向量,深度学习算法在处理图像时输入的2维的矩阵或者3维的张量。掌握这些概念是你理解机器学习和深度学习算法的基础。

概率论

如果把机器学习所处理的样本数据看作随机变量/向量,就可以用概率论的方法对问题进行建模,这代表了机器学习中很大一类方法。在机器学习里用到的概率论知识点有:

随机事件的概念,概率的定义与计算方法

随机变量与概率分布,尤其是连续型随机变量的概率密度函数和分布函数

条件概率与贝叶斯公式

常用的概率分布,包括正态分布,伯努利二项分布,均匀分布

随机变量的均值与方差,协方差

随机变量的独立性

最大似然估计

这些知识不超出普通理工科概率论教材的范围。

最优化

最后来说最优化,几乎所有机器学习算法归根到底都是在求解最优化问题。求解最优化问题的指导思想是在极值点出函数的导数/梯度必须为0。因此你必须理解梯度下降法,牛顿法这两种常用的算法,它们的迭代公式都可以从泰勒展开公式而得到。

凸优化是机器学习中经常会提及的一个概念,这是一类特殊的优化问题,它的优化变量的可行域是凸集,目标函数是凸函数。凸优化最好的性质是它的所有局部最优解就是全局最优解,因此求解时不会陷入局部最优解。如果一个问题被证明为是凸优化问题,基本上已经宣告此问题得到了解决。在机器学习中,线性回归、岭回归、支持向量机、logistic回归等很多算法求解的都是凸优化问题。

拉格朗日对偶为带等式和不等式约束条件的优化问题构造拉格朗日函数,将其变为原问题,这两个问题是等价的。通过这一步变换,将带约束条件的问题转换成不带约束条件的问题。通过变换原始优化变量和拉格朗日乘子的优化次序,进一步将原问题转换为对偶问题,如果满足某种条件,原问题和对偶问题是等价的。这种方法的意义在于可以将一个不易于求解的问题转换成更容易求解的问题。在支持向量机中有拉格朗日对偶的应用。

KKT条件是拉格朗日乘数法对带不等式约束问题的推广,它给出了带等式和不等式约束的优化问题在极值点处所必须满足的条件。在支持向量机中也有它的应用。

如果你没有学过最优化方法这门课也不用担心,这些方法根据微积分和线性代数的基础知识可以很容易推导出来。如果需要系统的学习这方面的知识,可以阅读《凸优化》,《非线性规划》两本经典教材。