梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比
Posted bitcarmanlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比相关的知识,希望对你有一定的参考价值。
1.梯度下降
梯度下降是优化方法中最基础也是最重要的一类。其思想也很简单:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
⋯
f(x) = f(x_0) + f'(x_0)(x-x_0) + \\cdots
f(x)=f(x0)+f′(x0)(x−x0)+⋯
上面是函数f(x)的一阶泰勒展开。如果我们令
x
k
+
1
=
x
k
−
f
′
(
x
0
)
x_k+1 = x_k - f'(x_0)
xk+1=xk−f′(x0)
很明显可以看出
f
(
x
k
+
1
)
<
f
(
x
k
)
f(x_k+1) < f(x_k)
f(xk+1)<f(xk),即下一步迭代的方向会使当前函数值缩小,最后收敛到极小值点。
2.牛顿迭代
首先需要注意的是牛顿迭代与牛顿法的区别。
牛顿法是一种二阶的优化方法,而牛顿迭代是一种在实数域和复数域上近似求解方程的方法,主要是通过函数f(x)的泰勒级数的前面几项来寻找方程
f
(
x
)
=
0
f(x) = 0
f(x)=0的根。
由f(x)的一阶泰勒展开,很容易得到牛顿迭代的迭代公式:
x
n
+
1
=
x
n
−
f
(
x
n
)
f
′
(
x
n
)
x_n+1 = x_n - \\fracf(x_n)f'(x_n)
xn+1=xn−f′(xn)f(xn)
用上面的公式进行迭代,即可得到 f ( x ) = 0 f(x) = 0 f(x)=0的根。
3.牛顿法
相比梯度下降是函数的一阶泰勒展开,牛顿法使用了函数的二阶泰勒展开。
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 f(x) = f(x_0) + f'(x_0)(x-x_0) + \\fracf''(x_0)2!(x-x_0)^2 f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2
如果变量x是一组向量
f ( x ) = f ( x 0 ) + ∇ f ( x 0 ) ( x − x 0 ) + ∇ 2 f ( x 0 ) 2 ! ( x − x 0 ) 2 f(x) = f(x_0) + \\nabla f(x_0)(x-x_0) + \\frac\\nabla ^2 f(x_0)2!(x-x_0)^2 f(x)=f(x0)+∇f(x0)(x−x0)+2!∇2f(x0)(x−x0)2
我们将 ∇ f ( x 0 ) \\nabla f(x_0) ∇f(x0)记为 g g g, ∇ 2 f ( x 0 ) \\nabla ^2 f(x_0) ∇2f(x0)记为 H H H,
如果我们要求极值点,对x求导,直接令 f ′ ( x ) = 0 f'(x) = 0 f′(x)=0,有
∇ f ( x 0 ) + ∇ 2 f ( x 0 ) ( x − x 0 ) = 0 \\nabla f(x_0) + \\nabla^2 f(x_0)(x-x_0) = 0 ∇f(x0)+∇2f(x0)(x−x0)=0
所以最后x的迭代公式为
x
=
x
0
−
∇
f
(
x
0
)
∇
2
f
(
x
0
)
x = x_0 - \\frac\\nabla f(x_0) \\nabla^2 f(x_0)
x=x0−∇2f(x0)∇f(x0)
或者可以表示为:
x
k
+
1
=
x
k
−
H
k
−
1
⋅
g
k
x_k+1 = x_k - H ^ -1_k \\cdot g_k
xk+1=xk−Hk−1⋅gk
4.牛顿法的优缺点
优点
利用到了二阶导的信息,收敛速度较快
缺点
1.计算二阶导,计算量大。
2.求解的时候很容易产生病态方程。
3.海森矩阵H不一定正定。
5.拟牛顿法
为了克服牛顿法的缺点,拟牛顿法的思想就是不使用海森矩阵,而是构造一个近似海森矩阵(或其逆矩阵)的正定对称阵来代替,在“拟牛顿”的条件下优化目标函数。
首先将
f
(
x
)
f(x)
f(x)在
x
k
+
1
x_k+1
xk+1处二阶泰勒展开 以上是关于梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比的主要内容,如果未能解决你的问题,请参考以下文章 梯度下降之模拟退火梯度下降之学习计划牛顿法拟牛顿法共轭梯度法 什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么?
f
(
x
)
=
f
(
x
k
+
1
)
+
∇
f
(
x
k
+
1
)
(
x
−
x
k
+
1
)
+
∇
2
f
(
x
k
+
1
)
2
!
(
x
−
x
k
+
1
)
2
f(x) = f(x_k+1) + \\nabla f(x_k+1)(x-x_k+1) + \\frac\\nabla ^2 f(x_k+1)2!(x-x_k+1)^2
f(x)=f(xk+1)+∇f(xk+1)(x−xk+1)+