赞
踩
分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(Gradient Descent)
· 随机梯度下降(Stochastic Gradient Descent, SGD)
· 牛顿迭代法(Newton‘s Method)
· 拟牛顿法(Quasi-Newton Methods)
· Momentum(Gradient Descent with Momentum, GDM)
· Nesterov Momentum
· AdaGrad
· RMSProp
· Adam(Adaptive Moments)
· 共轭梯度法(Conjugate Gradient)
· 遗传算法(Genetic Algorithm)
· 粒子群算法
\qquad
· 基础知识
\qquad
· 带惯性权重的粒子群算法
\qquad
· 改进的粒子群算法
· 模拟退火算法(Simulated Annealing,SA)
多数深度学习算法都涉及某种形式的优化。优化指的是改变 x x x以最小化或最大化某个函数 f ( x ) f(x) f(x)的任务。我们通常以最小化 f ( x ) f(x) f(x)指代大多数最优化问题。最大化可经由最小化算法最小化 − f ( x ) -f(x) −f(x)来实现。我们把要最小化或最大化的函数称为目标函数或准则。当我们对其进行最小化时,也把它称为代价函数、损失函数或误差函数。我们通常使用一个上标 ∗ ^∗ ∗表示最小化或最大化函数的 x x x值,如记 x ∗ = arg min f ( x ) x^∗=\arg \min f(x) x∗=argminf(x)。
假设有一个函数 y = f ( x ) y=f(x) y=f(x),其中 x x x和 y y y是实数。这个函数的导数记为 f ′ ( x ) f'(x) f′(x)或 d y d x \frac{\text{d}y}{\text{d}x} dxdy。导数 f ′ ( x ) f'(x) f′(x)代表 f ( x ) f(x) f(x)在点 x x x处的斜率。换句话说,它表明如何缩放输入的小变化才能在输出获得相应的变化: f ( x + ϵ ) ≈ f ( x ) + ϵ f ′ ( x ) f(x+\epsilon)\approx f(x)+\epsilon f'(x) f(x+ϵ)≈f(x)+ϵf′(x)。
因此导数对于最小化一个函数很有用,因为它告诉我们如何更改
x
x
x来略微地改善
y
y
y。例如,我们知道对于足够小的
ϵ
\epsilon
ϵ来说,
f
(
x
−
ϵ
×
sign
f
′
(
x
)
)
f(x-\epsilon\times\text{sign}f'(x))
f(x−ϵ×signf′(x))是比
f
(
x
)
f(x)
f(x)小的。因此我们可以将
x
x
x往导数的反方向移动一小步来减小
f
(
x
)
f(x)
f(x),这种技术称为梯度下降。
当 f ′ ( x ) = 0 f'(x)=0 f′(x)=0时,导数无法提供往哪个方向移动的信息。这个点称为临界点或驻点。一个局部极小点意味着这个点的 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
(
x
)
f(x)
f(x)取得绝对的最小值的点是全局最小点。函数可能只有一个全局最小点或存在多个全局最小点,还可能存在不是全局最优的全局极小点。在深度学习的背景下,我们要优化的函数可能含有许多不是最优的全局极小点,或者还有很多处于非常平坦的区域内的鞍点。尤其是当输入是多维的时候,所有这些都将使优化变得困难。因此,我们通常寻找使
f
f
f非常小的点,但这在任何形式意义下并不一定是最小,如x下图所示:
我们经常最小化具有多维输入的函数:
f
(
x
)
:
R
n
→
R
f(x):R^n→R
f(x):Rn→R。为了使“最小化”的概念有意义,输出必须是一维的。针对具有多维输入的函数,我们需要用到偏导数的概念。偏导数
∂
∂
x
i
f
(
x
)
\frac{\partial}{\partial x_i}f(x)
∂xi∂f(x)衡量点
x
x
x处只有
x
i
x_i
xi增加时
f
(
x
)
f(x)
f(x)如何变化。而梯度是相对一个向量求导的导数:
f
f
f的导数是包含所有偏导数的向量,记为
∇
x
f
(
x
)
\nabla_xf(x)
∇xf(x)。梯度的第
i
i
i个元素是
f
f
f关于
x
i
x_i
xi的偏导数。在多维情况下,临界点是梯度中所有元素都为零的点。
在单位向量
u
u
u方向的方向导数是函数
f
f
f在
u
u
u方向的斜率。换句话说,方向导数是函数
f
(
x
+
α
u
)
f(x+\alpha u)
f(x+αu)关于
α
\alpha
α的导数(在
α
=
0
\alpha=0
α=0时取得)。使用链式法则,我们可以看到当
α
=
0
\alpha=0
α=0时:
∂
∂
α
f
(
x
+
α
u
)
=
u
T
∇
x
f
(
x
)
\frac{\partial}{\partial\alpha}f(x+\alpha u)=u^T\nabla_xf(x)
∂α∂f(x+αu)=uT∇xf(x)
为了最小化
f
f
f,我们希望找到使
f
f
f下降得最快的方向。计算方向导数:
min
u
u
T
∇
x
f
(
x
)
=
min
u
∣
∣
u
∣
∣
2
∣
∣
∇
x
f
(
x
)
∣
∣
2
cos
θ
\min_u u^T\nabla_xf(x)=\min_u ||u||_2||\nabla_xf(x)||_2\cos\theta
uminuT∇xf(x)=umin∣∣u∣∣2∣∣∇xf(x)∣∣2cosθ
其中 θ \theta θ是 u u u与梯度的夹角。将 ‖ u ‖ 2 = 1 ‖u‖_2=1 ‖u‖2=1代入,并忽略与 u u u无关的项,就能简化得到 min u cos θ \min_u\cos\theta minucosθ。这在 u u u与梯度方向相反时取得最小。换句话说,梯度向量指向上坡,负梯度向量指向下坡。我们在负梯度方向上移动可以减小 f f f。这被称为最速下降法或梯度下降法。
梯度下降法建议新的新点为:
x
′
=
x
−
ϵ
∇
x
f
(
x
)
x'=x-\epsilon\nabla_xf(x)
x′=x−ϵ∇xf(x)
其中 ϵ \epsilon ϵ为学习率,是一个确定步长大小的正标量。我们可以通过几种不同的方式选择 ϵ \epsilon ϵ。普遍的方式是选择一个小常数。有时我们通过计算,选择使方向导数消失的步长。还有一种方法是根据几个 ϵ \epsilon ϵ计算 f ( x − ϵ ∇ x f ( x ) ) f(x-\epsilon\nabla_xf(x)) f(x−ϵ∇xf(x)),并选择其中能产生最小目标函数值的 ϵ \epsilon ϵ。这种策略称为线搜索。梯度下降法在梯度的每一个元素为零时收敛。在某些情况下,我们也许能够避免运行该迭代算法,并通过解方程 ∇ x f ( x ) = 0 \nabla_xf(x)=0 ∇xf(x)=0直接跳到临界点。虽然梯度下降被限制在连续空间中的优化问题,但不断向更好的情况移动一小步(即近似最佳的小移动)的一般概念可以推广到离散空间。递增带有离散参数的目标函数称为爬山算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。