记录平时遇到的问题,会随时更新。
1、为什么梯度方向是函数变化最快的方向?
我们知道可以用导数值大小来表示函数的变化快慢。在多元函数中,可以求各个方向的导数,他们称为方向导数。
方向导数等于梯度与方向的余弦内积(方向指定是:所求方向与x轴方向间的逆时针角度)。梯度是固定的,所以
夹角越小,方向导数越大。当角度为0时,达到最大值。
故梯度方向是函数值变化最快的方向。
2、梯度方向是函数值变大的方向还是变小的方向?
是增大的方向。
想知道增大还是减小,我们只需知道沿着梯度方向,导数值是正还是负。如果为正,函数值就增大;反之,就减小。
结论:梯度方向上的导数值永远不会为负。为什么?看下面的式子:
方向导数的值等于梯度的模值乘以求导方向和梯度方向夹角的余弦,当求导方向为梯度方向时,二者夹角为0,余弦值为1,方向导数的值就是梯度的模值,永远大于等于0。
所以,梯度方向是函数值增大的方向,而且是增大最快的方向。那梯度的反方向就是函数值减小最快的方向。这就是为什么最速下降法中的步长方向是梯度的反方向。
3、梯度、Hessian矩阵、Jacobi矩阵
3.1) 梯度(一阶导数)
考虑一座在 (x1, x2) 点高度是 f(x1, x2) 的山。那么,某一点的梯度方向是在该点坡度最陡的方向,而梯度的大小告诉我们坡度到底有多陡。注意,梯度也可以告诉我们不在最快变化方向的其他方向的变化速度(二维情况下,按照梯度方向倾斜的圆在平面上投影成一个椭圆)。对于一个含有 n 个变量的标量函数,即函数输入一个 n 维 的向量,输出一个数值,梯度可以定义为:
3.2) Hesse 矩阵(二阶导数)
Hesse 矩阵常被应用于牛顿法解决的大规模优化问题(后面会介绍),主要形式如下:
当 f(x) 为二次函数时,梯度以及 Hesse 矩阵很容易求得。二次函数可以写成下列形式:
其中 A 是 n 阶对称矩阵,b 是 n 维列向量, c 是常数。f(x) 梯度是 Ax+b, Hesse 矩阵等于 A。
3.3) Jacobi 矩阵
Jacobi 矩阵实际上是向量值函数的梯度矩阵,假设F:Rn→Rm 是一个从n维欧氏空间转换到m维欧氏空间的函数。这个函数由m个实函数组成: 。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵(m by n),这就是所谓的雅可比矩阵:
总结一下,
a) 如果 f(x) 是一个标量函数,那么雅克比矩阵是一个向量,等于 f(x) 的梯度, Hesse 矩阵是一个二维矩阵。如果 f(x) 是一个向量值函数,那么Jacobi 矩阵是一个二维矩阵,Hesse 矩阵是一个三维矩阵。
b) 梯度是 Jacobian 矩阵的特例,梯度的 jacobian 矩阵就是 Hesse 矩阵(一阶偏导与二阶偏导的关系)。