梯度下降

深度学习、数学、梯度下降
梯度下降 cover image

## 介绍

想象一下,我们有一个函数 f(x)f(x),我们想找到它的最小值。你会怎么办 ?

简单吧?我们只需要解下面的方程:

f(x)=0f'(x) = 0

问题是,找到 ff' 的公式并不总是那么容易,因为它们往往非常复杂,尤其是在我们处理复杂函数的深度学习中。所以我们需要找到另一种方法,可以为我们提供函数的最小值,而不需要找到导数ff'的公式。

让我们建立一些直觉

假设我们有一个函数 f 和相应的图:

Graph 1

让我们从随机点 x0x_{0} 开始。目标是移动该点并使其越来越接近 xx*,使得 f(f'(x*)=0) = 0。所以问题可以分为两部分:

  • 我们应该向哪个方向移动点xx?左还是右?

  • 我们应该移动它多少?

方向

让我们建立一些直觉来回答第一个问题。请看以下几点:

Graph 2

Graph 3

注意:

  • 当点 x0x_{0} 位于最佳点 xx* 的右侧时,其切线上升。

  • 当点 x0x_{0} 位于最佳点 xx* 的右侧时,其切线向下。

直线的方向由其斜率的符号确定:

  • 一条线向上\暗\暗示斜率aa

  • 一条线向下\暗\暗示斜率aa

注意: \

函数在某一点 x0x_{0} 的切线斜率不大于该点 f(x0)f'(x_{0}) 的导数:

tangent(x0):g(x)=f(x0).(xx0)+f(x0)tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0})

因此,作为问题 “我们应该将 x0x_{0} 移到哪里?” 的答案:

  • f(x0)<0f'(x_{0}) < 0     \implies x0x_{0} 位于 xx*     \implies 右侧 我们需要将 x0x_{0} 移至左侧。

  • f(x0)>0f'(x_{0}) > 0     \implies x0x_{0} 位于 xx*     \implies 的左侧 我们需要将 x0x_{0} 移至右侧。

步骤

现在第二个问题,我们应该移动 x0x_{0} 多少?

看看下面的例子:

Graph 4

Graph 5

我们可以得出结论:

  • x0x_{0} 接近 xx* => 切线斜率小 => f(x0)f'(x_{0}) 小。

  • x0x_{0} 距离 xx* 较远 => 切线斜率较大 => f(x0)f'(x_{0}) 较大。

通过回答这两个问题,我们得出的结论是,只有了解点 x0x_{0} 的导数才能让我们深入了解最优点 x0x_{0} 的方向和距离。

梯度下降

梯度下降是前两个问题答案的表述。它是一种优化迭代算法,从随机初始点 x0x_{0} 开始近似函数的最小值 xx*。算法表述如下:

xn+1=xnlr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

在哪里:

  • dfdxn\frac{\mathrm{d} f}{\mathrm{d} x*{n}} 不超过 ff 在点 xnx*{n} 的导数。

  • lrlr 是一个正常数,决定步长有多大。

请注意:

  • xnx_{n}xx* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+的右侧1=xnx_{n+ 的右侧1} = x_{n} - 正 => xnx_{n} 向左移动。

  • xnx_{n} 位于 xx* => dfdxn的左侧<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} 的左侧 < 0 => xn+1=xn+x*{n +1} = x*{n} + 正 => xnx_{n} 向右移动。

  • xnx_{n} 接近 xx* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} 接近 00 => 对 x进行小幅更新nx_{ 进行小幅更新n}

测验

  • 梯度下降何时停止迭代:

  • xnx_{n} 足够小时。

  • xnx_{n} 接近 x0x_{0} 时。

  • dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

  • 我们如何选择x0x_{0}

  • 我们随机挑选。 XXX

  • 我们把它放在xnx{n}附近。

  • 这取决于问题。

  • 为什么我们需要梯度下降:

  • 因为计算机不够强大,无法计算导数。

  • 因为深度学习模型的导数公式很难找到。 XXX

  • 因为函数有多个局部最小值。


Career Services background pattern

职业服务

Contact Section background image

让我们保持联系

Code Labs Academy © 2025 版权所有.