牛顿法
需求:知道每个点的一阶导数和二阶倒数(Hessian矩阵)
目标:
若x*是无约束问题的局部解,则x*满足 ▽f(x) = 0
▽f(x) 表示多元函数对其中每一元求偏导数组成的向量
▽f(x) = (∂f/∂x1, ∂f/∂x2, ∂f/∂x3, .......)
过程:
对于多元函数▽f(x)我们在初始点x1做线性展开得到
▽f(x) = ▽f(x1) + ▽2f(x1) (x-x1)
将▽f(x) = 0 代入
解出x2 = (▽f(x) - ▽f(x1)) * ▽2f(x1)-1 + x1
x2即为下一个迭代点, 当迭代到达到精度要求时,结束迭代
当然,如果知道更高阶的倒数的话,也可以使用泰勒展开做近似,一般应用场景中只使用到二阶导数
优点:
算法具有二次终止性,收敛较快
缺点:
迭代过程中,函数值可能不是严格下降的
当初始点与正解距离较大时,迭代点列可能不收敛
要计算Hessian矩阵的逆矩阵,计算量较大
Hessian矩阵要是不可逆就凉了
修正牛顿法
需求: 同牛顿法
目标:
解决牛顿法中函数值可能上升的问题
过程:
解线性方程组
d为f(x)的收敛方向,为线性近似中的xk到0点的梯度
在xk处,方向d上做精确一维搜索,搜索到的点即为下一个迭代点
当xk处导数的范数小于精度要求时,终止迭代
优点:
解决了牛顿法中函数值上升的问题
对收敛在鞍点的情况有所改善
共轭梯度法
引入:
对于正定二次函数
,其函数图像是一个超球面
对于n维超球面,我得出n个正交方向
沿着这些正交方向做n次精确一维搜索即可得到最优解
对于一般的二次函数
将其做一个变换改变为正定二次函数就能解决问题了
下面就引入变换
这样就改造成了正定二次函数
接下来就是要找在w下的n个正交方向了q
因为对于这n个正交方向,在一遍的空间中有
所以
那么我们将d1, d2称作共轭方向(G必须要对称正定)
可以看到当G = I时,共轭方向就是正交方向
过程
可以知道,共轭梯度法的过程就是去找n个共轭梯度,然后去做精确一维搜索就好
令
进行一维搜索,得到x2
令
(个人认为,这是为了找到一个离梯度最近的共轭方向,所以才这么做的)
每一步这样迭代下去即可
当▽f(x) <= 精度要求时,终止迭代
可以看到,在计算梯度时我们还是用了G
进行一系列化简之后得到下式
dk = -▽f(xk) + βk-1 * dk-1
βk-1 = || f(xk) ||2 / || f(xk-1) ||2
优点:
不用二阶导,计算量减小
算法的名称
PRP算法
FR算法
变度量法(大概率不考)
主要思想
使用▽f(x)的泰勒展开式去获取Hessin矩阵的近似值
▽f(x) = ▽f(x0) + ▽2f(x0) * (x - x0)
具体算法
(很不走心的直接贴书上的图