模型结构设计
1. 模型學習能力
1.1 模型深度(隱藏層數量)
理論上來講,只要隱藏層內具有足夠的神經元數量(層寬度),僅含一個隱藏層的神經網絡就足以對最復雜的輸入特征做出準確預測。但對復雜特征來說,深層網絡的參數效率要顯著高于(具有更多神經元的)淺層網絡。
因為:與淺層網絡相比,深層網絡可以使用更少的神經元對復雜函數進行建模,且每層習得不同抽象層次的數據特征,從而更快地收斂到一個更好的解,并同時具有更好的泛化性能。所以模型設計中,更傾向于先增加隱藏層的數量,然后再調整每個隱藏層中的神經元數量,來獲得合適輸入特征復雜度的模型學習能力。
1.2 模型寬度(隱藏層中的神經元數量)
一般來講,隱藏層中的神經元數量越多,模型的學習能力越強,可以解析更復雜的輸入特征。對于含有多個隱藏層的神經網絡,不同隱藏層中的神經元數量常見:塔狀結構和桶裝結構兩種設計方案。
塔狀結構中,每一層的神經元數量越來越少,因為它認為:許多低層特征可以合并成更少的高層特征。桶裝結構中,所有隱藏層使用同樣的神經元數量,它與塔式結構相比,減少了需調整的超參數數量,且在大多數情況下二者表現效果相似。
所以,目前神經網絡中,基本均采取桶式結構(模型寬度只需調整一個超參數)(塔式結構很大程度上已被放棄,但不排除未來復活的可能性)。
2. 梯度穩定性
2.1 初始化策略
神經網絡中常見的參數初始化方法,如下表所示1:
| Constant | - | - | - |
| Random | - | η=0,σ2=1\begin{matrix} \eta = 0, & \sigma^{2} = 1 \end{matrix}η=0,?σ2=1? | ?r=?1,r=1\begin{matrix} -r = -1, & r = 1 \end{matrix}?r=?1,?r=1? |
| Glorot(Xavier) | None、tanh、sigmoid(logistic)、softmax | η=0,σ2=1/fanavg\begin{matrix} \eta = 0, & \sigma^{2} = 1 / fan_{avg} \end{matrix}η=0,?σ2=1/fanavg?? | ?r=?3/fanavg,r=3/fanavg\begin{matrix} -r = -\sqrt{3/fan_{avg}} , & r = \sqrt{3/fan_{avg}} \end{matrix}?r=?3/fanavg??,?r=3/fanavg??? |
| He | ReLU、Leaky ReLU、RReLU、PReLU、ELU | η=0,σ2=2/fanin\begin{matrix} \eta = 0, & \sigma^{2} = 2 / fan_{in} \end{matrix}η=0,?σ2=2/fanin?? | ?r=?6/fanin,r=6/fanin\begin{matrix} -r = -\sqrt{6/fan_{in}} , & r = \sqrt{6/fan_{in}} \end{matrix}?r=?6/fanin??,?r=6/fanin??? |
| LeCun | SELU | η=0,σ2=1/fanin\begin{matrix} \eta = 0, & \sigma^{2} = 1 / fan_{in} \end{matrix}η=0,?σ2=1/fanin?? | ?r=?3/fanin,r=3/fanin\begin{matrix} -r = -\sqrt{3/fan_{in}} , & r = \sqrt{3/fan_{in}} \end{matrix}?r=?3/fanin??,?r=3/fanin??? |
| Orthogonal | - | - | - |
神經網絡的偏差(bias)參數,默認采用全 0 常數(Constant)初始化方法,一般情況下這已可滿足模型需要,很少需要調整這一超參數。
神經網絡的權重(weights / kernel)參數,默認采用Glorot初始化(也稱Xavier初始化)策略,它在增強訓練過程中的梯度穩定性的同時,也可顯著加快模型訓練速度。當使用 ReLU 及其變體作為激活函數時,改用 He (權重)初始化策略,可取得更好的梯度穩定性效果,但這也會影響(減慢)模型訓練速度2。
循環神經網絡的狀態權重(recurrent_kernel)參數初始化時,必須采用 Orthogonal 方法,以避免沿時間步方向傳播過程中的梯度消失現象。
2.2 激活函數
神經網絡中,常用的激活函數可分為飽和激活函數和非飽和激活函數兩大類,其中非飽和激活函數有助于緩解訓練過程中的“梯度消失”問題,如下表所示:
| 飽和 | Sigmoid | 無 | 一般 | - |
| 飽和 | tanh | 無 | 一般 | - |
| 非飽和 | ReLU | 一般 | 高 | - |
| 非飽和 | LeakyReLU | 較高 | 較高 | - |
| 非飽和 | RReLU | 較高 | 較高 | 存在過擬合 |
| 非飽和 | PReLU | 較高 | 較高 | 大訓練數據集 |
| 非飽和 | ELU | 高 | 一般 | - |
| 非飽和 | SELU | 高 | 一般 | 順序架構網絡3 |
一般來講,ReLU是目前首選(默認)的激活函數,因為它速度最快(許多軟件庫和硬件減速器都對其提供了特定優化)且梯度消失改善效果可滿足絕大多數任務的需求;在觀測到 ReLU 陷入負值“死區”后,可改用 LeakyReLU 及其變體類激活函數。對 LeakyReLU 的偏轉角度 α\alphaα 來說,通常 0.01 或 0.2 都是不錯的取值,可根據具體實驗結果選定。
2.3 歸一化
批量歸一化(Batch Normalization)和層歸一化(Layer Normalization)是兩種常用的歸一化方法,它們可有效改善訓練過程中,由數據大小量級差異引起的梯度不穩定現象(梯度消失和梯度爆炸)。
二者的差異主要在于數據歸一化的方向不同,批量歸一化主要消除不同樣本間數據大小量級間的差異,層歸一化主要消除同一個樣本內不同時間步間數據大小量級間的差異。圖像處理任務中,批量歸一化的效果好;自然語言處理任務中,層歸一化的效果更好。
2.4 梯度裁剪
梯度裁剪是緩解梯度爆炸的另一種主流技術。它常用于循環神經網絡,因為在RNN類網絡中難以使用批量歸一化。對于其他類型的神經網絡,批量歸一化通常就已足夠好了。
3. 避免過擬合
目前主流的神經網絡正則化方法有提前停止(Early Stopping)、l1l_{1}l1? 或 l2l_{2}l2? 正則化和 Dropout 三種。其中,提前停止應用于改進模型訓練策略,l1l_{1}l1? 或 l2l_{2}l2? 正則化為損失函數添加正則化懲罰系數,Dropout 改進模型結構。神經網絡中,常用 Dropout 代替 l1l_{1}l1? 或 l2l_{2}l2? 正則化起到防止過擬合的作用,并在訓練過程中配合提前停止(Early Stopping)一起使用。
Dropout 的原理是:在每個訓練步驟(step)中,每個神經元(包括輸入層神經元,但不包括輸出層神經元)都有暫時“刪除”的概率p4,這意味著這個訓練步驟(step)中該神經元被完全忽略,但在下一步中仍可能處于活動狀態。
采用 Dropout 技術后,每個訓練步驟(step)中的網絡結構都不相同(因為共有 2N2^{N}2N 種可能的網絡結構,其中 N 是可以 dropout 的神經元總數),因此經過 dropout 訓練的神經元不能與其相鄰的神經元相互適應,必須自己發揮最大的作用,且不能過分依賴少數神經元的作用,而要必須關注到每一個神經元對預測結果的影響;這顯著提高了模型的魯棒性,使其對輸入的微小變化不太敏感,有更好的泛化能力。
其中:
r=3σ2r = \sqrt{3\sigma^{2}}r=3σ2?
fanavg=(fanin+fanout)/2fan_{avg} = (fan_{in}+fan_{out})/2fanavg?=(fanin?+fanout?)/2
faninfan_{in}fanin? 是待初始化層輸入向量的維度
fanoutfan_{out}fanout? 是待初始化層輸出向量的維度(它也等于該層網絡的神經元數量,即層寬度) ??
更多關于初始化策略和激活函數的信息可參閱《機器學習實戰》的11.1.1節(P295頁) ??
在非順序架構網絡(如RNN類網絡)中,ELU的效果可能會優于SELU(因為SELU在 z=0 處不光滑) ??
超參數 p 稱為dropout率,通常設置在 0.1 到 0.5 之間;
在循環神經網絡中,常設置在 0.2 到 0.3 之間;
在卷積神經網絡中,常設置在 0.4 到 0.5 之間;
特別注意,當 p=0.5 時神經元的權重需要特殊處理,詳見《機器學習實戰》的第233至234頁。 ??
總結
- 上一篇: 挂靠华为数通售前L3证书
- 下一篇: 【蓝桥杯2015Java】奇妙的数字、打