1 泰勒展开式

先回顾一下泰勒展开式,因为雅可比矩阵和海森矩阵,都和泰勒展开式有关系。

泰勒公式是将一个在 x=x0x=x_{0} ​处具有 nn 阶导数的函数 f(x)f(x) 利用关于 (xx0)(x-x_{0})nn 次多项式来逼近函数的方法。

  • 若函数 f(x)f(x) 在包含 x0x_{0} ​的某个闭区间 [ab][a,b] 上具有 nn 阶导数,且在开区间 (ab)(a,b) 上具有 (n+1)(n+1) 阶导数,则对闭区间 [ab][a,b] 上任意一点 xx ,下式成立:

f(x)=f(x0)0!+f(x0)1!(xx0)+f(x0)2!(xx0)2++f(n)(x0)n!(xx0)n+Rn(x)(5)f(x)=\frac{f\left(x_{0}\right)}{0 !}+\frac{f^{\prime}\left(x_{0}\right)}{1 !}\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\ldots+\frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}+R_{n}(x)\tag{5}

  • 其中:f(n)(x)f^{(n)}(x) 表示 f(x)f(x)nn 阶导数;等号后的多项式称为函数 f(x)f(x)x0x_{0} ​处的泰勒展开式,剩余的 Rn(x)R_{n}(x) 是泰勒公式的余项,是 (xx0)n\left(x-x_{0}\right)^{n} 的高阶无穷小。

  • 佩亚诺 (Peano)余项(普遍):

Rn(x)=o[(x;x0)n](6)R_{n}(x)=\mathrm{o}\left[\left(x ;-x_{0}\right)^{n}\right]\tag{6}

  • 拉格朗日(Lagrange)余项:

Rn(x)=f(n+1)[x0+θ(xx0)](xx0)n+1(n+1)!(7)R_{n}(x)=f^{(n+1)}\left[x_{0}+\theta\left(x-x_{0}\right)\right] \frac{\left(x-x_{0}\right)^{n+1}}{(n+1) !}\tag{7}

2 雅可比矩阵与作用

2.1 雅可比矩阵

在向量分析中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。在代数几何中,代数曲线的雅可比量表示雅可比簇:伴随该曲线的一个代数群,曲线可以嵌入其中。 它们全部都以数学家卡尔·雅可比命名。

雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于 向量输出型函数 的偏导数。

假设 F:RnRmF : \mathbb{R}_{n} \rightarrow \mathbb{R}_{m} 是一个从欧式 nn 维空间转换到欧式 mm 维空间的函数。这个函数由 mm 个实值函数组成:y1(x1xn)ym(x1xn)\mathrm{y_{1}}(\mathrm{x_{1}} ,\ldots,\mathrm{x_{n}}),\ldots,\mathrm{y_{m}}(\mathrm{x_{1}} ,\ldots,\mathrm{x_{n}});则这些实值函数的偏导数(如果存在)可以组成一个 mmnn 列的矩阵,就是所谓的雅可比矩阵

[y1x1y1xnymx1ymxn](1)\left[ \begin{array}{ccc} {\frac{\partial y_{1}}{\partial x_{1}}} & {\cdots} & {\frac{\partial y_{1}}{\partial x_{n}}} \\ {\vdots} & {\ddots} & {\vdots} \\ {\frac{\partial y_{m}}{\partial x_{1}}} & {\cdots} & {\frac{\partial y_{m}}{\partial x_{n}}} \end{array} \right] \tag{1}

此矩阵通常被表示为:JF(x1xn)J_{F}\left(x_{1},\ldots,x_{n}\right) 或者(y1ym)(x1xn)\frac{\partial \left(y_{1},\ldots,y_{m}\right)}{\partial\left( x_{1},\ldots,x_{n}\right)} 。其第 ii 行是函数 yi(i=1m)y_i(i=1,…,m) 关于 XX 的梯度向量的转置。

如果 ppRn\mathbb{\mathbb{R}}^{n} ​中的一点,且 FFpp 点可微分,则在 pp 点处的导数由 JF(p)J_{F}(\mathbf{p}) 给出(一次性获得多个实值函数的偏导数表示)。

在此情况下,根据泰勒一阶展开式,Rn\mathbb{R}^n 中的任意一点 x\mathbf{x} 的值 F(x)F(\mathbf{x}),可以由 pp 点的函数 F(p)F(\mathbf{p}) 和一阶导数 JF(p)J_F(\mathbf{p}) 近似求得:

F(x)F(p)+JF(p)(xp)(2)F(\mathbf{x}) \approx F(\mathbf{p})+J_{F}(\mathbf{p}) \cdot(\mathbf{x}-\mathbf{p})\tag{2}

也就是说,雅可比矩阵是用矩阵形式来表示向量型函数多元一阶偏微分 的方法,可以有效简化公式推导和理解,并指导算法的矩阵化实现。

2.2 雅可比行列式

m=nm = n 时,FF 是从 nn 维空间到 nn 维空间的向量型函数,其 雅可比矩阵 是一个方阵。 于是可以取其行列式,被称为雅可比行列式

在某个给定点的雅可比行列式,提供了在接近该点时的表现的重要信息。例如:

  • 如果连续可微函数 FFpp 点的雅可比行列式不为零,则其在该点附近有逆函数。
  • 如果 pp 点的 雅可比行列式是正数,则 FFpp 点的取向不变;
  • 如果是负数,则 FF 的取向相反。
  • 雅可比行列式的绝对值,代表了函数 FFpp 点的缩放因子。

3 海森矩阵与作用

  • 海森矩阵 (Hessian matrix 或 Hessian) 是一个自变量为向量的实值函数的二阶偏微分组成的方阵,该实值函数表示为:

f(x1x2xn)(3)f\left(x_{1},x_{2} \ldots,x_{n}\right)\tag{3}

  • 如果 ff 的所有二阶导数都存在,那么 ff 的海森矩阵可抽象表示为:

H(f)ij(x)=DiDjf(x)(4)H(f)_{i j}(x)=D_{i} D_{j} f(x)\tag{4}

其中 x=(x1x2xn)x=\left(x_{1},x_{2} \dots,x_{n}\right)

也就是说,海森矩阵 H(f)H(f) 为:

[2fx122fx1x22fx1xn2fx2x12fx222fx2xn2fxnx12fxnx22fxn2](5)\left[ \begin{array}{cccc} {\frac{\partial^{2} f}{\partial x_{1}^{2}}} & {\frac{\partial^{2} f}{\partial x_{1} \partial x_{2}}} & {\cdots} & {\frac{\partial^{2} f}{\partial x_{1} \partial x_{n}}} \\ {\frac{\partial^{2} f}{\partial x_{2} \partial x_{1}}} & {\frac{\partial^{2} f}{\partial x_{2}^{2}}} & {\cdots} & {\frac{\partial^{2} f}{\partial x_{2} \partial x_{n}}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {\frac{\partial^{2} f}{\partial x_{n} \partial x_{1}}} & {\frac{\partial^{2} f}{\partial x_{n} \partial x_{2}}} & {\cdots} & {\frac{\partial^{2} f}{\partial x_{n}^{2}}} \end{array} \right]\tag{5}

  • 海森矩阵常被应用于牛顿法,利用二阶导数加速解决的大规模优化问题。

3.1 海森矩阵的正定性与函数凹凸性的关系

Hessian 矩阵的正定性在判断优化算法可行性时非常有用,海森矩阵正定,则:

  • 函数的二阶偏导数恒大于 00
  • 函数的一阶导数始终处于递增状态
  • 函数为凸

因此,在诸如 牛顿法 等梯度方法中,使用海森矩阵的正定性,可以非常便捷的判断函数是否有凸性,也就是是否可收敛到局部或全局最优解。

正定性的判定方法有很多种,其中最方便也是常用的方法为特征值法:

  • 若所有特征值均不小于零,则称为半正定
  • 若所有特征值均大于零,则称为正定。详细的判断方法可以参考博客:奇异值分解 SVD
  • 多元函数的海森矩阵半正定,类似于一元函数的二阶导数非负;因此,与根据二阶导数来判断一元函数的凹凸性类似,多元函数为凸函数的充要条件为其海森矩阵半正定

4.2 海森矩阵及其在牛顿法中的作用

牛顿法主要应用于方程求解和最优化。

4.2.1 一元自变量的牛顿法解方程

并非所有的方程都有封闭形式解,或者有些封闭形式解很复杂,导致求解困难。 利用牛顿法,可以迭代获得近似的数值解。原理是利用泰勒公式,在 x0x_{0} ​处展开,展开到一阶,如下:

f(x)=f(x0)+(xx0)f(x0)(8)f(x)=f\left(x_{0}\right)+\left(x-x_{0}\right) f^{\prime}\left(x_{0}\right)\tag{8}

则求解方程 f(x)=0f(x)=0,转变为求解

f(x0)+(xx0)f(x0)=0f(x_{0})+(x–x_{0})f^\prime(x_{0})=0

得到近似解为: x=x1=x0f(x0)/f(x0)x=x_{1} = x_{0}–f(x_{0})/f^\prime(x_{0})

这里 x1x_{1} 并不能真正让 f(x)=0f(x)=0,只能说 f(x1)f(x_{1})f(x0)f(x_{0}) 更接近 00 ,于是迭代求解的想法就很自然了,可以进而推出:

xn+1=xnf(xn)f(xn)x_{n+1}=x_{n}–\frac{f(x_{n})}{f^\prime(x_{n})}

通过迭代,会逐步在某点 xx^{*} 处收敛到 f(x)=0f\left(x^{*}\right)=0 。整个过程如下图:

4.2.2 一元自变量的牛顿法最优化

在最优化的问题中,线性最优化至少可以使用单纯形法(或称不动点算法)求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。

假设任务是优化一个目标函数 ff ,求函数 ff 的极大极小问题。根据极值求解的方法,该问题可以转化为解方程问题,即一阶导数 f=0f^\prime=0 。解方程可以使用上一节中的牛顿法。

首先对 f(x)f(x) 建模,将其在探索点 xnx_{n} ​处做泰勒展开,展开到 22 阶形式( 因为求一阶导数等于 00 的解,根据上一节知识,需要用到二阶导数 ),得到 f(x)f(x) 一阶导数和二阶导数形式:

f(x)=f(xn)+f(xn)(xxn)+f(xn)2(xxn)2(9)f(x)=f\left(x_{n}\right)+f^{\prime}\left(x_{n}\right)\left(x-x_{n}\right)+\frac{f^{\prime \prime}\left(x_{n}\right)}{2}\left(x-x_{n}\right)^{2}\tag{9}

极值点出现在一阶导数为 00 的点,因此最优化问题转变成了方程 f(x)=0f^\prime(x)=0 的求解问题,结合上一节牛顿法,可以转换为:

f(x)=f(xn)+f(xn)(xxn)=0(10)f^{\prime}(x)=f^{\prime}\left(x_{n}\right)+f^{\prime \prime}\left(x_{n}\right)\left(x-x_{n}\right)=0\tag{10}

直接使用牛顿法,得到如下迭代式:

xn+1=xnf(xn)f(xn)n=01(11)x_{n+1}=x_{n}-\frac{f^{\prime}\left(x_{n}\right)}{f^{\prime\prime}\left(x_{n}\right)},n=0,1,\ldots\tag{11}

一般认为牛顿法利用了曲线本身的信息,因此比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

4.2.3 多元自变量的牛顿法最优化与海森矩阵

上面讨论的是一元自变量的情况,对于高维情况(如神经网络的权重),牛顿迭代公式中的二阶导数就要用海森矩阵来代替:

xn+1=xn[Hf(xn)]1f(xn)n0(12)x_{n+1}=x_{n}-\left[H_{f\left(x_{n}\right)}\right]^{-1} \nabla f\left(x_{n}\right),n \geq 0\tag{12}

其中 HH 是海森矩阵。 高维情况依然可以用牛顿迭代求解,但是问题是海森矩阵引入的复杂性,使牛顿迭代求解难度大大增加,但是已经有了解决这个问题的办法,那就是 拟牛顿法(Quasi-Newton method)。该方法不再直接计算海森矩阵,而是每一步使用梯度向量更新海森矩阵的近似。