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