牛顿法是用迭代的方法,来求解方程的根和最优化
预备知识
1.Hessian矩阵
2.多元泰勒展开
用牛顿法求解方程的根
用牛顿法求解导数为0 的点
1.Hessian矩阵
相当于一元函数的二阶导数,所有元素由函数的二阶偏导数构成。
由于高阶导数一般和求导次序无关,所以Hessian矩阵往往是对称矩阵
f(x1,x2,...xn)
H(f)=⎝⎜⎛∂x1∂x1∂2f∂x2∂x1∂2f∂x3∂x1∂2f∂x1∂x2∂2f∂x2∂x2∂2f∂x3∂x2∂2f∂x1∂x3∂2f∂x2∂x3∂2f∂x3∂x3∂2f⎠⎟⎞
举个例子:
f(x,y,z)=2x2−xy+y2−3z2
故Hessian矩阵为
⎝⎛4−10−12000−6⎠⎞
Hessian矩阵的作用:
与多元函数的凹凸性由密切的关系。
如果Hessian矩阵正定,则f(x,y,z)是凸函数
如果Hessian矩阵负定,则f(x,y,z)是凹函数
极值判别法:
一元函数的极值判别法:
- f’(x)=0 f’’(x)>0 极小值
- f’(x)=0 f’’(x)<0 极大值
- f’(x)=0 f’’(x)=0 无法判断
多元函数的极值判别法
-
∇f=0,Hessian矩阵正定,极小值点
-
∇f=0,Hessian矩阵负定,极大值点
-
∇f=0,Hessian矩阵不定,还需要看更高阶的导数
2.多元函数的泰勒展开
一元函数的泰勒展开
f(xk+1)=f(xk)+f′(xk)(xk+1−xk)+21f′′(xk)(x(k+1)−xk)2+...+n!1f(n)(xk)(xk+1−xk)n+n+1!1f(n+1)(ϵ)(xk+1−xk)n+1
其中
ϵ是介于
xk与
xk+1的数
推广到多元函数的泰勒展开
f(x)=f(x0)+(∇f(x0))T(x−x0)+21(x−x0)TH(x0)(x−x0)+O(∣∣x−x0∣∣2)
用牛顿法求解方程的根
一元函数的情形:
f(xk+1)在
x=xk一阶展开
f(xk+1)=f(xk)+f′(xk)(xk+1−xk)+O
因为我们要找到的是
f(xk+1)=0的位置
故
f(xk)+f′(xk)(xk+1−xk)=0
化简的
xk+1=xk−f′(xk)f(xk)
用牛顿法求解导数为0 的点
一元函数的情形:
f(xk+1)在
x=xk二阶展开
f(xk+1)=f(xk)+f′(xk)(xk+1−xk)+21f′′(xk)(x(k+1)−xk)2+O
因为我们要找的
f(xk+1)的导数为0
故函数左右两端同时对
xk+1求导=0
得
xk+1=xk−f′′(xk)f′(xk)=xk−f′′(xk)−1f′(xk)
由此可以推测,若求n阶导为0的点
则迭代公式为:
xk+1=xk−fn+1(xk)fn(xk)
推广到多元
f(xk+1)在
x=xk二阶展开
f(xk+1)=f(xk)+∇f(xk)T(xk+1−xk)+21(xk+1−xk)TH(xk)(xk+1−xk)+O(∣∣x−x0∣∣2)
因为我们要找的
∇f(xk+1)为0的坐标
故函数左右两端同时对
xk+1求梯度,并令其为0
得
xk+1=xk−H(xk)−1∇f(xk)
为了保证确实可以忽略高阶无穷小
则
xk+1=xk−H(xk)−1∇f(xk)∗γ
其中
−H(xk)−1∇f(xk)∗γ
为搜索方向
牛顿法无法保证每次迭代后,函数值会更小,所以
γ的选取非常有技巧,往往采用线性搜索(line search)
即gamma的取值在0.01,0.001,0.0001,0.00001这几个选项中,选择令函数值下降最快的步长。
牛顿法的终止条件:
设置迭代停止条件:
1) 最大迭代次数T,迭代次数大于T时停止迭代
2) 停止搜索条件
∣∣∇f∣∣<ϵ,满足条件时停止
牛顿法与梯度下降法的联系:
牛顿法与梯度下降法是非常相似的,只是牛顿法多乘Hessian矩阵的逆矩阵。
梯度下降法是用线性函数来近似代替目标函数,而牛顿法是用二次函数来代替目标函数,故牛顿法的收敛速度是更快的。
尤其是当函数的三阶导为0时,只需要迭代一次,即可得到最终的结果。
牛顿法的局限:
- Hessian矩阵不一定可逆
- 当Hessian矩阵规模很大时,变量很多时,解Hessian矩阵的逆矩阵非常耗时,由此出现改进算法(拟牛顿法)