深度學習優化基礎

一、網絡優化參數算法

sigmoid函數:1/(1+e^(-x))::便於求導的平滑函數,可是容易出現梯度消失問題;函數中值不是0,會致使模型訓練的收斂速度變慢。。。網絡

tanh函數:(e^x-e^(-x))/(e^x+e^(-x))::解決了zero-centered問題,可是梯度消失和冪運算的問題還在。函數

RELU:max{0,x}::在正區間解決了梯度消失問題,計算速度很快;可是也不是zero-centered,且存在DEAD RELU Problem(某些神經元可能永遠不會參加計算,致使相應參數沒法被更新)。解決方法:採用Xavier初始化方法,以及避免lr設置太大或者使用Adagrad等自動調節lr算法。學習

LEAKY RELU函數:max{0.01x,x}::解決DEAD RELU PROBLEM;可是理論是好,實際應用也不必定絕對比RELU好。優化

指數線性單元ELU函數:深度學習

α(e^x-1)  , x<=0隨機數

x              ,x>0       ::有較高的噪聲魯棒性,可是須要計算指數,因此計算量較大。神經網絡

SELU函數:SELU(x)=λ(ELU(x))    ::自歸一化神經網絡中提出,只要把激活函數換程SELU就能使得輸入在通過必定層數後變成固定分佈。自適應

Softmax函數:(可視做Sigmoid函數的泛化形式):本質上就是將一個K維的任意實數向量壓縮(映射)成另外一個K維的實數向量,其中向量中的每一個元素取值都介於(0,1)之間。通常用於多分類神經網絡。方法

 

二、參數初始化方法

參數初始化條件:一、各層激活值不會出現飽和現象;二、各層激活值不爲0

隨機生成小的隨機數:從均值爲0,標準差爲1的高斯分佈中取樣,這樣參數的每一個維度來自於一個多維的高斯分佈。通常,參數初始值不能過小,容易出現梯度彌散(反向傳播時會致使較小的梯度產生)。

標準初始化:權重參數從肯定的區間均勻隨機取值,

Xavier初始化:從方差來考慮,激活值的方差和層數無關,反向傳播梯度的方差和層數無關,Xavier一般和ReLU一塊兒使用。

 

三、最優化方法:

  優化方法時深度學習中最重要的話題,一般時利用目標函數的導數經過屢次迭代來求解無約束最優化問題。

常見有:梯度降低(批量梯度降低,隨機梯度降低(SGD),基於動量項的SGD);牛頓法(基於二階梯度,快,可是Hesseian矩陣不可逆就難辦了)、擬牛頓法(用正定矩陣來代替Hesseian矩陣的逆)、共軛梯度法;

  以上方法中堆全部參數使用同一個更新速率,但同一個速率不必定適合全部參數。

Adagrad算法(自適應維各個參數分配不一樣學習率的算法,其學習率是單調遞減的,訓練後期學習率很是小,要手工設置一個全局的廚師學習率)、Adadelta算法(不依賴全局學習率但RMSprop可算做Adadelta的一個特例仍然依賴於全局lr)、Adam算法(本質上是帶有動量項的RMSprop算法)。

四、歸一化方法

特徵歸一化:BN,LN, GN;權重歸一化:WN   (目的:知足數據的獨立同分布要求這一基本假設)

五、正則化方法:(預測和訓練效果同樣好,泛化能力強)

參數懲罰:(經常使用的就是在損失函數上添加範數約束)

DROPOUT(訓練過程當中隨機丟棄輸入,獲得子網絡,顯著下降過擬合:這裏經過對每一個層隨機選擇激活函數的子集設置爲0)與DROP CONNECT(前者的通常化形式,區別前者的激活函數子集設爲0,這裏將權重設爲0)

提早中止:

訓練樣本擴充:實際上最有效的防止過擬合的方法是增長訓練樣本。

相關文章
相關標籤/搜索