打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
梯度下降直观解释及Python示例

梯度下降是所有深度学习的核心。本文简要介绍了该方法的技术细节。

考虑一个机器学习模型,在该机器学习模型中,它接受输入,然后根据给定的参数应用一些计算,然后输出结果。

然后将输出与一些预期结果进行比较,我们希望看到的是输出尽可能接近这些预期结果。

如何以数学方式完成呢?

输出和预期的结果之间的差异是由一个函数描述,我们称之为损失函数.

为简便起见,我们假设系统的损失函数为抛物线形式:

其中θ是微调参数,a和b是一些值。

此损失函数如下图所示:

上图根据参数θ给出了输出中的误差量。

目的是最小化误差,从图中判断很容易发现最小误差位于曲线的底部(点:θ= 0,L= 1)。

如何找到最小误差?

通常情况下,解析解是一种可能,但当损失函数变得复杂时,它并不总是容易的,因此我们回到迭代解。

我们进行的方式相当直观,我们改变θ,我们看看是否L减少。

我们一直这样做,直到我们发现θ的值为L最小值。

正如我们所看到的,当θ从-2移动到-1.4时,L会下降,这意味着θ正朝着正确的方向移动。另一方面,当θ从+1.5移动到+2时,L增加,这意味着θ向错误的方向移动,它必须沿箭头所示的相反方向移动。

现在的问题是如何找到最小化L

显然我们需要改变θ,但需要改变多少和朝哪个方向?

正如我们在上面所看到的那样,当我们将θ从最低值变为最高值(例如:-∞到+∞)时,我们跟踪L的变化。如果L继续减小,我们继续增加θ,否则如果L开始增加,我们开始减小θ直到我们找到正确的值。

这解决了方向,但θ应该变化的量是多少?

一个简单的解决方案是采用L变量的一小部分,我们称之为α。

将所有这些特性混合在一起,我们得到以下公式:

这个公式清楚地表明θ的下一个值是基于前一个值减去L.的变化的一小部分

  • 如果L减小则ΔL<0且- α.="" ∆l=""> 0所以θ会增加。
  • 如果L增加则ΔL>0且- α. ∆L<>

如何计算ΔL?

当然,最直接的方法是ΔL=L(结束) - L(开始)。更好的方法是计算导数。

例如,L=aθ²+ b的导数变为dL/dθ=2aθ,因此通过plugging θ值得到dL。

L的最小值是当dL对于某个θ变为零时。

目标现在变为找到给出dL= 0的θ

如何选择α?

α通常取决于经验,应尝试使用几个值来找到使转换速度更快的值,但这里仍然存在一个问题,即参数的常数(稍后会详细介绍)。

考虑α= .9,L=θ²,并且值ɛ= .00001,它表示∆L应该多小就认为是0,

在迭代下降公式(θ₊1=θ-α.ΔL)之后,我们得到下表。

我们可以看到,为了使ΔL小于.00001,需要77次迭代,并且能够找到可接受的θ值。

它有点长,这是因为我们有一个常数α!

原因是即使我们接近最小值,我们也会采取相同的step,而实际上我们应该做的是使用较小的steps来重新调整下降。

示意性地,梯度下降正在执行类似下面的图形(PS。这不是准确的表示,但它给出了直觉)

然而,真正需要的是,当我们接近最小值时,我们必须调整我们的步长,以便确定最小值并避免绕过它。所以我们需要以下内容:

实现这一目标的一种方法是减少α,例如,每次迭代i计算一个因子f = 1 + (i/10),然后在梯度下降公式中将α除以f:

这种修改将给出一个大大改进的结果,我们达到一个解决方案只需8次迭代,如下表所示:

最后是一个python代码,它将计算任何损失函数的梯度下降,前提是函数dF(x)的导数是正确的

def dF(x): return 2*xa = .9def gradient_descent_constant_alpha(th, a, epsilon): i=1 deriv=dF(th) print(i,',', th, ', ', a, ', ', deriv) while abs(deriv) >= epsilon: i+=1 th = th - a*deriv deriv = dF(th) print(i,',', th, ', ', a, ', ', deriv)def gradient_descent_adaptable_alpha(th, a, epsilon): i=1 n=1 deriv=dF(th) print(i,',', th, ', ', a, ', ', deriv) while abs(deriv) >= epsilon: i+=1 n = (i / 10) + 1 aa = a/n th = th - aa*deriv deriv = dF(th) print(i,',', th, ', ', aa, ', ', deriv)print('Gradient descent with constant alpha:')gradient_descent_constant_alpha(100, .9, .00001)print()print()print('Gradient descent with adaptable alpha:')gradient_descent_adaptable_alpha(100, .9, .00001)

结论

梯度下降是找到最小损失函数的便捷工具,它在深度学习领域非常有用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Logistic Regression
批/梯度下降与随机梯度下降算法 | 附论文下载及代码示例 | 丹方 | 解读技术
Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”
谈谈常见的迭代优化方法
随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
线性回归、梯度下降(Linear Regression、Gradient Descent)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服