原文链接:原文
本文讨论研究梯度下降法的一个有力的数学工具:海森矩阵。在讨论海森矩阵之前,需要首先了解梯度和雅克比矩阵的基本概念。
⭐️本文假设读者已经熟悉梯度下降法和简单的数值分析、线性代数知识
梯度下降算法需要当前函数点的导数信息,当此函数点包含多个方向时,梯度是包含所有方向的(偏)导数向量。
上述情况对应于输出为一个的情况,当函数的输出也为一个向量时,我们需要把输出向量的每一个元素对于多个输入的梯度罗列在一起,罗列形成的矩阵就是雅克比矩阵(Jacobian Matrix)。
举例说明:
Grad=[∂y∂x1,∂y∂x2,∂y∂x3]\begin{equation} Grad = [\frac{\partial y}{\partial x_1}, \frac{\partial y}{\partial x_2}, \frac{\partial y}{\partial x_3}] \end{equation} Grad=[∂x1∂y,∂x2∂y,∂x3∂y]
Jacobian=[∂y1∂x1∂y1∂x2∂y1∂x3∂y2∂x1∂y2∂x2∂y2∂x3∂y3∂x1∂y3∂x2∂y3∂x3]\begin{equation} Jacobian = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2}&\frac{\partial y_1}{\partial x_3} \\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2}&\frac{\partial y_2}{\partial x_3} \\ \frac{\partial y_3}{\partial x_1} & \frac{\partial y_3}{\partial x_2}&\frac{\partial y_3}{\partial x_3} \end{bmatrix} \end{equation} Jacobian=∂x1∂y1∂x1∂y2∂x1∂y3∂x2∂y1∂x2∂y2∂x2∂y3∂x3∂y1∂x3∂y2∂x3∂y3
利用二阶导数,我们可以知道关于函数在特定方向 ddd 上的凹凸信息,利用凹凸信息可以在一定程度上预判梯度下降法的表现效果。如果在特定方向 ddd 上:
二阶导数为正,则函数在方向ddd上一阶导数增加,函数值下降更慢;
二阶导数为负,则函数在方向ddd上一阶导数减少,函数值下降更快;
二阶导数为零,则函数在方向ddd上一阶导数不变,函数值匀速下降;
⭐️注意在梯度下降法中是对损失函数进行下降,因此需要使用减函数来分析函数中某一小段(经常使用二次函数的减半部近似:二阶泰勒展开、牛顿法)中的导数变化情况;
和雅克比矩阵类似,海森矩阵(Hessian 矩阵)可以包含函数中二阶导的信息:
Hessian=[∂2y∂x1∂x1∂2y∂x1∂x2∂2y∂x1∂x3∂2y∂x2∂x1∂2y∂x2∂x2∂2y∂x2∂x3∂2y∂x3∂x1∂2y∂x3∂x2∂2y∂x3∂x3]Hessian = \begin{bmatrix} \frac{\partial^2y}{\partial x_1\partial x_1} & \frac{\partial^2y}{\partial x_1\partial x_2}&\frac{\partial^2y}{\partial x_1\partial x_3} \\ \frac{\partial^2y}{\partial x_2\partial x_1} & \frac{\partial^2y}{\partial x_2\partial x_2}&\frac{\partial^2y}{\partial x_2\partial x_3} \\ \frac{\partial^2y}{\partial x_3\partial x_1} & \frac{\partial^2y}{\partial x_3\partial x_2}&\frac{\partial^2y}{\partial x_3\partial x_3} \end{bmatrix} Hessian=∂x1∂x1∂2y∂x2∂x1∂2y∂x3∂x1∂2y∂x1∂x2∂2y∂x2∂x2∂2y∂x3∂x2∂2y∂x1∂x3∂2y∂x2∂x3∂2y∂x3∂x3∂2y
同时由于二阶导数计算顺序的可交换性,即 ∂2y∂x1∂x2=∂2y∂x2∂x1\frac{\partial^2y}{\partial x_1\partial x_2}=\frac{\partial^2y}{\partial x_2\partial x_1}∂x1∂x2∂2y=∂x2∂x1∂2y,因此海森矩阵是一个对称矩阵,对于对称矩阵我们可以使用特征分解来研究特征值和二阶导数的关系,便于我们快速获得某个方向的二阶导数。
针对于特定方向d,已知此方向的二阶导数可以写成 dTHdd^THddTHd ,则:
🔗 基于Hessian矩阵的二阶方向导数与性质_Hi 喀什噶尔的胡杨的博客-CSDN博客_二阶方向导数
若d是H对应特征值λ的特征向量:
因为d为对应λ的特征向量(以下简称特征向量),则据定义有:
Hd=λd⇒dTHd=dTλd=λdTd=λ对称矩阵dT=d−Hd = \lambda d\\ \Rightarrow d^THd=d^T\lambda d = \lambda d^Td=\lambda \ \ \ 对称矩阵d^T = d^- Hd=λd⇒dTHd=dTλd=λdTd=λ 对称矩阵dT=d−
因此特征向量对应的特征值λ即为此方向的二阶导数;
若d为其他方向:设eie_iei为HHH对应特征值λi\lambda_iλi的特征向量,由上可知,
λi=eiTHei\lambda_i=e_i^THe_i λi=eiTHei
可知任何一个方向d=∑imtieid=\sum_i^mt_ie_id=∑imtiei为特征向量的线性组合,其中m为特征值个数,tit_iti为第iii个特征向量的加权数,则:
dTHd=(∑imtiei)TH(∑imtiei)=∑imtieiTHtiei=∑imti2λid^THd=(\sum_i^mt_ie_i)^TH(\sum_i^mt_ie_i)=\sum_i^mt_ie_i^THt_ie_i=\sum_i^mt_i^2\lambda_i dTHd=(i∑mtiei)TH(i∑mtiei)=i∑mtieiTHtiei=i∑mti2λi
因此任意非特征向量方向的二阶导数是所有特征值的加权和,特别的,此时的加权和是一个椭球体,在二维的特征值情况下,二阶导数是一个椭圆,椭圆方程为:
y=λ11t12+λ21t22y=\frac{\lambda_1}{\frac{1}{t_1^2}}+\frac{\lambda_2}{\frac{1}{t_2^2}} y=t121λ1+t221λ2
由图可知,最大二阶导数由最大特征值决定(长半轴),而最小二阶导数由最小特征值决定(短半轴)。
在弄清海森矩阵的基本定义后,就可以使用海森矩阵的一些性质来分析优化方法中的一些问题了。如确定局部最大点、局部最小点和鞍点、确定学习率、以及使用病态条件来确定梯度下降的表现等,同时我们还可以利用Hessian矩阵来实现牛顿法这种优化算法,。
(本节完)
上一篇:C++程序设计——动态内存管理
下一篇:Java:枚举类型