当我们可以通过对每个参数求解通过偏微分获得的方程来对成本函数进行微分并找到参数,并找出成本函数最小的位置。另外我认为有可能找到导数为零的多个地方,因此我们可以检查所有这些地方并找到全局最小值
为什么要执行梯度下降?
当我们可以通过对每个参数求解通过偏微分获得的方程来对成本函数进行微分并找到参数,并找出成本函数最小的位置。另外我认为有可能找到导数为零的多个地方,因此我们可以检查所有这些地方并找到全局最小值
为什么要执行梯度下降?
不需要梯度下降。事实证明,梯度下降通常是一种非常低效的优化算法!对于迭代方法,通常可以找到比梯度最陡的地方更好的移动方向。
不过,这有点颠倒了。你的问题真的应该是,“为什么我们需要迭代方法?” 例如。如果问题是凸的,Slater 条件成立,并且一阶条件是最优的充分必要条件,为什么不直接求解?也就是说,当解可以描述为方程组的解时,为什么不简单地求解系统呢?答案是:
即使在线性模型的情况下,你有一个解析解,最好还是使用这样的迭代求解器。
例如,如果我们考虑线性回归,显式解决方案需要反转一个复杂度为的矩阵。这在大数据的背景下变得令人望而却步。
此外,机器学习中的很多问题都是凸的,因此使用梯度可以确保我们达到极值。
正如已经指出的那样,仍然存在相关的非凸问题,例如神经网络,其中梯度方法(反向传播)提供了有效的求解器。同样,这与深度学习的情况特别相关。
在微积分 101 中,我们学习了如何使用“分析方法”优化函数:我们只需要得到成本函数的导数并将导数设置为 0,然后求解方程。这真的是一个玩具问题,在现实世界中几乎不会发生。
在现实世界中,许多成本函数并非处处都有导数(此外,成本函数可能是离散的,根本没有任何导数)。此外,即使你可以计算导数,你也不能只解析解方程(例如,考虑如何解分析?我可以告诉你数值答案是,但不知道解析解)。我们必须使用一些数值方法(检查为什么在多项式情况下Abel Ruffin Theorem)。
迭代方法非常好用,而且非常易于理解。假设您想优化一个函数,而不是求解方程并得到答案,而是尝试在足够的迭代后通过迭代次数/步数来改进答案,您将得到接近“真实答案”的答案。假设你使用微积分最小化,你直接得到,但使用数值方法,你可能得到。
现在,了解这些迭代方法是如何工作的很重要。关键概念是知道如何更新输入参数以获得更好的解决方案。假设你想最小化(请注意,此成本函数并非处处可微,但在“大多数地方”具有可微分,这对我们来说已经足够了,因为我们知道如何在“大多数地方”进行更新。),目前你在,成本为,现在您要更新以使目标函数更小。你会怎么做?你可能会说我想同时减少,但为什么呢?实际上,您是隐式使用 梯度“改变少量会发生什么”的概念。. 在中,导数是,所以负梯度乘以学习率是,所以我们将解决方案从更新为具有更好的成本。
您提到的方法只能用于求解一组线性方程,例如在线性回归的情况下,但是说用于求解一组非线性方程,例如具有 sigmoid 激活的神经网络,梯度下降是一种方法去。因此梯度下降是一种更通用的方法。
即使对于线性方程组,由一组线性方程组给出的矩阵的大小也是巨大的,并且很难限制内存需求。