機器學習的基本問題是利用模型對數據進行擬合,學習的目的並不是是對有限訓練集進行正確預測,而是對不曾在訓練集合出現的樣本可以正確預測。模型對訓練集數據的偏差稱爲經驗偏差,對測試集數據的偏差稱爲泛化偏差。模型對訓練集之外樣本的預測能力就稱爲模型的泛化能力,追求這種泛化能力始終是機器學習的目標算法
過擬合(overfitting)和欠擬合(underfitting)是致使模型泛化能力不高的兩種常見緣由,都是模型學習能力與數據複雜度之間失配的結果。「欠擬合」經常在模型學習能力較弱,而數據複雜度較高的狀況出現,此時模型因爲學習能力不足,沒法學習到數據集中的「通常規律」,於是致使泛化能力弱。與之相反,「過擬合」經常在模型學習能力過強的狀況中出現,此時的模型學習能力太強,以致於將訓練集單個樣本自身的特色都能捕捉到,並將其認爲是「通常規律」,一樣這種狀況也會致使模型泛化能力降低。過擬合與欠擬合的區別在於,欠擬合在訓練集和測試集上的性能都較差,而過擬合每每能較好地學習訓練集數據的性質,而在測試集上的性能較差。在神經網絡訓練的過程當中,欠擬合主要表現爲輸出結果的高誤差,而過擬合主要表現爲輸出結果的高方差數據庫
圖示
網絡
欠擬合出現緣由機器學習
欠擬合的狀況比較容易克服,常看法決方法有函數
過擬合出現緣由性能
過擬合的解決方案學習
正則化測試
在模型訓練的過程當中,須要下降 loss 以達到提升 accuracy 的目的。此時,使用正則化之類的方法直接將權值的大小加入到 loss 裏,在訓練的時候限制權值變大。訓練過程須要下降總體的 loss,這時候,一方面能下降實際輸出與樣本之間的偏差,也能下降權值大小spa
正則化方法包括 \(L0\) 正則、 \(L1\) 正則和 \(L2\) 正則,而正則通常是在目標函數以後加上對於的範數。可是在機器學習中通常使用 \(L2\) 正則:
\[ C = C_0 + \frac{\lambda}{2n} . \sum_i w_i^2 \].net
\(L2\) 範數是指向量各元素的平方和而後求平方根。可使得 \(W\) 的每一個元素都很小,都接近於0,但不會讓它等於0,而是接近於0。 \(L2\) 正則項起到使得參數 \(W\) 變小加重的效果,關於它爲何能防止過擬合簡答的理解爲:更小的參數值 \(W\) 意味着模型的複雜度更低,對訓練數據的擬合剛恰好,不會過度擬合訓練數據,從而使得不會過擬合,以提升模型的泛化能力
數據擴增
這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型「看見」儘量多的「例外狀況」,它就會不斷修正本身,從而獲得更好的結果
如何獲取更多數據,能夠有如下幾個方法
Dropout
在訓練時,每次隨機(如50%機率)忽略隱層的某些節點;這樣,咱們至關於隨機從 \(2^n\)(n個神經元的網絡) 個模型中採樣選擇模型
Early stopping
Early stopping即是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂以前中止迭代來防止過擬合
具體作法是,在每個Epoch結束時計算validation data的accuracy,當accuracy再也不提升時,就中止訓練。固然咱們並不會在accuracy一下降的時候就中止訓練,由於可能通過這個Epoch後,accuracy下降了,可是隨後的Epoch又讓accuracy又上去了,因此不能根據一兩次的連續下降就判斷再也不提升。通常的作法是,在訓練的過程當中,記錄到目前爲止最好的validation accuracy,當連續10次Epoch(或者更屢次)沒達到最佳accuracy時,則能夠認爲accuracy再也不提升了。此時即可以中止迭代了(Early Stopping)。這種策略也稱爲「No-improvement-in-n」,n即Epoch的次數,能夠根據實際狀況取,如十、20、30……