在梯度下降算法的一般设置中,我们有在哪里是当前点,是步长和是在.
我在一些算法中看到,人们使用归一化梯度而不是梯度。我想知道使用归一化渐变和简单渐变有什么区别。
在梯度下降算法的一般设置中,我们有在哪里是当前点,是步长和是在.
我在一些算法中看到,人们使用归一化梯度而不是梯度。我想知道使用归一化渐变和简单渐变有什么区别。
在梯度下降算法中,该算法通过寻找可以找到最优解的方向来进行。最佳方向原来是梯度。但是,由于我们只对方向感兴趣,而不一定对沿该方向移动多远感兴趣,因此我们通常对梯度的大小不感兴趣。因此,归一化梯度足以满足我们的目的,我们让指示我们想要在计算的方向上移动多远。但是,如果您使用非归一化梯度下降,那么在任何点,您在最佳方向上移动的距离由梯度的大小决定(本质上由目标函数的表面决定,即陡峭表面上的点将具有高幅度,而在相当平坦的表面上的点将具有低幅度)。
从上面,您可能已经意识到梯度的归一化是您获得的额外控制能力(它是否有用取决于您的特定应用程序)。我上面的意思是:
1]如果你想确保你的算法在每次迭代中以固定的步长移动,那么你可能想要使用固定的归一化梯度下降.
2]如果您想确保您的算法以您精确指定的步长移动,那么您可能希望再次使用归一化梯度下降和您的特定函数将步长编码为.
3] 如果你想让梯度的大小决定步长,那么你将使用非归一化梯度下降。还有其他几种变体,例如您可以让梯度的大小决定步长,但是您可以对其设置上限等等。
现在,步长显然对收敛速度和稳定性有影响。上述哪个步长最有效完全取决于您的应用程序(即目标函数)。在某些情况下,可以分析收敛速度、稳定性和步长之间的关系。然后,这种关系可能会提示您是否要使用归一化或非归一化梯度下降。
总而言之,归一化和非归一化梯度下降之间没有区别(就算法背后的理论而言)。但是,它对收敛速度和稳定性有实际影响。选择其中一个完全基于手头的应用程序/目标。
哪种方法收敛速度更快取决于您的具体目标,通常我使用归一化梯度。为什么你可能想要这样做的一个很好的例子是一个简单的二次方程:. 在这种情况下,描述给定梯度下降轨迹(步长接近零)的 ODE 可以通过分析确定:. 因此,当您接近临界点时,梯度的范数会呈指数级快速下降。在这种情况下,通常最好在分钟内来回反弹几次,而不是非常缓慢地接近它。但总的来说,众所周知,一阶方法在关键点周围的收敛速度非常慢,因此如果您真的关心准确性,则不应该真正使用它们。如果您无法解析地计算目标的 Hessian 矩阵,您仍然可以对其进行近似(BFGS)。
真正重要的是如何被选中。如果步长的选择方式使乘以相同的梯度。