我想知道梯度下降是否是 Adam、Adagrad、RMSProp 和其他几个优化器等优化器中使用的主要算法。
梯度下降是每个优化器的核心吗?
不,梯度下降用于使用梯度作为其步进运动的基础的优化算法。Adam
, Adagrad
, 并且RMSProp
都使用某种形式的梯度下降,但是它们并不构成每个优化器。粒子群优化和遗传算法等进化算法受自然现象的启发,不使用梯度。其他算法,例如贝叶斯优化,从统计中汲取灵感。
还有一些算法结合了进化和基于梯度的优化的概念。
基于非导数的优化算法在不规则的非凸成本函数、不可微分的成本函数或具有不同左或右导数的成本函数中特别有用。
了解为什么可以选择基于非导数的优化算法。看看Rastrigin 基准函数。基于梯度的优化不太适合优化具有如此多局部最小值的函数。
根据标题:没有
。只有特定类型的优化器是基于梯度下降的。一个直接的反例是当优化在梯度未定义的离散空间上时。
根据身体:
是的。Adam、Adagrad、RMSProp 和其他类似的优化器(Nesterov、Nadam 等)都在尝试为梯度下降提出自适应步长(学习率),以在不牺牲性能的情况下提高收敛速度(即导致更差的局部最小值/最大限度)。
值得注意的是,还有牛顿方法和类似的准牛顿方法,它们适用于损失函数的二阶导数(梯度下降适用于一阶导数)。由于实际问题中的模型参数较多,这些方法已经失去了对梯度下降的速度-可扩展性权衡。
一些额外的注释
损失函数的形状取决于模型参数和数据,因此选择最佳方法始终取决于任务,需要反复试验。
梯度下降的随机部分是通过使用一批数据而不是完整数据来实现的。该技术与所有提到的方法并行,这意味着它们都可以是随机的(使用一批数据)或确定性的(使用整个数据)。
当参数的某些区域不可行(无效,不允许)时使用投影梯度下降,因此当参数进入不可行区域时,我们将参数带回(投影)到可行区域。例如,假设我们只允许, 当参数变为 ,我们把它带回 , 或者 ,或其他一些可行点,具体取决于轨迹和具体方法。这种技术也与上述方法并行,我们可以预测随机亚当。
这个问题的答案可能是否定的。原因很简单,因为有许多可用的优化算法,但选择一种很大程度上取决于上下文和优化的时间。例如,遗传算法是一种众所周知的优化方法,其中没有任何梯度下降。在某些情况下还有其他方法,例如回溯。它们都可以使用,而不是逐步利用梯度下降。
另一方面,对于回归之类的任务,您可以找到近似形式来解决问题以找到极值,但关键是根据特征空间和输入的数量,您可以选择近似形式方程或梯度下降以减少计算次数。
虽然有很多优化算法,但由于多种原因,在神经网络中基于梯度下降的方法被更多地使用。首先,它们非常快。在深度学习中,您必须提供大量数据,以至于它们无法同时加载到内存中。因此,您必须应用批量梯度方法进行优化。这是一个有点统计的东西,但您可以考虑到您带到网络的每个样本都可以具有与真实数据大致相似的分布,并且可以具有足够的代表性来找到一个梯度,该梯度可以接近成本函数的真实梯度,这应该使用手头的所有数据构建。
其次,使用矩阵及其逆求极值的复杂度是 对于一个简单的回归任务,可以使用它找到参数 . 事实证明,简单的基于梯度的方法可以具有更好的性能。还应该提到的是,在前一种情况下,您必须将数据同时带到内存中,这对于处理大数据任务的场合是不可能的。
第三,有些优化问题不一定有近似解。逻辑回归就是其中之一。
好吧,您选择了用于神经网络的优化器,这些优化器确实使用基于梯度的算法。大多数时候,基于梯度的算法用于神经网络。这是为什么?那么,您更愿意在知道曲线斜率的情况下还是不知道它的情况下尝试找到最小值?当您无法计算梯度时,您将退回到无导数优化。话虽如此,在某些情况下,即使您有关于渐变的信息,最好还是使用无渐变的方法。这通常是具有大量局部最小值的函数的情况。进化策略和遗传算法等基于种群的算法在这里占据上风。还有组合优化的分支,其中使用了一套完全不同的工具。