Algorithms

使用歸一化梯度和梯度的區別

  • February 10, 2012

在梯度下降算法的一般設置中,我們有在哪裡是當前點,是步長和是在.

我在一些算法中看到,人們使用歸一化梯度而不是梯度。我想知道使用歸一化漸變和簡單漸變有什麼區別。

在梯度下降算法中,該算法通過尋找可以找到最優解的方向來進行。最佳方向原來是梯度。但是,由於我們只對方向感興趣,而不一定對沿該方向移動多遠感興趣,因此我們通常對梯度的大小不感興趣。因此,歸一化梯度足以滿足我們的目的,我們讓指示我們想要在計算的方向上移動多遠。但是,如果您使用非歸一化梯度下降,那麼在任何點,您在最佳方向上移動的距離由梯度的大小決定(本質上由目標函數的表面決定,即陡峭表面上的點將具有高幅度,而在相當平坦的表面上的點將具有低幅度)。

從上面,您可能已經意識到梯度的歸一化是您獲得的額外控制能力(它是否有用取決於您的特定應用程序)。我上面的意思是:

1]如果你想確保你的算法在每次迭代中以固定的步長移動,那麼你可能想要使用固定的歸一化梯度下降.

2]如果您想確保您的算法以您精確指定的步長移動,那麼您可能希望再次使用歸一化梯度下降和您的特定函數將步長編碼為.

3] 如果你想讓梯度的大小決定步長,那麼你將使用非歸一化梯度下降。還有其他幾種變體,例如您可以讓梯度的大小決定步長,但是您可以對其設置上限等等。

現在,步長顯然對收斂速度和穩定性有影響。上述哪個步長最有效完全取決於您的應用程序(即目標函數)。在某些情況下,可以分析收斂速度、穩定性和步長之間的關係。然後,這種關係可能會提示您是否要使用歸一化或非歸一化梯度下降。

總而言之,歸一化和非歸一化梯度下降之間沒有區別(就算法背後的理論而言)。但是,它對收斂速度和穩定性有實際影響。選擇其中一個完全基於手頭的應用程序/目標。

引用自:https://stats.stackexchange.com/questions/22568

comments powered by Disqus