矩阵乘以向量?向量乘以向量?
这里有一个问题:v^T H v 到底是什么意思?为什么向量乘以矩阵,然后再乘以向量(的转置),就能得到方向曲率(二阶方向导数)?
好吧,我们来展开说。首先,矩阵乘以向量是什么意思?
当你进行 H·v 运算时,你实际上是对 H 的列进行线性组合,并由 v 的各个分量加权。结果是一个新向量,它告诉你 H 如何“变换”方向 v。
但我们不会就此止步,接下来我们进行 v^T · (H·v) 运算,它将变换后的向量投影回原始方向 v。
直观的理解是:H·v 告诉你“当你沿方向 v 移动时,梯度会如何变化?” 然后 v^T ·(该变化)会问“其中有多少变化是沿着方向 v 本身发生的?”
我们把 v^T 写在左边而不是 v 写在右边是有原因的。计算 H·v 时,我们得到一个向量,它是沿方向 v 移动时梯度的变化。到目前为止一切顺利。
现在,我们想知道:这个变化中有多少是沿我们移动方向的?我们要将这个“梯度变化向量”与方向 v 做点积。两个向量的点积可以写成 v^T · (某物) 或 (某物)^T · v,它们得出的数字相同。但按照惯例,我们将其写成 v^T · H · v,以显示对称性。
(H v)^T v = v^T H v
v^T 从技术上讲是一个 1×n 矩阵(行向量),当它与列向量 H·v 相乘时,我们得到一个 1×1 矩阵,它只是一个数字,一个标量。但更深层次的是,我们并非只是随机选择符号。v^T H v 这种形式揭示了一些美妙的东西,它是一个二次型。而二次型有一些特殊的性质……
H·v 告诉你当你沿方向 v 移动时,梯度是如何变化的。但这种变化可能出现在各种方向上,也许梯度一开始指向东北,最后指向西南,或者其他方向。
但我们关心的是方向 v 的曲率:梯度沿着我们行走的方向变化了多少?
如果你向东走,梯度向东越来越陡,那么你方向上的曲率就是正的,你上坡的速度越来越快。但如果梯度以垂直方向变化,比如你向东走时,梯度呈南北旋转的更多,这其实并不会影响(向东走的)你对路径陡峭程度的感觉。
点积 v^T · (H·v) 滤除了所有无关的方向变化,只保留了重要的部分:与行进方向一致的变化。
在一维空间中,只有两个方向:向前和向后,正向和负向。一切都很简单。但进入二维、三维、数百个维度时……方向突然变得如此丰富复杂。而Hessian矩阵正是捕捉曲率所有复杂性的数学对象。