在职场上,机器学习工程师总是被质疑,人们不相信他们有深厚的数学功底。事实上,所有机器学习算法的本质都是一个数学问题。无论是支持向量机、主成分分析还是神经网络,最终都归结为对偶优化、谱分解筛选、连续非线性函数组合等数学问题。只有透彻理解数学才能真正掌握这些机器学习算法。Python中的各种数据库可以帮助人们使用高级算法来完成一些简单的步骤。例如,Scikit-learn,或Keras,一个机器学习算法库,包括K最近邻算法、K均值和决策树,可以帮助人们构建神经网络架构,而无需了解卷积神经网络CNN或循环神经网络细节背后的RNN。然而,要成为一名优秀的机器学习工程师,需要的远不止这些。面试时,面试官通常会问如何从头实现K近邻算法和决策树,或者如何推导线性回归和softmax反向传播方程的矩阵闭式解。本文将回顾微积分的一些基本概念,为面试做准备,例如单变量和多变量函数的导数、梯度、雅可比矩阵和海森矩阵。同时,本文也可以为你深入研究机器学习,尤其是神经网络背后的数学运算打下良好的基础。这些概念将通过5个导数公式来展示,这些都是面试必备的。导数1:复合指数函数指数函数非常基础和常见,也非常有用。这是一个标准的正函数。在实数?中,e?>0,指数函数还有一个重要的性质,即e?=1。另外,指数函数和对数函数互为反函数。指数函数也是最容易微分的函数之一,因为指数函数的导数就是它本身,即(e?)’=e?。当指数与另一个函数组合形成复合函数时,复合函数的导数变得更加复杂。此时导数要遵循链式法则,f(g(x))的导数等于f'(g(x))?g'(x),即可以用链式法则计算f(x)=e?2的导数。先求g(x)=x2的导数:g(x)’=2x。而指数函数的导数本身就是:(e?)’=e?。将这两个导数相乘,得到复合函数f(x)=e?2的导数:这是一个非常简单的例子,乍一看可能无所谓,但面试官经常用它来测试能力。如果您很长时间没有复习过衍生品,可能很难确保您能够快速解决这些简单的问题。虽然它不一定能让你得到这份工作,但如果你不能回答这样一个基本问题,你肯定会丢掉这份工作。导数2:带基变量的复指数复指数函数是一个经典的面试问题,尤其是在量化金融领域,数学技能比招聘机器学习职位的科技公司更重要。复杂的指数函数迫使面试官走出他们的舒适区。但实际上,这个问题最难的部分是找到正确的方向。当函数逼近指数函数时,最重要的是要认识到指数函数和对数函数互为反函数,其次,每个指数函数都可以转化为自然指数函数的形式:在复变指数函数f(x)=x?在推导之前,要用一个简单的指数函数f(x)=2?来证明复变函数的一个性质。先用上式将2?转化为exp(xln(2)),再用链式法则推导导数。现在回到原来的函数f(x)=x?,只要把它转化为f(x)=exp(xlnx),推导就相对简单了,可能唯一难的就是链式法则的推导步骤。请注意,乘积规则(uv)'=u'v+uv'用于求指数xln(x)的导数。通常,面试官在问这个功能的时候不会告诉你功能域。如果面试官不给函数域,他可能想测试你的数学敏锐度。这就是问题具有欺骗性的地方。如果没有定义域,x?可以是正数也可以是负数。当x为负数时,如(-0.9)^(-0.9),结果为复数-1.05–0.34i。一种解决方案是将函数的域限制为??∪??\0,但函数对于负数仍然不可微。因此,要正确推导复变指数函数x?的导数,只需要将函数的定义域严格限制在正数即可。排除0是因为此时导数也为0,需要左右导数相等,但在这种情况下,这个条件不成立。因为没有定义左极限,函数在0处不可微,所以函数的定义域只能限定为正数。在继续之前,只是想问问你,这里有一个比复指数函数f(x)=x?更高级的函数f(x)=x?2。如果你理解了第一个例子背后的逻辑和步骤,加一个指数应该没有困难,可以推导出以下结果:导数3:多元输入函数的梯度到目前为止,到目前为止讨论的函数导数都是从?映射到?的函数,即函数的定义域和值域都是实数。但机器学习本质上是矢量的,函数是多元的。下面的例子最能说明这种多重性:当神经网络的输入层大小为m,输出层大小为k时,即f(x)=g(W?x+b),这个函数是一个线性映射W?x(权重矩阵W和输入向量x)和非线性映射g(激活函数)按元素组合。一般来说,这个函数也可以看作是从??到??的映射。我们称k=1处的导数为梯度。现在计算以下从?3映射到?的三元函数:将f视为从大小为3的向量映射到大小为1的向量的函数。来源:unsplash多元输入函数的导数称为梯度,表示为通过倒三角形符号?(英文nabla)。从??映射到?的函数g的梯度是n个偏导数的集合,每一个偏导数都是一个n元函数。因此,如果g是从??到?的映射,则其梯度?g是从??到??的映射。要导出函数f(x,y,z)=2??+zcos(x)的梯度,需要构造向量的偏导数:?f/?x、?f/?y和?f/?z,结果如下:需要注意的是,这里还需要用到等价换算的公式,即2??=exp(xyln(2))。总之,对于从?3映射到?的三元函数f,其导数是从?3映射到?3的梯度?f。在从??到??(k>1)映射的一般公式中,从??到??映射的多元函数的导数是雅可比矩阵,而不是梯度向量。导数4:多元输入输出函数的雅可比矩阵上一节讲到,函数从??映射到?的导数是从??映射到??的梯度。但是,如果输出域也是多元的,即从??到??(k>1)的映射怎么办?在这种情况下,导数是雅可比行列式。梯度可以简单地看成是一个特殊的mx1的雅可比矩阵,其中m等于变量的个数。雅可比矩阵J(g)是从??到??*?的映射,其中函数g从??映射到??。这意味着输出域的维度是kxm,这是一个kxm矩阵。换句话说,在雅可比矩阵J(g)中,第i行表示函数g?的梯度?g?。假设上述函数f(x,y)=[2x2,x√y]从?2映射到?2,通过对函数求导,可以发现函数的输入和输出域都是多元的。在这种情况下,由于平方根函数未在负数上定义,因此y的域需要限制为??。输出的雅可比矩阵第一行是函数1的导数,即?2x2;第二行是函数2的导数,即?x√y。雅可比矩阵在深度学习可解释性领域的一个有趣用例是了解神经网络的行为并分析神经网络输出层对输入的敏感性。雅可比矩阵有助于研究输入空间变化对输出的影响,也可以用来理解神经网络中间层的概念。无论如何,请记住梯度是标量相对于向量的导数,而雅可比行列式是一个向量相对于另一个向量的导数。导数5:多元输入函数的Hessian矩阵目前只讨论一阶导数的推导,但在神经网络中,往往会讨论多元函数的高阶导数。一种这样的特殊情况是二阶导数,也称为Hessian矩阵,用H(f)或?2(微分算子的平方)表示。从??到?的函数g的Hessian矩阵是从??到??*?的映射H(g)。现在分析我们如何将输出域从?转换为??*?。一阶导数,即梯度?g,是从??到??的映射,其导数是雅可比矩阵。因此,每个子函数的导数?g?由n个从??映射到??的函数组成。你可以这样想,它就像是把梯度向量的每一个元素推导展开成一个向量,这样就变成了向量中的向量,也就是矩阵。计算Hessian矩阵需要计算交导数,即先求x再求y,反之亦然。计算叉导数的顺序会不会影响结果,换句话说,Hessian矩阵是否对称。在这种情况下,函数f是二次连续可微函数(用符号2表示),施瓦茨定理指出交叉导数相等,因此Hessian矩阵是对称的。一些不连续但可微的函数不满足交叉导数方程。构造函数的Hessian矩阵相当于求一个标量函数的二阶偏导数。以f(x,y)=x2y3为例,计算结果如下:可见叉导数6xy2其实是相等的。先对x求导得到对x的偏导数2xy3,再对y求导得到对y的偏导数6xy2。对于x或y的每个一元子函数,对角线元素是f?。此类函数的扩展将讨论从??到??的多元函数映射的二阶导数的情况,它可以被视为二阶雅可比行列式。这是从??到??*?*?的映射,即三维张量。和Hessian矩阵类似,为了求Jacobian矩阵的梯度(求二阶微分),需要对kxm矩阵的每一个元素进行微分,得到一个向量矩阵,也就是张量。虽然不太可能要求受访者进行手动计算,但了解多元函数的高阶导数很重要。本文回顾了机器学习背后的重要微积分基础知识,列举了几个一元和多元函数的例子,讨论了梯度、雅可比矩阵和海森矩阵,全面梳理了机器学习面试中可能出现的概念。微积分知识,希望面试顺利!
