牛顿法原理推导

牛顿法是用迭代的方法,来求解方程的根和最优化

预备知识
1.Hessian矩阵
2.多元泰勒展开

用牛顿法求解方程的根
用牛顿法求解导数为0 的点


1.Hessian矩阵

相当于一元函数的二阶导数,所有元素由函数的二阶偏导数构成。

由于高阶导数一般和求导次序无关,所以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)=x1x12fx2x12fx3x12fx1x22fx2x22fx3x22fx1x32fx2x32fx3x32f

举个例子:
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)=2x2xy+y23z2
故Hessian矩阵为
( 4 − 1 0 − 1 2 0 0 0 − 6 ) \begin{pmatrix} 4&-1&0\\-1&2&0\\0&0&-6 \end{pmatrix} 410120006

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 \nabla f=0 f=0,Hessian矩阵正定,极小值点
  • ∇ f = 0 \nabla f=0 f=0,Hessian矩阵负定,极大值点
  • ∇ f = 0 \nabla f=0 f=0,Hessian矩阵不定,还需要看更高阶的导数

2.多元函数的泰勒展开

一元函数的泰勒展开
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+1xk)+21f(xk)(x(k+1)xk)2+...+n!1f(n)(xk)(xk+1xk)n+n+1!1f(n+1)(ϵ)(xk+1xk)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(xx0)+21(xx0)TH(x0)(xx0)+O(xx02)


用牛顿法求解方程的根

一元函数的情形:
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+1xk)+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+1xk)=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=xkf(xk)f(xk)


用牛顿法求解导数为0 的点

一元函数的情形:
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+1xk)+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=xkf(xk)f(xk)=xkf(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=xkfn+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+1xk)+21(xk+1xk)TH(xk)(xk+1xk)+O(xx02)
因为我们要找的 ∇ 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=xkH(xk)1f(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=xkH(xk)1f(xk)γ
其中
− H ( x k ) − 1 ∇ f ( x k ) ∗ γ -H(x_k)^{-1}\nabla f(x_k)*\gamma H(xk)1f(xk)γ
为搜索方向

牛顿法无法保证每次迭代后,函数值会更小,所以 γ \gamma γ的选取非常有技巧,往往采用线性搜索(line search)
即gamma的取值在0.01,0.001,0.0001,0.00001这几个选项中,选择令函数值下降最快的步长。

牛顿法的终止条件:
设置迭代停止条件:

1) 最大迭代次数T,迭代次数大于T时停止迭代

2) 停止搜索条件 ∣ ∣ ∇ f ∣ ∣ < ϵ ||\nabla f||<\epsilon f<ϵ,满足条件时停止

牛顿法与梯度下降法的联系:
牛顿法与梯度下降法是非常相似的,只是牛顿法多乘Hessian矩阵的逆矩阵。
梯度下降法是用线性函数来近似代替目标函数,而牛顿法是用二次函数来代替目标函数,故牛顿法的收敛速度是更快的。
尤其是当函数的三阶导为0时,只需要迭代一次,即可得到最终的结果。

牛顿法的局限:

  1. Hessian矩阵不一定可逆
  2. 当Hessian矩阵规模很大时,变量很多时,解Hessian矩阵的逆矩阵非常耗时,由此出现改进算法(拟牛顿法)

你可能感兴趣的:(机器学习总结)