python的9个基本数值运算符(3.8中的Hessian矩阵和优化问题)
建议
使用Python 3.8进行兼容性测试,在MacOS 11.3和Linux Ubuntu Server 20.04 LTS环境下执行。
使用的库:Numpy、Sympy。
pip3.8 install numpy sympy
复制代码
Hessian矩阵被用于牛顿式方法中的大规模优化问题,因为它们是一个函数的局部泰勒扩展的二次项的系数。部分导数在经济学中发挥着突出的作用,在经济学中,大多数描述经济行为的函数都认为行为取决于一个以上的变量。例如,一个社会消费函数可以描述在消费品上的花费取决于收入和财富;那么边际消费倾向就是消费函数相对于收入的偏导。
Hessian矩阵也常用于表达图像处理和计算机视觉中的图像处理运算符(见高斯的拉普拉斯(LoG)小球检测器)。Hessian矩阵也可用于正常模式分析,以计算红外光谱学中的不同分子频率。
照片:Christoffer EngströmonUnsplash
一个数值函数的Hessian矩阵是其第二部分导数的方形矩阵,记为H(f)。在数学中,一个由多个变量组成的函数的偏导是它对其中一个变量的导数,其他变量保持不变。
例子。
梯度向量可以被解释为 "最快增加的方向和速度"。
medium.com/media/2249d…
如果一个函数的梯度在某一点_p_处非零,那么梯度的方向就是函数从_p_处增加最快的方向,而梯度的大小就是这个方向的增加率,即最大的绝对方向导数。
在一个有序集E中,如果一个部分A的元素属于A,并且大于A的任何其他元素,那么它就是A的最大元素或最大。另一方面,在存在条件下,这样的元素是唯一的。同样,如果存在的话,最小元素或最小值是指A的一个元素小于A的任何其他元素。
我们的目标是通过解方程来确定最大或最小候选数。
在Python 3.8中的实现相当简单,需要Sympy库中的 "solve "函数。
medium.com/media/90f59…
现在,我们需要进行二次导数,以获得Hessian矩阵。
顺便说一下,这里是程序的主函数,它在所有指令块之间仲裁变量的分配。
medium.com/media/ab065…
在我们的程序中,我们应用了施瓦兹定理,即关于几个变量的函数的第二部分导数的定理,如 。
然而,我们不会证明这个定理,也不会在本文中试图解释它。下面是一个numpy.matrix格式的Hessian矩阵的例子,用于函数:
Hessian matrix that organizes all the second partial derivatives of the function x**2–1.5*x*y y**2 is :
复制代码
Determinant in the critical point {x: 0.0, y: 0.0} is : 1.75000000000000
复制代码
行列式是一个标量值,是一个方形矩阵的条目的函数。
它可以描述矩阵和矩阵所代表的线性图的一些特性。特别是,当且仅当矩阵是可逆的,并且矩阵所代表的线性图是同构的,行列式才是非零的。
medium.com/media/0a36f…
因此,对于正半自由度和负半自由度的Hessians来说,测试是不确定的(Hessian是半自由度但不确定的临界点可能是一个局部极值或一个鞍点)。
在我们的例子中,对于临界点(0;0),行列式是1.75>0,f'xx>0,那么,临界点是一个局部最小值,所以函数是严格凸的。
Tensorflow或其他机器学习库当然很强大,但它们仍然过度消耗资源,对低性能机器来说是个障碍,本文旨在解释一种建立Hessian矩阵的新方法,用科学计算的较轻工具:Sympy。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com