1. 程式人生 > >梯度法引數更新與Dropout

梯度法引數更新與Dropout

邏輯清晰:梯度法引數更新與Dropout

 

一、梯度法思想

梯度法思想的三要素:下降出發點、下降方向、下降步長。

機器學習中常用的權重更新表示式為:

邏輯清晰:梯度法引數更新與Dropout

 

這裡的λ就是學習率,本文從這個式子出發來把機器學習中的各種"梯度"下降法闡釋清楚。 機器學習目標函式,一般都是凸函式,什麼叫凸函式?限於篇幅,我們不做很深的展開,在這兒我們做一個形象的比喻,凸函式求解問題,可以把目標損失函式想象成一口鍋,來找到這個鍋的鍋底。非常直觀的想法就是,我們沿著初始某個點的函式的梯度方向往下走(即梯度下降)。在這兒,我們再作個形象的類比,如果把這個走法類比為力,那麼完整的三要素就是步長(走多少)、方向、出發點,這樣形象的比喻,讓我們對梯度問題的解決豁然開朗,出發點很重要,是初始化時重點要考慮的,而方向、步長就是關鍵。

事實上不同梯度的不同就在於這兩點的不同!

梯度方向是

邏輯清晰:梯度法引數更新與Dropout

 

步長設為常數Δ,這時就會發現,如果用

邏輯清晰:梯度法引數更新與Dropout

 

在梯度較大的時候,離最優解比較遠,W的更新比較快;然而到了梯度較小的時候,也就是較靠近最優解的時候,W的更新竟然也保持著跟原來一樣的速率,這樣會導致W很容易更新過度反而遠離了最優解,進而出現在最優解附近來回震盪。所以,既然在遠離最優解的時候梯度大,在靠近最優解的時候梯度小,我們讓步長隨著這個律動,於是我我們就用λ|W|來代替Δ,最後得到了我們熟悉的式子

邏輯清晰:梯度法引數更新與Dropout

 

所以說這時的λ是隨著坡度的陡緩而變化的,別看它是個常數。

2、 全量梯度下降法(Batch gradient descent)

邏輯清晰:梯度法引數更新與Dropout

 

全量梯度下降法每次學習都使用整個訓練集,因此每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點,凸函式收斂於全域性極值點,非凸函式可能會收斂於區域性極值點,缺陷就是學習時間太長,消耗大量記憶體。

第二、隨機梯度下降法(Stochastic Gradient Descent)

邏輯清晰:梯度法引數更新與Dropout

 

SGD一輪迭代只用一條隨機選取的資料,儘管SGD的迭代次數比BGD大很多,但一次學習時間非常快。

SGD的缺點在於每次更新可能並不會按照正確的方向進行,引數更新具有高方差特性,從而導致損失函式劇烈波動。不過,如果目標函式有盆地區域,SGD會使優化的方向從當前的區域性極小值點跳到另一個更好的區域性極小值點,這樣對於非凸函式,可能最終收斂於一個較好的區域性極值點,甚至全域性極值點。

缺點是,出現損失函式波動,無法判斷是否收斂。

邏輯清晰:梯度法引數更新與Dropout

 

第三、小批量梯度下降法(Mini-Batch Gradient Descent)

SGD相比BGD收斂速度快,然而,它也的缺點,那就是收斂時浮動,不穩定,在最優解附近波動,難以判斷是否已經收斂。這時折中的演算法小批量梯度下降法,MBGD就產生了,道理很簡單,SGD太極端,一次一條,為何不多幾條?MBGD就是用一次迭代多條資料的方法。

邏輯清晰:梯度法引數更新與Dropout

 

並且如果Batch Size選擇合理,不僅收斂速度比SGD更快、更穩定,而且在最優解附近的跳動也不會很大,甚至得到比Batch Gradient Descent 更好的解。這樣就綜合了SGD和Batch Gradient Descent 的優點,同時弱化了缺點。總之,Mini-Batch比SGD和Batch Gradient Descent都好。

第四、Momentum梯度下降法

邏輯清晰:梯度法引數更新與Dropout

 

SGD、BSGD兩種改進方法都存在不同程度的震盪,如何避免震盪?或者說震盪是怎麼產生的?震盪,從可視圖表現來看,就是頻繁更改方向,所以,如果能夠把之前下降的方向考量進來,那麼將會減少振盪。 下面推導動量下降法。

在普通的梯度下降法W -= V中,每次W的更新量V為V = dW * λ;

當使用衝量時,V考慮為本次的梯度下降量與部分上次更新量的向量和,即-dW*λ與上次x的更新量V乘以一個介於[0, 1]的係數momemtum的和,即:

V = dW * λ + V*momemtum。

  • 當本次梯度下降方向與上次更新量的方向相同時,上次的更新量能夠對本次的搜尋起到一個正向加速的作用。
  • 當本次梯度下降方向與上次更新量的方向相反時,上次的更新量能夠對本次的搜尋起到一個減速的作用。

下面兩個圖,第一圖是沒有動量的梯度下降法,第二圖是有動量的梯度下降法,很明顯減少了震盪。

邏輯清晰:梯度法引數更新與Dropout

 

邏輯清晰:梯度法引數更新與Dropout

 

既減少震盪,又大方向不變(本次梯度下降方向),從而保證了效率和正確的收斂。

第五、NAG梯度下降法

NAG(Nesterov Accelerated Gradient)不僅僅把SGD梯度下降以前的方向考慮,還將Momentum梯度變化的幅度也考慮了進來。

邏輯清晰:梯度法引數更新與Dropout

 

邏輯清晰:梯度法引數更新與Dropout

 

上圖是Momentum的優化軌跡,下圖是NAG的優化軌跡

邏輯清晰:梯度法引數更新與Dropout

 

這個圖來源於 G. Hinton's的文章,網上對這個圖的解釋大都來源於《An overview of gradient descent optimizationalgorithms》中文翻譯,其實並沒有真正講解清楚。本文嚴格按照原意解釋一下:

Momentum梯度法首先計算的是當前的梯度(圖中的小藍色向量)然後沿著更新的累積梯度的方向來一個大的跳躍(圖中大藍色向量),而NAG梯度法首先沿著先前的累積梯度方向(棕色向量)實現一個大的跳躍,然後加上一個小的按照動量梯度法計算的當前梯度(上圖紅色向量)進行修正得到上圖綠色的向量。 此處我丟擲一個問題,上圖為什麼畫了兩個三角形?如果能理解第二個向量三解形的意義,才能正在理解NAG。注意第二個向量三角形的棕色向量與前一個的綠色向量方向一致,因為上一個向量三角形的結果是綠色向量,而棕色代表的是先前的累積梯度,方向就應該和綠色的一樣。然後,再加上當前按照動量梯度法計算出的梯度,就得到第二個三角形的綠色向量。

給出公式表達:

邏輯清晰:梯度法引數更新與Dropout

 

我們先給出類似生活體驗的通俗的解釋:我們要讓演算法要前瞻性,提前看到前方的地形梯度,如果前面的梯度比當前位置的梯度大,那我就可以把步子邁得比原來大一些,如果前面的梯度比現在的梯度小,那我就可以把步子邁得小一些。這個大一些、小一些,都是相對於原來不看前方梯度、只看當前位置梯度的情況來說的。

NAG的另一個等效形式為(下文會詳細推導):

邏輯清晰:梯度法引數更新與Dropout

 

這個NAG的等效形式與Momentum的區別在於,本次更新方向多加了一個

邏輯清晰:梯度法引數更新與Dropout

 

注意到沒有,這項其實就是目標函式的二階導數!所以NAG本質上是多考慮了目標函式的二階導資訊,讀過《一篇中矣:徹底理解XGBoost!》一文的讀者,是不是覺得很面熟,二階導數再次發揮作用!其實所謂"往前看"的說法,在牛頓法這樣的二階方法中經常提到,形象說"往前看",數學思維則是利用了目標函式的二階導資訊。

現在我們由NAG原始形式來推導NAG的等效形式:

邏輯清晰:梯度法引數更新與Dropout

 

為了出現二階形式,繼續展開:

邏輯清晰:梯度法引數更新與Dropout

 

我們觀察這個等式,並對應原始公式:

邏輯清晰:梯度法引數更新與Dropout

 

這個等式相當於引數在更新量更新基礎上的更新,所以為了看上去更有意義,對應:

邏輯清晰:梯度法引數更新與Dropout

 

的形式,我們作如下記號:

邏輯清晰:梯度法引數更新與Dropout

 

我們在猜想一個形式:

邏輯清晰:梯度法引數更新與Dropout

 

則可作記號:

邏輯清晰:梯度法引數更新與Dropout

 

也就是有:

邏輯清晰:梯度法引數更新與Dropout

 

展開:

邏輯清晰:梯度法引數更新與Dropout

 

邏輯清晰:梯度法引數更新與Dropout

 

到此為止NAG證明就結束,邏輯、意義非常完美!這就是數學之美!

限於篇幅其他非常重要的梯度法AdaGrad、AdaDelta、RMSProp、Adam等在後續文章在詳加闡述。

正則化方法:Dropout

1、dropout 如何工作

典型的神經網路其訓練流程是將輸入通過網路進行正向傳導,然後將誤差進行反向傳播。Dropout就是針對這一過程之中,隨機地刪除隱藏層的部分單元,進行上述過程。 步驟如下:

  • 隨機刪除網路中的一些隱藏神經元,保持輸入輸出神經元不變
  • 將輸入通過修改後的網路進行前向傳播,然後將誤差通過修改後的網路進行反向傳播
  • 對於另外一批的訓練樣本,重複上述操作

訓練階段使用Dropout,測試階段把Dropout遮蔽。

所以,在訓練的時候為每個存活下來的神經元做同取樣比例的放大,或者,另外一種選擇就是把測試結果根據取樣比例縮小。

邏輯清晰:梯度法引數更新與Dropout

 

Dropout之所以具有正則化能力的兩個解釋:

  • 讓網路擁有冗餘的表示;
  • Dropout訓練一個大規模的網路組合

強迫網路擁有冗餘的表示:在每輪迭代中,總是隨機遮蔽一定比例的神經元,因此輸出並不知道它正在組合哪些特徵,比起沒有Dropout時過於專注於某些特徵(比如拿識別貓來說,過於專注於貓的眼睛),現在模型把專注力分散到每個特徵,使得這些特徵也能具備比較好的預測能力。由於原本具有很高權重的那些特徵現在被壓縮,達到了正則化的效果。 Dropout相當於模型平均、模型組合:看作是模型平均的一種,平均一個大量不同的網路。不同的網路在不同的情況下過擬合,但是共用一個損失函式,相當於同時進行了優化,取了平均;相比之前使用所有的資料在一個模型裡面訓練,Dropout相當於在訓練階段每次針對一批資料就生成一個獨特的小模型,然後再將這些模型組合起來的一種方法。我們在《透徹理解整合演算法及其思想》一文中對於整合模型的優勢有很好的闡述。

減少複雜依賴性:由於每次用輸入網路的樣本進行權值更新時,隱含節點都是以一定概率隨機出現,因此不能保證某兩個隱含節點每次都同時出現,這樣就減少了神經元之間的依賴性,即每個神經元不能依賴於某幾個其他的神經元(指層與層之間相連線的神經元),阻止了某些特徵僅在有其他特徵存在才有效的情況,減少神經元之間複雜的依賴性。