梯度下降法
gradient descent ( steepest descent )缩写为GD,主要用于最优化算法中寻找可微函数的局部最小值。其基本思想为随机选取初始点,并沿当前 x 值梯度的反方向更新 x 值(最速下降)方向。也可以沿梯度方向求局部最大值。
以上图为例,我们想要找到
y
1
=
1
20
x
4
−
2
5
x
+
1
y1 = \frac{1}{20}x^4 - \frac{2}{5}x + 1
y1=201x4−52x+1
的最小值点
随机选取一个点,假设我们选到了 -1
算出
(
−
1
,
29
20
)
(-1,\frac{29}{20})
(−1,2029) 点在曲线上,因此可以算出切线为
y
2
=
−
3
5
x
+
17
20
y2 = - \frac{3}{5}x + \frac{17}{20}
y2=−53x+2017
我们应该沿着切线的方向更新 x 。但是应该更新多少呢?因为从图中我们可以清楚的看到更新的过大的话 x 会到递增的区域,但过小的话又要更新很多次。
因此这个更新的幅度不能过大也不能过小。
如上面所讲,参数更新符合以下公式:
x
n
+
1
=
x
n
−
γ
n
∇
F
(
x
n
)
,
n
≥
0.
\mathbf {x} _{n+1}=\mathbf {x} _{n}-\gamma _{n}\nabla F(\mathbf {x} _{n}),\ n\geq 0.
xn+1=xn−γn∇F(xn), n≥0.
其中
γ
n
\gamma_n
γn 为学习率,
∇
F
(
x
n
)
\nabla F(\mathbf{x}_{n})
∇F(xn) 为当前点的梯度。
牛顿法
Newton’s Method ( Newton-Raphson ) ,常用于寻找可微函数的根。其基本思路与梯度下降法基本一致,区别在于牛顿法用二次函数来拟合函数,并在每次计算时直接将 x 更新到二次函数的最小值点。
根据上面的分析我们知道梯度下降法的一个问题在于参数 (学习率)
γ
n
\gamma_{n}
γn 需要自己选取。
我们知道泰勒展开式
f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) + 1 2 f ′ ′ ( x k ) ( x − x k ) 2 f(x)\approx f(x_{k})+f'(x_{k})(x-x_{k})+{\frac {1}{2}}f''(x_{k})(x-x_{k})^{2} f(x)≈f(xk)+f′(xk)(x−xk)+21f′′(xk)(x−xk)2
我们想求近似函数
f
(
x
k
)
f(x_{k})
f(xk) 的最小值,因此对上式两边求导得到:
f
′
(
x
)
=
f
′
(
x
k
)
+
f
′
′
(
x
k
)
(
x
−
x
k
)
f'(x) = f'(x_{k}) + f''(x_{k})(x - x_{k})
f′(x)=f′(xk)+f′′(xk)(x−xk)
并令
f
′
(
x
)
=
0
f'(x) = 0
f′(x)=0
因此可以求得
x
=
x
k
−
f
′
(
x
)
f
′
′
x
x = x_{k} - \frac{f'(x)}{f''{x}}
x=xk−f′′xf′(x)
从图中可以看出牛顿法采用二次函数
y
3
y3
y3 来拟合原函数曲线
y
1
y1
y1
我们发现和梯度下降法的公式很像
梯度下降法:
x
n
+
1
=
x
n
−
γ
n
y
′
(
x
n
)
\mathbf x_{n+1} = \mathbf x_{n} - \gamma_{n}y'(x_{n})
xn+1=xn−γny′(xn)
牛顿法:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
\mathbf x_{n+1} = \mathbf x_{n} - \frac{f'(x_{n})}{f''(x_{n})}
xn+1=xn−f′′(xn)f′(xn)
两个式子唯一的不同在于梯度下降算法中的学习率
γ
n
\gamma_{n}
γn 换成了牛顿法中的
1
f
′
′
(
x
n
)
\frac{1}{f''(x_{n})}
f′′(xn)1
总结
- 梯度下降法:梯度下降法梯度方向和步长来更新参数,优点是参数的更新速度较快。但存在着容易陷入局部最优解的缺点,并且越靠近最小值点时,步长应该越小,否则可能会导致在最小值点附近震荡,收敛很慢甚至无法收敛。
- 牛顿法:不仅考虑了梯度而且引入二阶导数,不需要手动设置学习率,也考虑到了更新之后的梯度变化(二阶导数),同时其收敛速度也很快。缺点是也会陷入局部最优解,而且需要计算黑塞(Hessian)矩阵的逆矩阵,并且每次迭代都需要计算,因此计算量非常大。