深度學習優化方式

在這裏插入圖片描述

訓練集上表現不好(high bias)

  1. 嘗試使用更復雜更大的網絡結構(增加單元數、增加層數,或者更改結構)
  2. 增加訓練次數

更換激活函數

sigmoid 函數

在這裏插入圖片描述
sigmoid 缺點:

  1. 梯度消失
    如圖sigmoid函數導數處在0-0.4間 而且很大範圍內都趨近於零。那麼在反向傳播的過程中梯度越傳越小,造成前幾層的梯度特別小。
    2. 非中心對稱
    在這裏插入圖片描述
    sigmoid 的值恆大於0,那麼對於下一層來說,它的輸入永遠是正數,反向求導時,對於所有參數來說,
    在這裏插入圖片描述 =這層輸入永遠是正數,更新方向取決於回傳的梯度,不同參數無法沿不同方向更新。容易出現zigzag現象。
    3. 計算量大

tanh

在這裏插入圖片描述
解決了非原點對稱問題,但是還是有梯度消失問題

ReLU

在這裏插入圖片描述
優點:

  1. 實驗效果證明收斂較快
  2. 符合人的神經節運作方式
  3. 解決梯度消失問題
    缺點:
    由於當輸出恆爲負時回傳梯度爲0,會出現dead ReLU現象

Leakly ReLU & Parametric ReLU

在這裏插入圖片描述
解決了dead ReLU 問題

Exponential ReLU

在這裏插入圖片描述
可以看做介於relu和LeakyReLU之間。需要計算exp,從而計算量上更大一些。

Maxout

在這裏插入圖片描述
相當於一個group(輸出節點數)中學習k組參數,然後從中選出激活值最大的作爲這個節點的輸出。
其實是一個k段的分段函數,理論上可以擬合任意凸函數
參數量x k倍。

學習率優化

學習率衰減

  1. 等間隔調整學習率 StepLR
  2. 多間隔調整學習率 MultiStepLR
  3. 指數衰減調整學習率 ExponentialLR
  4. 餘弦退火函數調整學習率:CosineAnnealingLR
  5. 根據指標調整學習率 ReduceLROnPlateau
    當某指標(loss或accuracy)在最近幾個epoch中都沒有變化(下降或升高超過給定閾值)時,調整學習率。

自適應學習率調整(學習率優化)

傳統SGD的缺點,爲什麼提出學習率優化

  1. 學習率大小和策略選擇困難
  2. 學習率不夠智能,對所有參數一視同仁。
  3. 同時面臨局部極值和鞍點的問題。

Momentum 動量法

協同參考之前累積的的梯度方向
在這裏插入圖片描述
在這裏插入圖片描述

Nesterov牛頓動量法(根據累計梯度計算提前點)

先按照動量方向前進到點C,再根據C點的梯度進行梯度下降,相比動量法
在這裏插入圖片描述![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200222102352360.png

Adagrad(累計梯度反比)

對於不同的參數動態的採取不同的學習率,讓目標函數更快的收斂。
將每一個參數的累計梯度平方和開方,用基礎學習率除以這個數,來做學習率的動態更新。
adagrad算法一開始是激勵收斂,到了後面就慢慢變成懲罰收斂,速度越來越慢。
why?
不同維度變量的梯度變化率不一致,更新的步長不僅要與函數值變化率(一次微分)成正比,還要與導數變化率(二次微分)成反比,因爲曲線曲率越大,那麼導數變得快,到極值點的距離就越小,曲線曲率越小,導數變得慢,到極值點的距離越大。
這裏用累計梯度平方和來近似二次微分。

在這裏插入圖片描述
在這裏插入圖片描述

RMSprop(滑動窗口)

上述Adagrad 分母項爲前序梯度的累加值,會出現學習率越來越小,造成學習停滯問題。很可能出現早期迭代到不好的極值點之後,由於學習率太小而無法衝出這個極值點導致最後收斂到的解不優。RMSprop採用指數加權移動平均的方法解決。(滑動窗口思想)
在這裏插入圖片描述

AdaDelta(自適應學習率)

使用上次的近似變化量來近似學習率

在這裏插入圖片描述在這裏插入圖片描述

Adam算法

= 動量法+RMSProp
在這裏插入圖片描述

測試集上表現不好(high varience)

  1. 收集更多的訓練數據
  2. 降低模型複雜度

降低參數空間的維度

剪枝 參數共享

降低每個維度上的有效規模(正則化)

L1、L2正則化

爲什麼減小參數大小->泛化能力好
如果參數絕對值都非常大,這種現象直觀表現在圖上就是曲線(曲面)不光滑,凹凸不平,很複雜;相反,如果w的各個分量的絕對值都很小,在0附近,那麼曲線(曲面)就會顯得很平滑。很顯然,在機器學習中,我們更希望擬合出的曲線(曲面)更爲平滑,因爲這樣的曲線(曲面)是具有較好的泛化能力的。

  • L2 正則化
    在這裏插入圖片描述
    在這裏插入圖片描述
    每次乘一個恆小於1的項,導致越來越小,趨近於0,但是由於符合高斯分佈,並不真正衰減爲0。L2正則化對於絕對值較大的權重予以很重的懲罰,對於絕對值很小的權重予以非常非常小的懲罰,當權重絕對值趨近於0時,基本不懲罰。
    這樣有利於處理共線性強的特徵。
    但是不能獲得較爲稀疏的網絡(權重!=0)。
  • L1 正則化
    在這裏插入圖片描述
    在這裏插入圖片描述
    那麼w原來是負數就+,原來是正數就-,整體優化方向=0
    相對L2來說,面對不同的w值梯度恆等,那麼有利於較小值歸零,完成稀疏化,用於特徵選取。但是一開始值比較大的話對該權重的約束就不大了。
    缺點:對於共線性強的特徵只留一個,但是有可能這幾個特徵對於決策都有用。
    在這裏插入圖片描述

Early Stopping

訓練中計算模型在驗證集上的表現,當模型在驗證集上的表現開始下降的時候,停止訓練,這樣就能避免繼續訓練導致過擬合的問題
理論訓練誤差曲線

在這裏插入圖片描述
早停標準:

  • st:泛化誤差大 , 泛化損失=泛化誤差/目前的最低的誤差-1(gl)
  • st:訓練誤差。解釋:當訓練的速度很快的時候,我們可能希望模型繼續訓練。因爲如果訓練錯誤依然下降很快,那麼泛化損失有很大概率被修復。度量進展=平均訓練錯誤/目前最小的訓練錯誤-1(pq)
  • 泛化錯誤的變化,即當泛化錯誤在連續ss個週期內增長的時候停止(up)
    參考early stopping

Dropout

  • 原理:
  • ensemble解釋
    當作一種集成化方法,假設該層神經元的數量爲n,那麼如果dropout=50% 相當於同時訓練了2^n個共享參數的網絡,每個網絡使用一個mini-batch(1 iter中)訓練。測試的時候用所有節點均值來近似所有網絡均值
  • 減少神經元之間複雜的共適應關係
    不一定每次dropout的時候兩個神經元都共存
  • 生物學角度
  • 物種爲了生存往往會傾向於適應這種環境,環境突變則會導致物種難以做出及時反應,性別的出現可以繁衍出適應新環境的變種,有效的阻止過擬合,即避免環境改變時物種可能面臨的滅絕。
    2.方法
    訓練的時候以p(一般取0.5使得可得到的網絡結構數最大)的概率選取神經元,測試時使用所有神經元,權重x(1-p)。(學得的w是偏大的,爲了使得訓練和測試時的輸出預期相近)

BN

爲啥做BN

  • 對於神經網絡的每一層來說,它的輸入相當於上一層的輸出,那麼在不使用RMSProp的情況下,每個參數的學習率一致,爲了使得各參數的梯度變化大致相似,先歸一化
  • 隨着層數的深入,如果是用sigmoid 或者tanh 作爲激活函數的話,輸出值會越來越小,導致梯度消失,先歸一化之後使得輸出靠近0附近(上述兩個激活函數梯度敏感範圍),減輕梯度消失問題
  • 論文中的說法,減緩Internal covariate shift:每一層的輸入相當於上層輸出,而由於上層影響,在訓練過程中,每訓練一輪參數就會發生變化,對於一個網絡相同的輸入,但n-1層的輸出卻不一樣,這就導致對於相同輸入第n層的輸入也不一樣,這層輸入的分佈一直在變,不利於網絡學習

咋做BN

訓練:

  1. 轉化爲均值爲0,方差爲1的標準分佈
    每個xi=(xiu)/(sqrt(v2)+e)x_i = (x_i – u) / (sqrt(v^2)+ e) e是一個小小偏置,防止分母趨向於0.
  2. 加scale和偏置
    xi=scalexi+shiftx_i = scale*x_i + shift
    爲啥加?之前都歸一化到標準分佈會使得網絡趨於線性,沒有好的表達能力,爲了保證非線性。
  3. 注意!BN層在bp的時候也要考慮,可以把它看成一層網絡。
  • 測試:
    使用訓練時累計得到的均值方差統計量來近似
    具體到pytorch中
    利用一個動量參數維護一個動態均值與動態方差
    在這裏插入圖片描述

BN的優點

  1. 解決上述的 Internal convariate shift;
  2. 一定程度上減緩梯度消失,加速訓練
  3. 防止overfitting:在訓練中,BN的使用使得一個mini-batch中的所有樣本都被關聯在了一起,因此網絡不會從某一個訓練樣本中生成確定的結果。
  4. 減弱對初始化參數選取的要求

BN 的bp推導

由後向前根據鏈式法則來 參考知乎大佬鏈接

Normolization 對比

  • BN: 在NHW上歸一化,得到C組var mean 值,batch size 小的時候效果不好,也不適合用在RNN上
  • LN:在CHW上歸一化,得到N組var mean值,通常用在RNN上
  • IN:Instance Norm在HW上歸一化,得到NXC組 var mean值,通常用在風格遷移上
  • GN:GroupNorm將channel分組,然後再做歸一化;
  • SN: SwitchableNorm, 將BN、LN、IN結合,賦予權重,由神經網絡自行學習使用哪一種
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章