一文看懂深度學習優化方法 梯度下降

2021-08-21 11:37:36 字數 3308 閱讀 6481

實質上,通過訓練神經網路,我們是在最小化乙個損失函式。這個損失函式的值衡量了我們網路的效能在給定資料集上離完美還差多少。

x 軸和 y 軸分別代表兩個權值,z 軸代表在給定兩個特定權值的情況下損失函式的值。我們的目標就是找到損失最小的特定權值,這個點被稱作損失函式的最小值點。

你一開始就隨機初始化了權值,所以你的神經網路可能會表現得像喝醉了的你一樣,把貓的歸類為人。這樣的情況對應的是損失函式輪廓中的 a 點,此處的網路效能十分差,因此損失也很高。

我們需要尋找一種能夠導航到「谷底」b 點處的方法,這裡的損失函式值最小。那麼我們要怎麼做呢?

要想理解這個概念,請看下圖。在曲面的任何一點,我們都能夠定義乙個與其相切的平面。在更高維度,我們總能夠定義乙個超平面,但在這裡我們還是堅持使用 3 維空間。然後,在這個平面上有無限個方向。其中,準確來說只有乙個使函式上公升最快的方向,這個方向由梯度給出,與之相反的方向就是下降最快的方向。這就是演算法名稱的**,我們沿著梯度的方向進行下降,所以就叫做梯度下降。

如果移動得太快,我們可能越過最小值,沿著「山谷」的山脊蹦蹦跳跳,永遠都不可能到達最小值。如果移動太慢,訓練可能花費太長的時間,根本就不可行,此外太慢的學習率也容易讓演算法陷入極小值,我們會在本文後面的部分討論。

一旦有了梯度和學習率,我們就開始行動,然後在最終到達的任何位置重新計算梯度,然後重複這個過程。

梯度的方向告訴我們哪個方向上公升的最快,它的幅值則表示最陡峭的上公升/下降有多陡。所以,在最小值的地方,曲面輪廓幾乎是平坦的,我們期望得到幾乎為零的梯度。事實上,最小值點的梯度就是 0。

正如上面的動畫所描述的,梯度下降並不涉及在 z 軸方向上的移動。因為僅由 x 軸和 y 軸方向描述的權重是自由引數。實際得到的軌跡是定義在 x-y 平面中的,如下圖所示:

如果想象向量對你來說有一些難度,那麼,幾乎同樣的更新規則同時適用於網路的每乙個權重。唯一的變化是,我們現在對每個權重單獨執行更新,上述方程中的梯度被替換為梯度向量沿著特定權重方向的投影。

理論上而言,這樣很好,因為我們希望當接近乙個最小值的時候演算法能夠採取更小的步長。步長太大有可能導致跳過最小值,並且在最小值脊梁之間來回跳動。

梯度下降中常用的乙個技術是採用可變的學習率,而不是固定的學習率。初始時,我們可以使用較大的學習率。但是到了後來,隨著接近最小值點,我們需要慢下來。實現這種策略的一種方法就是模擬退火,也就是衰減的學習率。在這種情況下,學習率在股東能夠數量的迭代次數中逐漸減小。

首先,神經網路是複雜的函式,我們在假設的函式中引入了大量的非線性變換。得到的損失函式看起來並不太好,同樣只有乙個我們可以收斂到的最小值點。事實上,這種理想的損失函式被稱作「凸函式」(總是向上彎曲的函式),而深度網路的損失函式很難是凸的。實際上,它們很可能是這樣的:

梯度下降是由梯度驅動的,它在任何乙個極小值點都會為 0。區域性極小值之所以被稱作區域性極小值,是因為損失函式在該點的值在區域性區域是最小的。而全域性最小值被稱作全域性最小值,是因為在損失函式在該點的值在整個區域最小。

更糟糕的是,由於我們考慮的那個 3 維損失函式輪廓在實際中是從沒有發生過的,損失函式的輪廓可能更加複雜。在實踐中,我們的神經網路大約會有 10 億個權重,給我們乙個大約(10 億+1)維的函式。

事實上,很難想象乙個如此多維度的函式是什麼樣子的。然而,深度學習領域如今人才濟濟,人們已經想出了以 3d 的形式視覺化損失函式輪廓的方法。最近的一篇**提出了一種名為「filter normalization」的技術,該項技術解釋了超出本文範圍的內容。然而,它確實讓我們看到了我們所處理的損失函式的潛在複雜性。例如,下圖是 vgg-56 在 cifar-10 資料集上構建的損失函式的 3d 架構。

鞍點得名於它的形狀類似於馬鞍。儘管它在 x 方向上是乙個最小值點,但是它在另乙個方向上是區域性最大值點,並且,如果它沿著 x 方向變得更平坦的話,梯度下降會在 x 軸振盪並且不能繼續根據 y 軸下降,這就會給我們一種已經收斂到最小值點的錯覺。

到目前為止,我們一直使用通過對訓練集上的所有可能樣本的損失值求和得到的損失函式進行梯度下降。如果我們進入區域性極小值或者鞍點,我們就會被困住。幫助梯度下降擺脫這些困境的一種方法就是隨機梯度下降。

在隨機梯度下降中,我們不是通過對所有損失函式求和來計算損失函式的梯度,而是通過計算僅僅乙個隨機抽樣(不替換)例子的損失梯度來採取步驟。隨機梯度下降中的每個樣本都是隨機選擇的,相比之下,早期方法在乙個批量中處理所有的樣本,因此稱為批量梯度下降。

更新規則也做了相應的改變。

也就是說,儘管「所有樣本損失函式」的梯度可能把我們推向乙個區域性極小值,或者使我們困在乙個鞍點,但是這種「乙個樣本損失函式」的梯度可能指向乙個不同的方向,並有可能幫助我們避開這些情況。

「所有樣本損失函式」的乙個區域性最小值點也應該考慮在內。如果我們採用批量梯度下降,那麼我們會被困在這裡,因為這裡的梯度始終會指向區域性最小值點。但是,如果我們使用隨機梯度下降,這個點可能不在「乙個樣本損失函式」輪廓的區域性最小值周圍,這使得我們遠離區域性最小值點。

即使我們陷在「乙個樣本損失函式」的區域性最小值點,下乙個隨機取樣點的「乙個樣本損失函式」的損失情況也可能不同,從而使我們能夠繼續移動。

當它收斂的時候,它會收斂到幾乎所有「乙個樣本損失函式」的最小值。也有經驗顯示,鞍點是極不穩定的,輕輕一推就可以擺脫。

所以,這是否意味著在實踐中應該使用這種乙個樣本的隨機梯度下降呢?

因此,我們所做的是乙個平衡的行為。我們使用固定數量(例如 16、32 或者 128 個)的樣本形成乙個 mini-batch 來構建損失函式,而不是使用整個資料集或者單個樣本。這個詞與一次處理所有樣本形成了對比,它通常被稱作批梯度下降。選擇 mini-batch 的大小是為了保證我們有足夠的隨機性擺脫區域性最小值,同時可以利用足夠的平行計算力。

我為什麼說好?是因為你仍可能陷入由不穩定的訓練樣本導致的區域性極小值中。好的區域性極小值,或者文獻中提到的最優區域性極小值,在給定神經網路的高維損失函式中也可能是大量存在的。

你可能還會注意到,很多神經網路都在執行分類任務。如果乙個區域性極小值對應著 0.7—0.8 的正確標籤分數,而全域性最小值能夠產生 0.95-0.98 的正確標籤分數,那麼兩者輸出的**標籤結果將是相同的。

最小值的乙個理想屬性是它應該在平坦的一面。為什麼?因為平坦的最小值很容易收斂到,而且越過最小值或者在最小值的脊梁之間跳躍的可能性更小。

更重要的是,我們期望測試集的損失曲面與我們訓練的訓練集的損失曲面略有不同。對處於平坦又較寬處的極小值,由於這種變化,損失不會有太大變化,但處於相對較窄處的極小值不是這樣。我們要指出的一點是,更平坦處的最小值能夠更好地泛化,因此是可取的。

使用較快的學習率也有助於我們在訓練中更早地跳過一些區域性極小值。

人們也把早停和學習率衰減結合起來,在迭代 10 次後損失函式沒有改善的情況下學習率開始衰減,最終在學習率低於某個確定的閾值時停止。

近年來,迴圈學習率變得流行起來,在迴圈學習率中,學習率是緩慢增加的,然後緩慢減小,以一種迴圈的形式持續著。

余弦退火重啟組合

隨機加權平均技術

深度學習優化方法 AdaGrad 梯度下降

梯度下降演算法 隨機梯度下降演算法 sgd 小批量梯度下降演算法 mini batch sgd 動量法 momentum nesterov動量法有乙個共同的特點是 對於每乙個引數都用相同的學習率進行更新。但是在實際應用中,各個引數的重要性肯定是不一樣的,所以我們對於不同的引數要動態的採取不同的學習率...

深度 一文看懂「網際網路 」智慧型能源

網際網路 智慧型能源已經是國家力推的能源發展方向。對這兩個概念的人士和梳理很有必要,而能源行業怎樣將網際網路的優勢更好地運用到產業中來,也成為目前必須認真研究解決的問題。網際網路 的大發展與產業公升級的機會相遇時,中國能源行業如何藉機公升級,如何落地執行,是需要認真研究的問題。一 網際網路 智慧型能...

一文讀懂深度學習時序分析

作者 prakhar ganesh 編譯 安然 圖靈topia 近日,發表在 datascience 上的一篇文章,使用深度學習方法,從資料處理 迴圈網路 rnn上的lstm cnn lstms等方面介紹了時間序列分析,同時解釋了時間序列的概念以及為什麼選擇深度學習的方法等問題。什麼是時間序列分析?...