首先,這不是找到最小值,而是極小值,有時候甚至是鞍點。其實梯度下降只是不動點(fixed point)迭代的一種,梯度下降找到的其實是不動點,而不是直接尋找極小值。在可導的區間上,梯度下降迭代的不動點(梯度為0的點)有三類——極大值,極小值,鞍點。對於梯度下降來說,極大值是不穩定的(再小得誤差都可能導致迭代從不動點上逃逸,並且,除非你初始值就是極大值,否則迭代過程幾乎不可能到達極大值),而鞍點不穩定性次之(在某側的誤差會導致逃逸),而極小值是梯度下降過程最穩定的不動點。迭代過程可以參照下雨的時候水的流向,水總是會聚集在坑(極小值)裡面。並不是所有不動點迭代都是收斂的。對於梯度下降來說,梯度下降只是在點得足夠小的鄰域內,負梯度方向讓函式值減小,如果你的引數不合適,迭代過程總是超過了這個足夠小的鄰域,那迭代可能會發散。如果函式是凸的,那麼梯度下降會收斂到最小值(因為只有一個極小值,它就是最小值)。對於一般問題來說,梯度下降能找到最小值是個機率事件。雖然有很多最佳化方法,但它仍然是個機率事件。有很多機率方法,試圖讓你從不穩定的不動點附近“跳出去”(比如,對迭代的過程增加一些擾動),這樣得到的不動點往往更加穩定。通常,這些穩定的不動點即便不是最優值,性質也足夠好了:) 所以,在很多時候我們也並不是必須要找到最優值。~ ~ ~PS:大部分迭代演算法其實都是不動點迭代。構造這個過程的精髓在於——解就是不動點,但不動點未必是解。對於某些特定的問題,不動點就是解(梯度下降之於凸函式)其實我覺得自己說了一些廢話,因為迭代的過程,如果收斂,那麼結果必然是到了不動點。所以所有能收斂的迭代,都是不動點迭代。你需要關注的是:這些不動點是什麼?它們都是解嗎?它們是不是在迭代過程中足夠穩定?
首先,這不是找到最小值,而是極小值,有時候甚至是鞍點。其實梯度下降只是不動點(fixed point)迭代的一種,梯度下降找到的其實是不動點,而不是直接尋找極小值。在可導的區間上,梯度下降迭代的不動點(梯度為0的點)有三類——極大值,極小值,鞍點。對於梯度下降來說,極大值是不穩定的(再小得誤差都可能導致迭代從不動點上逃逸,並且,除非你初始值就是極大值,否則迭代過程幾乎不可能到達極大值),而鞍點不穩定性次之(在某側的誤差會導致逃逸),而極小值是梯度下降過程最穩定的不動點。迭代過程可以參照下雨的時候水的流向,水總是會聚集在坑(極小值)裡面。並不是所有不動點迭代都是收斂的。對於梯度下降來說,梯度下降只是在點得足夠小的鄰域內,負梯度方向讓函式值減小,如果你的引數不合適,迭代過程總是超過了這個足夠小的鄰域,那迭代可能會發散。如果函式是凸的,那麼梯度下降會收斂到最小值(因為只有一個極小值,它就是最小值)。對於一般問題來說,梯度下降能找到最小值是個機率事件。雖然有很多最佳化方法,但它仍然是個機率事件。有很多機率方法,試圖讓你從不穩定的不動點附近“跳出去”(比如,對迭代的過程增加一些擾動),這樣得到的不動點往往更加穩定。通常,這些穩定的不動點即便不是最優值,性質也足夠好了:) 所以,在很多時候我們也並不是必須要找到最優值。~ ~ ~PS:大部分迭代演算法其實都是不動點迭代。構造這個過程的精髓在於——解就是不動點,但不動點未必是解。對於某些特定的問題,不動點就是解(梯度下降之於凸函式)其實我覺得自己說了一些廢話,因為迭代的過程,如果收斂,那麼結果必然是到了不動點。所以所有能收斂的迭代,都是不動點迭代。你需要關注的是:這些不動點是什麼?它們都是解嗎?它們是不是在迭代過程中足夠穩定?