优化与深度学习
深度学习中的优化算法通常只考虑最小化目标函数,优化为深度学习提供了最小化目标函数的方法。由于优化算法的的目标函数通常是一个基于训练数据集的损失函数,优化的目标在于降低训练误差。而深度学习的目标在于降低泛化误差,为了降低泛化误差,除了使用优化算法降低训练误差外,还需要注意应对过拟合。
深度学习中绝大多数目标函数都很复杂,因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。以下优化算法都是基于数值方法的算法,为了求得最小化目标函数的数值解,通过优化算法的有限次迭代模型参数来尽可能的降低损失函数的值。
深度学习模型的目标函数可能有若干局部最优值,当一个优化问题的数值解在局部最优解附近时,由于目标函数有关解的梯度接近或变成零,最终迭代求得得数值解可能只令目标函数局部最小化而非全局最小化。除此之外,另一种可能得情况是当前解在鞍点附近。在下图鞍点位置,目标函数在 x 轴方向上是局部最小值,但在 y 轴方向上是局部最大值。
梯度下降和随机梯度下降
假设连续可导的函数
f
f
f 输入和输出都是标量,给定绝对值足够小的数
ξ
ξ
ξ,根据泰勒展开公式,我们得到以下近似:
f
(
x
+
ξ
)
≈
f
(
x
)
+
ξ
f
′
(
x
)
f(x + ξ) ≈ f(x) + ξf^{'}(x)
f(x+ξ)≈f(x)+ξf′(x) ,这里
f
′
(
x
)
f^{'}(x)
f′(x) 是函数
f
f
f 在
x
x
x 处的梯度,即导数。接下来,找到一个常数
η
>
0
η > 0
η>0 ,使得
∣
η
f
′
(
x
)
∣
|ηf^{'}(x)|
∣ηf′(x)∣ 足够小,那么可以将
ξ
ξ
ξ 替换为
?
η
f
′
(
x
)
-ηf^{'}(x)
?ηf′(x) 并得到:
f
(
x
?
η
f
′
(
x
)
)
≈
f
(
x
)
?
η
f
′
(
x
)
2
f(x - ηf^{'}(x)) ≈ f(x) - η f^{'}(x)^2
f(x?ηf′(x))≈f(x)?ηf′(x)2。
如果导数
f
′
(
x
)
≠
0
f'(x) ≠ 0
f′(x)?=0,那么
η
f
′
(
x
)
2
>
0
η f^{'}(x)^2 > 0
ηf′(x)2>0,即:
f
(
x
?
η
f
′
(
x
)
)
?
f
(
x
)
f(x - ηf^{'}(x)) ? f(x)
f(x?ηf′(x))?f(x)。这意味着,如果通过
x
=
x
?
η
f
′
(
x
)
x = x - η f^{'}(x)
x=x?ηf′(x) 来迭代
x
x
x,函数
f
(
x
)
f(x)
f(x) 的值可能会降低。
因此,在梯度下降中,选取一个初始值
x
x
x 和
η
>
0
η > 0
η>0,然后通过上式不断迭代
x
x
x, 直到达到停止条件。
小批量随机梯度下降
动量法
AdaGrad算法
RMSProp算法
AdaDelta算法
Adam算法
|