在神經網路中weight decay起到的做用是什麼?momentum呢?normalization呢?

weight decay是提高最終收斂的正確率的還是提高收斂速度的?

同理,momentum呢?normalization呢?


一、weight decay(權值衰減)的使用既不是為了提高你所說的收斂精確度也不是為了提高收斂速度,其最終目的是防止過擬合。在損失函數中,weight decay是放在正則項(regularization)前面的一個係數,正則項一般指示模型的複雜度,所以weight decay的作用是調節模型複雜度對損失函數的影響,若weight decay很大,則複雜的模型損失函數的值也就大。

二、momentum是梯度下降法中一種常用的加速技術。對於一般的SGD,其表達式為x leftarrow  x-alpha ast dx,x沿負梯度方向下降。而帶momentum項的SGD則寫生如下形式:

v=eta ast v -aast dx\

x leftarrow  x+v

其中eta 即momentum係數,通俗的理解上面式子就是,如果上一次的momentum(即v)與這一次的負梯度方向是相同的,那這次下降的幅度就會加大,所以這樣做能夠達到加速收斂的過程。

三、normalization。如果我沒有理解錯的話,題主的意思應該是batch normalization吧。batch normalization的是指在神經網路中激活函數的前面,將wx+b按照特徵進行normalization,這樣做的好處有三點:

1、提高梯度在網路中的流動。Normalization能夠使特徵全部縮放到[0,1],這樣在反向傳播時候的梯度都是在1左右,避免了梯度消失現象。

2、提升學習速率。歸一化後的數據能夠快速的達到收斂。

3、減少模型訓練對初始化的依賴。


說說我對Weight Decay超參的理解。

在設置上,Weight Decay是一個L2 penalty,是對參數取值平方和的懲罰。

然而我們有大量的論文去考察參數的取值,發現

1. 不是高斯分布。

2. 取值可以量子化,即存在大量可壓縮空間

3. 因為Relu, BN的存在使得其有界。

那麼根據Loss function的設置求導之後,我們得到一個公式:

W( t+ 1) = W ( t ) ? lr ? delta(W)? lr ? wd ? W ( t )

也就是說,實際上我們可以把它化簡為W(t)首先以(1- lr ? wd )的比例等比例收縮,然後再根據學習率、梯度方向進行一次調整。

這個一收縮不要緊,我們現在做CNN已經不用Sigmoid+AveragePooling了,我們用的是Relu+MaxPooling,也就是說這一收縮,可能有的乾脆就從激發變成了不激發。可有可無的激發也就消失掉了,有點像DropOut,當然如果這個Neuron真有用也可以回頭再靠梯度把它學成激髮狀態。所以說有了這個東西會規避過擬合。

現在很少有流行模型使用DropOut了吧?竊以為,道理就在這。

最後,假設W只能取0和1兩個值,那麼L1-Penalty和L2-Penalty其實是等價的。實際上的W取值,是處於我說的這種極端情況和高斯分布之間的,所以按找傳統統計里L2-Penalty的思路去思考Weight Decay是不對的。現在CNN裡面有很多paper在濫用高斯假設,慎讀。

========================================

補記:我通過對淺層寬模型設置2-3倍默認的Weight Decay往往效果是最好的。太大了實際會嚴重干擾第一個Learning Rate階段的精度。太小了(也就是很多論文的默認設置)會距離收斂最優情形有差距。CIFAR100 Top-1 84.36%是在Weight Decay=0.001上獲得的。也就是說,在實踐里我比其他人更喜歡加大Weight Decay。


單說momentum,我覺得上面幾位的說法(momentum可以克服local minima和critical point)值得商榷。

最簡單的梯度下降法是

x_{t+1} = x_t -alpha 
abla f(x_t).

對於ill-conditioned問題,梯度下降法中每次迭代的方向
abla f(x_t)都很接近於Hessian矩陣最小特徵向量的垂直方向,對目標函數的改進很小。為此加入一個歷史信息項

d_{t+1} = eta d_t - 
abla f(x_t), eta >0

x_{t+1} = x_t + alpha d_{t+1}.

這裡的d_t就稱為動量項,作用是通過歷史搜索方向的積累,消除相繼搜索方向中相反的方向,而一致的方向則相互累加。

對動量項的分析,有兩個方面。

第一,動量項是共軛梯度法的近似 Steepest descent with momentum for quadratic functions is a version of the conjugate gradient method。共軛梯度法使用以前的搜索信息來修正當前的梯度方向,使得搜索方向之間相互共軛

d_k = eta_k d_{k-1} - g_k,

其中 eta_k ={ g_k ^T g_k over g_{k-1}^Tg_{k-1}}是共軛參數。共軛方向如下圖,圖片來自 Efficient BackProp, Efficient BackProp

使用常數的eta 值,這就是momentum方法。換句話說,momentum 實際是共軛梯度法的近似 。Momentum的作用也和共軛梯度法的作用相似,即通過使用歷史搜索方法對當前梯度方向的修正來抵消在ill-conditioned 問題上的來回震蕩。下圖來自 An overview of gradient descent optimization algorithms

第二,使用動量項的優化方法是Newton方程/Hamilton 方程的離散化 On the momentum term in gradient descent learning algorithms。梯度下降法是梯度流

frac{dx}{dt} = -epsilon 
abla f(x)

的離散化,即

frac{x_{t+delta t} - x_t}{delta t} = -epsilon 
abla f(x_t)

x_{t+delta t}= x_t -epsiloncdot delta t 
abla f(x_t).

而含有動量項的優化方法,相當於將方程

mfrac{d^2x}{dt^2}+mufrac{dx}{dt} = - 
abla f(x)

進行離散化。這是勢能為f(x)保守力場中,質量為m的質點在摩擦係數為mu的介質中的運動方程。對此方程的二階近似分析指出,帶有momentum的時候,可以使用更大的學習率alpha

從這些分析出發,momentum主要是提高收斂速率的,並沒有什麼證據證明momentum對 local minima 比gradient descent 更加有效。Momentum term允許使用更大的學習率這一點對 critical point 可能有正面效果,不過具體的分析沒有見到。在按點附近momentum的行為可見An overview of gradient descent optimization algorithms 最下面的動態圖,其效果似乎值得懷疑。如果有人看到相關分析,請提醒我一下。

我的相關回答:

神經網路的訓練可以採用二階優化方法嗎(如Newton, Quasi Newton)?

有哪些學術界都搞錯了,忽然間有人發現問題所在的事情? - 知乎用戶的回答 - 知乎

啟發式優化演算法中,如何使之避免陷入局部最優解? - 知乎用戶的回答 - 知乎


引用李宏毅的三張ppt


說下自己對momentum的看法。momentum是衝量單元,但是更好地理解方式是「粘性因子」,也就是所說的viscosity。momentum的作用是把直接用SGD方法改變位置(position)的方式變成了用SGD來對速度(velocity)進行改變。momentum讓「小球」的速度保持一個衡量,增加了某一方向上的連續性,同時減小了因為learning帶來的波動,因此使得我們採用更大的learning rate來進行訓練,從而達到更快。

另一位答主的回答也是有道理的,個人認為沒有提到learning rate對網路能快速收斂解釋不足,摘錄如下:

「momentum是衝量單元,也就是下式中的m,作用是有助於訓練過程中逃離局部最小值,使網路能夠更快速地收斂,也是需要經過反覆地trial and error獲得的經驗值。」

歡迎批評,指正,討論。


類似統計學習中經常提的結構化風險最小化的思想,利用weight decay給損失函數加了個懲罰項,使得在常規損失函數值相同的情況下,學習演算法更傾向於選擇更簡單(即權值和更小)的NN。是一種減小訓練過擬合的方法。


Weight decay is equivalent to L2 regularizer.

And momentum can be used to avoiding stuck at saddle point. The aim of optimization is to converge to the local minima, and when the network goes deeper, most of the local minima performs nearly the same.

Note: Saddle point is not local optima. And we are not going to get the global optima, actually, it"s nearly impossible to get the global optima. Global optima usually leads to overfitting.


個人淺見。。。

神經網路的訓練過程(也就是梯度下降法)是在高維曲面上尋找全局最優解的過程(也就是尋找波谷),每經過一次訓練epoch,搜尋點應該更加靠近最優點所在的區域範圍,這時進行權重衰減便有利於將搜尋範圍限制在該範圍內,而不至於跳出這個搜索圈,反覆進行權重衰減便逐漸縮小搜索範圍,最終找到全局最優解對應的點,網路收斂。

momentum是衝量單元,也就是下式中的m,作用是有助於訓練過程中逃離局部最小值,使網路能夠更快速地收斂,也是需要經過反覆地trial and error獲得的經驗值。


weight decay是提高最終收斂的正確率的還是提高收斂速度的?

同理,momentum呢?normalization呢?

wd防止參數過大(正)過小(負),防止過擬合。

momentum防止陷入局部極小。

normalization,如果是BN的話,加速收斂咯。


個人覺得BN演算法因該是引入了兩個參數,這樣可以得到符合原來數據分布的一個normalization,而不是像白化那樣粗暴(0,1)解決


推薦閱讀:

如何通俗的理解spike and slab prior?
機器AI學習需要什麼數學基礎,學習這些數學需要會哪些基礎數學?
有誰能講解下《Going deeper with convolutions》這篇論文?
壓縮感知和矩陣分解的異同?
Factor graph 模型的前提知識有哪些?

TAG:機器學習 | 電子 | 神經網路 |