一、網絡優化參數算法
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)
提早中止:
訓練樣本擴充:實際上最有效的防止過擬合的方法是增長訓練樣本。