想必单独论及“ 梯度、Hessian矩阵、平面方程的法线以及函数导数”等四个基本概念的时候,绝大部分人都能够很容易地谈个一二三,基本没有问题。
其实在应用的时候,这几个概念经常被混淆,本文试图把这几个概念之间的关系整理一下,以便应用之时得心应手。
这四个概念中,Hessian矩阵是最不容易混淆,但却是很多人难以记住的概念,其它三个概念很容易记住,但却在某些时候很容易混淆。
- Hessian矩阵:设有凸函数f(X),X是向量(x1,x2,..., xn),Hessian矩阵M定义为:M的第i行,第j列元素为df(X)/dxidxj, 即为f(X)对于变量xi和xj的二次偏导数。
- 梯度:设有凸函数f(X),X是向量(x1,x2,..., xn),函数f(X)在点X0处的梯度是一个向量,等于(df(X0)/dx1, df(X0)/dx2, ...., df(X0)/dxn), 即是对于各个变量的偏导数的向量。例子:如果方程是z=f(x,y),梯度是在XOY平面内的一个向量,与z无关。因此要特别注意梯度不是点(X,f(X))处的切线方向。
- 平面方程的法线:设平面方程Ax+By+Cz+D = 0,向量(A, B, C)为这个平面的法线方向。
- 函数导数:二维直线的方程y= kx+b,我们说k是直线的斜率;二维曲线y=f(x)的导数f '(x)表示在点x处的切线的斜率,注意是切线的斜率,不是切线的方向,它是标量,不是向量。任意曲线y=f(x1,x2,...xn),对每一个变量求取偏导数,得到一个向量(df(X)/dx1, df(X)/dx2, ...., df(X)/dxn),这个向量就是函数在点X处的梯度,即梯度是表示曲线f(X)在X处变化最剧烈的方向,特别注意梯度并不是在点(X, f(X))处的切线方向, 梯度只是在点(X, f(X))处的切线方向在X构成的“平面”上的投影。注意,对于二维直线y=kx+b,它也是可以求取梯度的,它的梯度是向量(k),只有一个值,表示的是x方向上的向量,大小是x方向上的单位变化导致y变化量的大小,即就是切线的斜率。
一个问题,我们把二维直线方程y=-kx-b写为平面方程的形式,kx + y+b = 0,这个时候怎么理解?我们可以理解为把y=-kx-b这条直线往z轴的两个方向拉伸得到的平面,就是kx+y+b=0。那么这个平面方程的法线就是(k, 1, 0),这个法线向量与平面kx+y+b=0垂直,这个时候如果我们用XOY平面去与这个平面相交,即令z=0,就表示直线y=-kx-b,因此法线(k,1)是与直线垂直的。注意y=-kx -b的导数的含义:(-k)表示的是x轴方向的梯度,值为直线的斜率。
一定要注意平面方程的形式与其它三个概念的方程形式是不同的,平面方程的右边是0,而其它三个概念的方程中必须有一个变量在等式的左边,可以表示为f(X),或者y等形式,本质上f(X)和y都表示的是一个变量,只有方程的形式对的时候才能适用相关的计算,例如,我们不能对方程Ax+By+Cz+D =0,使用梯度或者导数的计算,这个地方非常容易混淆,特此提醒!
pku,sewm,shinning