視訊教程的總結和一些自行補充的內容,旨在儘可能的理解其原理。
本文持續更新地址:個人部落格機器學習面試基礎知識 & 擴充套件-01
訓練/開發/測試集
Tips
- 訓練/開發/測試集經驗比例 6:3:1
- 當資料量超過百萬時,測試集只需約1w(也就是不需要嚴格按照比例增長)
- 嚴格保證分層取樣
偏差(Bias)/ 方差(Variance)
在忽略噪聲的情況下,泛化誤差可分解為偏差、方差兩部分。
- 偏差:度量學習演算法的期望預測與真實結果的偏離程度,也叫擬合能力。
- 方差:度量了同樣大小的訓練集的變動所導致的學習效能的變化,即刻畫了資料擾動造成的影響。
---摘自《機器學習》,周志華
分類器
Train set error | 1% | 15% | 15% | 0.5% |
---|---|---|---|---|
Dev set error | 10% | 16% | 30% | 1% |
status | high variance | high bias | high bias & high variance | low bias & low variance |
- 偏差:模型的預測誤差率(訓練集中的準確率越大,偏差越大)
- 方差:模型的泛化能力(開發集中的表現和訓練集的差距大小,差距越大,代表方差越大)
high Bias 意味著模型的分類效果不好,high Variance 意味著模型往往過擬合,不能很好的泛化。
我們通常這樣利用這兩個引數調整我們的神經網路,其中部分內容會在本文的後面進一步探討。
梯度消失與梯度爆炸
欠擬合和過擬合
上圖從左到右分別是欠擬合、合適的擬合和過擬合三種情況。
過擬合
過擬合是如何產生的?
- 根本原因:引數太多,模型複雜度過高,同時資料相對較少,或噪聲相對較多。
整個訓練過程其實是模型複雜度和過擬合之間的一個權衡,如下圖
如何應對過擬合?我之前的一篇譯文提到過:譯文
如何應對過擬合?
結合前文中提到的偏差和方差,我們有以下經驗:
也就是:
- 增大訓練資料量 - 最有效的方案
- Cross Validation - 資料量不足的情況下常用
- Early Stopping - 提早結束訓練過程
- 正則化(
regulation
)- 主要是L1和L2正則化 - 採用
Dropout
- 隨機將某些神經元的權重初始化為零
Cross Validation
回到交叉驗證,根據切分的方法不同,交叉驗證分為下面三種:
簡單交叉驗證
所謂的簡單,是和其他交叉驗證方法相對而言的。首先,我們隨機的將樣本資料分為兩部分(比如: 70%的訓練集,30%的測試集),然後用訓練集來訓練模型,在測試集上驗證模型及引數。接著,我們再把樣本打亂,重新選擇訓練集和測試集,繼續訓練資料和檢驗模型。最後我們選擇損失函式評估最優的模型和引數。
S折交叉驗證
又稱(S-Folder Cross Validation),和第一種方法不同,S折交叉驗證會把樣本資料隨機的分成S份,每次隨機的選擇S-1份作為訓練集,剩下的1份做測試集。當這一輪完成後,重新隨機選擇S-1份來訓練資料。若干輪(小於S)之後,選擇損失函式評估最優的模型和引數。
留一交叉驗證
又稱(Leave-one-out Cross Validation),它是第二種情況的特例,此時S等於樣本數N,這樣對於N個樣本,每次選擇N-1個樣本來訓練資料,留一個樣本來驗證模型預測的好壞。此方法主要用於樣本量非常少的情況。
早停法(Early Stopping)
為了獲得效能良好的神經網路,網路定型過程中需要進行許多關於所用設定(超引數)的決策。超引數之一是定型週期(epoch)的數量:亦即應當完整遍歷資料集多少次(一次為一個epoch)如果epoch數量太少,網路有可能發生欠擬合(即對於定型資料的學習不夠充分);如果epoch數量太多,則有可能發生過擬合(即網路對定型資料中的“噪聲”而非訊號擬合)。
早停法背後的原理其實不難理解:
- 將資料分為定型集和測試集
每個epoch結束後(或每N個epoch後):
- 用測試集評估網路效能
- 如果網路效能表現優於此前最好的模型:儲存當前這一epoch的網路副本
將測試效能最優的模型作為最終網路模型
最優模型是在垂直虛線的時間點儲存下來的模型,即處理測試集時準確率最高的模型。
其中,停止條件可以是下面這三條
- 權重的更新低於某個閾值的時候
- 預測的錯誤率低於某個閾值
- 達到預設一定的迭代次數
正則化
正則化 是結構風險最小化策略的實現,是在經驗風險上加一個正則化項(regularizer)或懲罰項(penalty term)
一般來說,監督學習可以看做最小化下面的目標函式:
- 作用: 英文是
regulation
,字面意思是調整修正,也就是調整上圖中出現應對過擬合 - 常見種類: L0、L1、L2
L0範數
L0範數表示向量中所有非零元素的個數
定義:
L1範數
L2範數
定義:L2
範數是指向量各元素的平方和然後求平方根。我們讓L2範數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0。
- L2範數如何減少過擬合?
使部分神經節點w
的權重降低為零,從而簡化網路,將上圖中圖3中轉換為圖1,結果是variance
降低,bias
增加。
L1 / L2正規化的區別
下降速度
模型空間的限制
視訊講解: 2:30
優化問題:把 w
的解限制在黃色區域內,同時使得經驗損失儘可能小。
這也導致L2相對較為穩定,L1可以產生更多稀疏解。
Dropout
Dropout是指在模型訓練時隨機讓網路某些隱含層節點的權重不工作,不工作的那些節點可以暫時認為不是網路結構的一部分,但是它的權重得保留下來(只是暫時不更新而已),因為下次樣本輸入時它可能又得工作了。
Experiment in Keras
基於 CIFAR-10 dataset 的實驗
結果演示:
分析:dropout等於0.2的時候效果最佳
程式碼:Github
示例演示
程式碼演示
100程式碼的簡單神經網路程式碼:pycharm
關於啟用函式作用的直觀解釋:知乎回答:異或
視覺化演示
連結:TensorFlow