關於神經網絡的訓練與優化的一些想法。Thoughts about optimization & training in Neural Networks--back propagation & SGD

一個神經網絡是一個遵循連接原則級聯構成的函數逼近器(function approximation)。這個function將輸入x轉化成輸出y。以image classification爲例,x是圖片,y是labels。

對於一個神經網絡的訓練,是指通過trail-and-error來獲得網絡中所有參數w的最優值。當網絡中所有參數都取得最優值時,該網絡針對某個損失函數可以在給定樣本集上得到最低loss。

這個訓練,也即參數估計,的過程,就是一個目標函數爲minimize loss function的優化過程。解優化的工具有很多,針對凸優化和非凸優化又可進行分類。由於神經網絡的參數較多以及其強非線性,導致其所構成的優化問題往往非凸(non-convex optmization)。解這種非凸優化的工具就是gradient descent(GD).注意,我們之所以要“估計”參數,即approximate the optimal set of weights,而不是直接求解出這組參數(analytical solution:令loss funciton的導數函數(if convex)=0,求出所有wi),是因爲 it is too complex to find the perfect analytical solution of all w with all the samples. Thus we find approximated solutions by an (numerical solution) iterative process-----GD optmization.

GD是一個迭代循環,trail-and-error,試錯的過程。對參數的估計和優化也是不積跬步無以至千里,每次update都是微調,積少成多。GD每次循環的操作有兩步:1. 計算網絡中每個參數對應的梯度2. 按照該參數負梯度的方向更新每個參數

  1. 其中第一步,即參數梯度的計算,用到的計數就是back propagation(BP)。BP就是以loss function爲起點,one operation at a time地依據複合函數求導的chian rule,將在起點處計算的gradient慢慢地反推流淌,流入網絡的每一個參數處。假設網絡中含有10K個參數w,那麼在BP時,每一個wi處計算得到的流入的梯度gi只是一個可正可負的實數;而這10K個gi組成的大vector G則是一個10K維的向量。這個向量定義在一個10K維的w(參數)空間。在這個空間中,損失函數L(w)作爲BP的梯度起點,會構成一個優化曲面(convex loss function會構成一個只有一個全局最優的碗形曲面,non-convex則會額外含有很多local optimal)。
  2. 在得到每個參數上的梯度gi後,即得到了梯度矩陣G,我們就進行第二步,參數更新。GD顧名思義,是沿着梯度下降的方向(即負梯度方向)進行每一次參數更新。梯度下降的幾何解釋就是在Loss function定義在w空間的曲面上,在某一點沿着該點梯度下降的方向微調一次。這個“點”從何而來呢?由於是10K維參數空間中的點。那麼一個點就對應一個10K vector,這個vector就是在此次update開始時我們網絡所有參數wi的現狀,也就此刻我們在空間中所處的位置。因此,10K的梯度vector G就指引了在10K空間中的這個點下降的方向。10K對10K,樂哉。

好,綜上,我們瞭解了BP與GD的關係:GD是一個優化算法,BP是一種梯度計算流程。在神經網絡的訓練中,BP是GD中的一個步驟。

那麼爲什麼BP適用於在神經網絡ANN中計算gradient呢?這是因爲ANN的連接屬性所構成的acyclic graph很適合與chain rule的實施。

接下來,介紹一下GD的兩大熱門問題:

1. GD的分類;    2. GD第二步,即參數update的不同策略(即不同優化器)。

1. GD的分類:依據每次BP時,BP起點處(即loss function)計算梯度所依據的樣本數量的不同而分類。

GD分爲Batch GD(BGD),Stochastic GD(SGD),還有Mini-batch GD(MBGD)。在神經網絡通過GD進行訓練時還會牽扯到的概念包括:

  • epoch(把訓練集中所有的樣本都遍歷一遍算是完成一個epoch,可以理解爲訓練集上的一輪);
  • batch size(一個mini-batch中隨機採樣多少個樣本);
  • iteration,itrs(完成一個mini-batch的訓練即完成了一個iteration。一個epoch包含多個iteration)。
  1. Batch GD:用整個訓練集中的所有樣本各自計算所得的loss求平均,並依據此平均值計算BP gradient的起點來進行一次反傳update;一個epoch只是一次update,更新太慢,參數update不夠頻繁,不符合少量多次的原則。而且計算所得的gradient estiamte的值太過保守,那些少量但是難的sample所產生的大的畸變的gradient,被無情地average掉了,所以hard sample的特殊貢獻被抹殺了。然而,這些hard sample纔是最應該被着力update的東西(關於此,有專門的focal loss等hard smaple mining技術)。另外,由於所得梯度很平庸無奇,所以在local optiam的脫困能力不佳。
  2. Stochastic GD:隨機選擇訓練集中的一個樣本計算loss,並依據此平均值計算BP的graident起點進行一次反傳update;一個epoch會進行N次update,N是訓練集大小。把每個sample的個性無限放大。讓每個sample可以獨立地按照自己的loss結果取更新參數,讓網絡學會善待自己,但某些時候這也就產生了noisy gradient,因爲有些bad sample並不有助於網絡訓練。這時所得梯度有很強的fluctuation,增強了local optima的脫困能力,但是有可能出現在optima的oscillation。
  3. Mini-batch GD:隨機選擇batch size個樣本,分別計算loss後取平均,並依據此平均值計算BP的gradient的起點來進行一次反傳update;一個epoch進行N/batch size次update。取上述兩家之長。

                                                     

上圖中藍線是BGD優化迭代的過程,紅線是SGD。可見BGD更穩健而SGD更躁動。

注意,無論是何種GD,即無論是用整個training set的全部samples,還是用一個batch的sample,還是隻用一個sample,GD都是用BP的手段在每次update時獲得了一個網絡中梯度的estimates(gradient estimates)。這就反映了神經網絡訓練的概率性。也即,BP,可以理解爲一個unbiased/biased gradeint estimator。

2. GD參數更新的不同策略:與GD分類無關,只關於learning rate\Deltaθ的計算有關。

GD的參數更新其實就是一條簡單的公式:\varepsilon是learning rate,g_{wi}^{t+1}是參數wi在第t+1次BP之後得到的它的gradient

                                                                              {\color{Red} }\theta_{wi}^{t+1}=\theta_{wi}^{t}+\Delta \theta{\color{Red} }_{wi}^{t+1}

                                                                               \Delta \theta_{wi}^{t+1}=-\varepsilon \cdot g_{wi}^{t+1}

有如下兩個思路來對上公式中的\Delta \theta_{wi}^{t+1}進行進化與改進:注意,兩個思路的底層核心都是accumulating gradient

(1). accumulating gradient directly for update--->Momentum, Nesterov; 

(2). accumulating gradient for adaptive learing rate--->AdaGrad, RMSProp, Adam(adam優化器是1和2的融合)

(1)Accumulating gradient directly for update:所有wi公用同樣的learnig rate\varepsilon

重點講Momentum,Nesterov略。

原始的GD update有幾個缺點導致converge比較慢:1。 在優化曲面的谷底時梯度較小,所以每次update幅度(step size)較小導致overall所需的update次數增多;2. 在SGD時,當gradient出現fluctuation時,多次update之間左右搖擺,互相損傷,友軍火力。

綜上,提出不是每次update僅僅依靠此次BP計算所得的gradient,而是用一個整合了的歷史積累gradient進行update:

                                                                         \Delta \theta_{wi}^{t+1}=v \leftarrow \alpha v-\varepsilon\cdot g_{wi}^{t+1}

公式中v(“velocity”)是對自身的一次exponentially decaying moving average of negative gradeints的計算。然後用v值直接update參數。α參數控制accumulating的力度,越大說明積累地越充分。往往α設定爲0.9。

                                                      

如上圖,每次momentum的update相當於是積累的gradient的update和本次計算所得gradient的update一次組合,可見綠線所示的組合update比其餘兩個的模長(step size)都要大,可以理解爲加快了參數更新

具體地,模長的變化爲:

                                                                         \varepsilon \left \| g \right \| \rightarrow \varepsilon \frac{\left \| g \right \|}{1-\alpha }

當α=0.9時,Momentum的每次update的step size是普通GD的10倍

(2)Accumulating gradient for adaptive learing rate.

weight即feature:針對不同的feature(即weight)採用不同的(縮小的)learning rate。在CNN中,一個conv filter就是一個學到的feature template,所以一組weight就對應一個feature。DNN中,一個weight就對應一個neuron,即一個feature。當某個weight在某次BP時gradient較大,說明其對應的這個feature在這個或這組sample上產生了較大作用(loss),所以應當有針對性地對這個feature(weight)進行精細優化調整。

               

weight = feature的理論直觀理解如上圖。左圖中曲面上梯度分佈均勻,表明各個weight(即空間的各個基上的分量)相等的重要性,因此在某個等梯度線上任何位置到到optima的距離相等,所以用相等的step size可以同時到達optima;右圖,某些weight分量上梯度較大,其他則較小,導致優化曲面不對稱。從同一個橢球面的長軸處(該方向weight分量的梯度較小)比短軸處(該處weight分量的梯度較大)到達optima的距離較遠,所以需要較大的step size;而短軸處則需要較小的learning rate,因爲此處自身的g就大,如果\varepsilon也很大易導致fluctuation

綜上,我們希望g大的weight分量的learning rate \varepsilon 相應減小。這就是adaptive learning rate的實質。具體地,learning rate按照g的平方減小。

AdaGrad:如下公式,r時accumulating factor over g的平方。

                                                                                         {\color{Red} r }= {\color{Red} r} + (g_{wi}^{t+1})^{{\color{Red} 2}}

                                                                           \Delta \theta _{wi}^{t+1}=-(\frac{1}{\delta + \sqrt {\color{Red} r}})\cdot \epsilon \cdot g_{t+1}^{wi}

AdaGrad比較適合與convex optimization。在non-convex的情況下,AdaGrad對learning的削減過於激烈。

所以,在non-convex的情況下更適合與用RMSProp。

RMSProp:與AdaGrad直接accumulate g平方不同,RMSProp更溫和地accumulate an exponentially decaying avergae of g square

                                                                           {\color{Red} r }= {\color{Blue} \rho}\cdot {\color{Red} r} +(1-{\color{Blue} \rho})\cdot (g_{wi}^{t+1})^{{\color{Red} 2}}

                                                                         \Delta \theta _{wi}^{t+1}=-(\frac{1}{\delta + \sqrt {\color{Red} r}})\cdot \epsilon \cdot g_{t+1}^{wi}與AdaGrad一樣。

 

Adam = Adaptive + momentum

adam優化器實際上時RMSProp + Momentum with bias correction terms for the first and second moments。

總結所有優化器,其實就是在\Delta \theta上做文章。

                                                                                       

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章