1. 考虑一个一次直线函数 y = kx
显然 y' = k
而任何两个点(x0, y0), (x1,y1)
有 y1 - y0 = y'*(x1-x0)
2. 考虑一个二次曲线函数 y = kx²
显然 y' = 2kx
这个是一个一次直线函数,
所以对于 y'' = 2k
所有有 y'(x1) - y'(x0) = y''*(x1-x0)
在二次曲线求最小值的时候, 我们需要求y'=0处的点,
上面,设y'(x1) = 0 则
y'(x0) - 0 = y''*(x0-x1)
x0 - x1 = 1/y'' * y'(x0) 即是 △x = 1/y'' * y'(x0)
可见取步长为1, 则直接可得到x1, 使得f'(x1) = 0
所以, 二次曲线上任一点,其和极值点的连线斜率等于该点的二阶导数(常数)乘以两点的x之差。
所以二阶导数乘以△x为斜率所表示的直线直接就指向了极值点。
这个方向就叫做“牛顿方向”.
3. 对于多元的函数而言, 二阶导数应该用海森矩阵(Hessian Matrix)H, 而上面的1/y''则使用矩阵的逆.
由于实际需要计算的函数并不是精确的二次函数, 而是只是我们用了一个二次函数来逼近,
所以实际上一步是不会得到最小值的, 而只是逼近了最小值,所以需要多轮计算。
同样的道理, 我们在进行新一轮计算的时候,原来的H(和它的逆)也失效了, 需要重新计算。
这样, 计算H和它的逆就成了一个巨大的负担。
4. 为了缓解计算H的负担, 我们可以对H也使用一个近似值,因为反正即使是精确的H逆,得到的也只是近似的逼近。
然后, 在多轮的迭代之后, 会逐渐逼近真实的H逆, 同时所求的变量也逐渐逼近了极值,
我们期望它们最后都同时取得足够的精度,从而得到所求的极值。
由于并非使用真实的H逆, 所以这种方法叫做“拟牛顿法”。
H逆在迭代中需要满足的条件, 则称为“拟牛顿条件”。
5. 计算H逆迭代方法中最著名的是BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法.