深度學習的知識點
前饋網絡
定義
神經網絡:$<V,E,\sigma,w>, E\subseteq V\times V,w:V\times V\to R, \sigma:V\times R\to R $,
輸出函數$f(v)$遞歸定義為$$\begin{aligned}f(v)&=x(v)&,if\,\nexists u,<v,u>\in E\\ f(v)&=\sigma(v,y(v)), y(v)=\sum_{\forall u<v,u>\in E} w(v,u)f(u)&,if\,\exists u,<v,u>\in E\end{aligned}$$
- 萬能近似定理(universal approximation theorem)
- 一個前饋神經網絡如果具有線性輸出層和至少一層具有任何一種‘‘擠壓’’性質的激活函數(例如logistic sigmoid激活函數)的隱藏層,只要給予網絡足夠數量的隱藏單元,它可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的Borel可測函數。
- Montufar etal.(2014)的主要定理指出,具有d個輸入、深度為l、每個隱藏層具有n個單元的深度整流網絡可以描述的線性區域的數量是$O(\binom{n}{d}d^{l-1}n^d)$
訓練算法
通常使用梯度下降(反向傳播算法)來最小化代價函數$l$,即函數近似誤差。
反向傳播$\delta(v)$遞歸定義為$$\begin{aligned}\delta(v)&=\frac{\partial l(z,f)}{\partial f}&,if\,\nexists u,<u,v>\in E\\ \delta(v)&=\sum_{\forall u<u,v>\in E}\delta(u)\frac{\partial \sigma(u,y)}{\partial y}w(u,v)\,&,if\,\exists u,<u,v>\in E\end{aligned}$$
單元函數選擇
非線性導致大多數代價函數都變得非凸。用於非凸代價函數的隨機梯度下降沒有收斂性保證,並且對參數的初始值很敏感。
- 代價函數$l$
- 函數的梯度必須足夠大、具有足夠的預測性,例如滿足ML。
- 通常有$MSE(f,z)=E[(f-z)^2]$和交叉熵$H(p,q)=E_{X\sim p}[\log q(x)]$
- 輸出單元
- 用於高斯分布的線性單元,輸出其均值,ML等價於最小化MSE
- 用於Bernoulli分布的$sigmoid(x)=({1+exp(-x)})^{-1}$,此時對數ML可以避免飽和。
- 用於Multinoulli分布的$softmax(x_j)=\frac{exp(x_j)}{\sum_iexp(x_i)}$
- 用於高斯混合模型的距離判斷單元
- 隱藏單元
- $ReLU(x)=max(x,0)$,$softplus(x)=log(1+exp(x))$等。
- 徑向基、雙曲正切函數、Sigmoid容易飽和
- 技術進步
- 使用交叉熵損失函數,大大提高了具有sigmoid和softmax輸出的模型的性能;當使用MSE時,會產生非常小的梯度。
- 出現了組合層:$f_i(X)=\sum_j g_{ij}(W_{ij}X)$來優化學習。
- 使用分段線性隱藏單元來替代sigmoid隱藏單元,提高性能。
- 從生物學考慮整流線性單元的導出。半整流非線性旨在描述生物神經元的這些性質
- 對於某些輸入,生物神經元是完全不活躍的。
- 對於某些輸入,生物神經元的輸出和它的輸入成比例。
- 大多數時間,生物神經元是在它們不活躍的狀態下進行操作,即它們應該具有稀疏激活(sparse activation)。
正則化
- 對學習算法的修改——旨在減少泛化誤差而不是訓練誤差
- 參數的正則化懲罰:以偏差的增加來換取方差的減少。
- L2正則化:與輸出目標的協方差較小的特征的權重將會收縮。
- L1正則化:產生更稀疏(sparse)的解。
- 許多正則化策略可以被解釋為 MAP 貝葉斯推斷
- 提前終止
- 解決訓練誤差降低時,泛化誤差的上升問題,利用驗證集來檢測這一點
- 強化數據集:為輸入、輸出註入噪聲;多尺度縮放數據
- dropout
- 在訓練中隨機屏蔽隱藏單元,可理解為乘性的噪聲,防止對少數權重的過渡依賴。
- 在測試中,為權重乘以dropout概率,可理解為自動的Bagging集成策略
- 批標準化:自適應的重新參數化,降低非相鄰層的高階影響。$given\;Y_{old}=XW$
- $$Y_{new}=\gamma Y‘+\beta, Y‘=\frac{(Y-\mu)}{\sigma}, \mu=\frac{1}{m}\sum_iY_i,\sigma^2=\delta+\frac{1}{m}\sum_i(Y_i-\mu)^2$$
模型訓練
問題:病態、局部極小點、鞍點、懸崖、長期依賴、局部與全局結構的弱對應
選擇一族容易優化的模型
- 層之間的線性變換
- 幾乎處處可導的激活函數,其在大部分定義域都有明顯的梯度
- 采用代理損失函數:優化終止時,導數仍然較大。
優化算法:
- 梯度下降SGD:隨機小批量更新,易於並行處理,具有一些正則化效果
- 動量法:每步更新是上一步的更新與當前梯度的組合
- 優化軌跡:坐標輪轉、軌跡平滑
自適應學習率:
- AdaGrad:每個學習率反比於其梯度歷史向量的2範數。
- RMSProp:每個學習率反比於其梯度歷史向量的(加權)2範數。
- Adam:每個學習率反比於其梯度歷史向量的偏一階矩、偏二階矩的經驗函數。
優化策略
- 延拓算法:構造一系列逐漸逼近的代價函數
- 預訓練:構造一系列模型來遷移權重
開發方法
- 確定目標:根據問題,確定誤差度量,並指定目標值。
- 精度是正確率p,而召回率則是真實事件被檢測到的比率r。
- 盡快建立一個端到端的的工作流程,包括估計合適的性能度量。
- 模型結構和訓練算法
- 搭建系統,並確定性能瓶頸。
- 檢查哪個部分的性能差於預期,以及是否是因為過擬合、欠擬合,或者數據或軟件缺陷造成的。
- 可視化,單元測試,檢測數值梯度等等
- 根據具體觀察反復地進行增量式的改動,如收集新數據、調整超參數或改進算法。
超參數 |
提高性能 |
原因 |
註意事項 |
隱藏單元數量 |
增加 |
增加隱藏單元數量會增加模型的表示能力。 |
復雜度增加 |
學習率 |
最優 |
提高學習速度 |
|
卷積核寬度 |
增加 |
增加模型的參數數量。 |
|
隱式零填充 |
增加 |
保持尺寸 |
|
權重衰減系數 |
降低 |
提高模型參數 |
|
Dropout 比率 |
降低 |
提高精度 |
參考文獻
- Deep learning, www.deeplearning.net
深度學習的知識點