当前位置:   article > 正文

机器学习中的数学——梯度下降法(Gradient Descent)_梯度下降法的d是什么

梯度下降法的d是什么

分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(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)。有些临界点既不是最小点也不是最大点,这些点称为鞍点。

导数为0

使 f ( x ) f(x) f(x)取得绝对的最小值的点是全局最小点。函数可能只有一个全局最小点或存在多个全局最小点,还可能存在不是全局最优的全局极小点。在深度学习的背景下,我们要优化的函数可能含有许多不是最优的全局极小点,或者还有很多处于非常平坦的区域内的鞍点。尤其是当输入是多维的时候,所有这些都将使优化变得困难。因此,我们通常寻找使 f f f非常小的点,但这在任何形式意义下并不一定是最小,如x下图所示:
全局最小点
我们经常最小化具有多维输入的函数: f ( x ) : R n → R f(x):R^n→R f(x):RnR。为了使“最小化”的概念有意义,输出必须是一维的。针对具有多维输入的函数,我们需要用到偏导数的概念。偏导数 ∂ ∂ x i f ( x ) \frac{\partial}{\partial x_i}f(x) xif(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)=uTxf(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 uminuTxf(x)=uminu2xf(x)2cosθ

其中 θ \theta θ u u u与梯度的夹角。将 ‖ u ‖ 2 = 1 ‖u‖_2=1 u2=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直接跳到临界点。虽然梯度下降被限制在连续空间中的优化问题,但不断向更好的情况移动一小步(即近似最佳的小移动)的一般概念可以推广到离散空间。递增带有离散参数的目标函数称为爬山算法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/262870
推荐阅读
相关标签
  

闽ICP备14008679号