深度學習筆記(九)——結構化機器學習項目(機器學習(ML)策略(1))

1.爲什麼是ML策略

對深度神經網絡模型的優化可以從很多方面進行,例如:

  • Collect more data

  • Collect more diverse training set

  • Train algorithm longer with gradient descent

  • Try Adam instead of gradient descent

  • Try bigger network

  • Try smaller network

  • Try dropout

  • Add L2 regularization

  • Network architecture: Activation functions, #hidden units…

可選擇的方法很多,也很複雜、繁瑣。盲目選擇、嘗試不僅耗費時間而且可能收效甚微。因此,使用快速、有效的策略來優化機器學習模型是非常必要的。

2.正交化

通過每次只調試一個參數,保持其它參數不變,使模型某一性能改變是一種最常用的調參策略,也就是正交化方法。

對應到機器學習監督式學習模型中,可以大致分成四個獨立的“功能”,每個“功能”對應一些可調節的唯一的旋鈕。四個“功能”如下:

  • Fit training set well on cost function

  • Fit dev set well on cost function

  • Fit test set well on cost function

  • Performs well in real world

其中,第一條優化訓練集可以通過使用更復雜的網絡、Adam等優化算法來實現;第二條優化驗證集可以通過正則化,採用更多訓練樣本來實現;第三條優化測試集可以通過使用更多的驗證集樣本來實現;第四條提升實際應用模型可以通過更換驗證集,使用新的cost function來實現。概括來說,每一種“功能”對應不同的調節方法。而這些調節方法(旋鈕)只會對應一個“功能”,是正交的。

順便提一下,early stopping在模型功能調試中並不推薦使用。因爲early stopping在提升驗證集性能的同時降低了訓練集的性能。也就是說early stopping同時影響兩個“功能”,不具有獨立性、正交性。

3.單一數字評估指標

構建、優化機器學習模型時,單值評價指標非常必要。有了量化的單值評價指標後,就能根據這一指標比較不同超參數對應的模型的優劣。

查準率Precision:如果你的分類器(貓)認爲該圖片是貓,有一定的概率是正確的,這個概率就是查準率。

查全率Recall:在所有爲貓的圖片中,成功識別出多少。

不推薦使用這兩個來判斷模型優劣,需要一個結合二者的指標,也就是F1 score。

F1 Score綜合了Precision和Recall的大小,計算方法如下:

F1=\frac{2\cdot P\cdot R}{P+R}

除了F1 Score之外,我們還可以使用平均值作爲單值評價指標來對模型進行評估。多個模型對不同樣本的錯誤率不同,可以計算其平均性能,然後選擇平均錯誤率最小的那個模型。

4.滿足和優化指標

有時候,要把所有的性能指標都綜合在一起,構成單值評價指標是比較困難的。解決辦法是,我們可以把某些性能作爲優化指標(Optimizing metic),尋求最優化值,越優越好;而某些性能作爲滿意指標(Satisficing metic),只要滿足閾值就行了。

5.訓練/開發/測試集劃分

原則上應該儘量保證dev sets和test sets來源於同一分佈且都反映了實際樣本的情況。如果dev sets和test sets不來自同一分佈,那麼我們從dev sets上選擇的“最佳”模型往往不能夠在test sets上表現得很好。這就好比我們在dev sets上找到最接近一個靶的靶心的箭,但是我們test sets提供的靶心卻遠遠偏離dev sets上的靶心,結果這支肯定無法射中test sets上的靶心位置。
 

這裏寫圖片描述

6.開發集和測試集的大小

當樣本數量不多(小於一萬)的時候,通常將Train/dev/test sets的比例設爲60%/20%/20%,在沒有dev sets的情況下,Train/test sets的比例設爲70%/30%。當樣本數量很大(百萬級別)的時候,通常將相應的比例設爲98%/1%/1%或者99%/1%。

對於dev sets數量的設置,應該遵循的準則是通過dev sets能夠檢測不同算法或模型的區別,以便選擇出更好的模型。

對於test sets數量的設置,應該遵循的準則是通過test sets能夠反映出模型在實際中的表現。

實際應用中,可能只有train/dev sets,而沒有test sets。這種情況也是允許的,只要算法模型沒有對dev sets過擬合。但是,條件允許的話,最好是有test sets,實現無偏估計。

7.什麼時候該改變開發/測試集和指標

算法模型的評價標準有時候需要根據實際情況進行動態調整,目的是讓算法模型在實際應用中有更好的效果。

舉個貓類識別的例子。初始的評價標準是錯誤率,算法A錯誤率爲3%,算法B錯誤率爲5%。顯然,A更好一些。但是,實際使用時發現算法A會誤識別一些圖片當做是貓,但是B沒有出現這種情況。從用戶的角度來說,他們可能更傾向選擇B模型,雖然B的錯誤率高一些。這時候,就需要改變之前的評價標準。例如增加其他圖片的權重,增加其代價。

原來的cost function:

J=\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})

更改評價標準後的cost function:

J=\frac{1}{w^{(i)}}\sum_{i=1}^mw^{(i)}L(\hat y^{(i)},y^{(i)})

w^{(i)}=\begin{cases} 1, & x^{(i)}\ is\ non-porn\\ 10, & x^{(i)}\ is\ porn \end{cases}

概括來說,機器學習可分爲兩個過程:

  • Define a metric to evaluate classifiers

  • How to do well on this metric

也就是說,第一步是找靶心,第二步是通過訓練,射中靶心。但是在訓練的過程中可能會根據實際情況改變算法模型的評價標準,進行動態調整。

另外一個需要動態改變評價標準的情況是dev/test sets與實際使用的樣本分佈不一致。比如貓類識別樣本圖像分辨率差異。

這裏寫圖片描述

8.爲什麼是人的表現

機器學習模型的表現通常會跟人類水平表現作比較,如下圖所示:

這裏寫圖片描述

橫座標是訓練時間,縱座標是準確性。機器學習模型經過訓練會不斷接近human-level performance甚至超過它。但是,超過human-level performance之後,準確性會上升得比較緩慢,最終不斷接近理想的最優情況,我們稱之爲bayes optimal error。理論上任何模型都不能超過它,bayes optimal error代表了最佳表現。

實際上,human-level performance在某些方面有不俗的表現。例如圖像識別、語音識別等領域,人類是很擅長的。所以,讓機器學習模型性能不斷接近human-level performance非常必要也做出很多努力:

  • Get labeled data from humans.

  • Gain insight from manual error analysis: Why did a person get this right?

  • Better analysis of bias/variance.

9.可避免偏差

實際應用中,要看human-level error,training error和dev error的相對值。例如貓類識別的例子中,如果human-level error爲1%,training error爲8%,dev error爲10%。由於training error與human-level error相差7%,dev error與training error只相差2%,所以目標是儘量在訓練過程中減小training error,即減小偏差bias。如果圖片很模糊,肉眼也看不太清,human-level error提高到7.5%。這時,由於training error與human-level error只相差0.5%,dev error與training error只相差2%,所以目標是儘量在訓練過程中減小dev error,即方差variance。這是相對而言的。實際應用中,我們一般會用human-level error代表bayes optimal error。

training error與human-level error之間的差值稱爲bias,也稱作avoidable bias;把dev error與training error之間的差值稱爲variance。根據bias和variance值的相對大小,可以知道算法模型是否發生了欠擬合或者過擬合。增加訓練時間 , 使用較大的網絡結構 , 嘗試更先進的優化算法(如Adam) , 或者修改網絡結構(可能有效可能無效)可以減小偏差;採用更多的數據 , 其次使用正則化(Dropout, Batch Normzation , L1 , L2等等...) , 修改網絡結構(可能有效可能無效 , 也可能同時減少方差和偏差)可以減小方差。

10.理解人的表現

human-level performance能夠代表bayes optimal error。但是,human-level performance如何定義呢?舉個醫學圖像識別的例子,不同人羣的error有所不同:

  • Typical human : 3% error

  • Typical doctor : 1% error

  • Experienced doctor : 0.7% error

  • Team of experienced doctors : 0.5% error

不同人羣的錯誤率不同。一般來說,將表現最好的那一組作爲human-level performance。但是實際應用中,不同人可能選擇的human-level performance基準是不同的,這會帶來一些影響。

假如該模型training error爲0.7%,dev error爲0.8。如果選擇Team of experienced doctors,即human-level error爲0.5%,則bias比variance更加突出。如果選擇Experienced doctor,即human-level error爲0.7%,則variance更加突出。也就是說,選擇什麼樣的human-level error,有時候會影響bias和variance值的相對變化。當然這種情況一般只會在模型表現很好,接近bayes optimal error的時候出現。越接近bayes optimal error,模型越難繼續優化,因爲這時候的human-level performance可能是比較模糊難以準確定義的。

11.超過人的表現

對於自然感知類問題,例如視覺、聽覺等,機器學習的表現不及人類。但是在很多其它方面,機器學習模型的表現已經超過人類了,包括:

  • Online advertising

  • Product recommendations

  • Logistics(predicting transit time)

  • Loan approvals

實際上,機器學習模型超過human-level performance是比較困難的。但是隻要提供足夠多的樣本數據,訓練複雜的神經網絡,模型預測準確性會大大提高,很有可能接近甚至超過human-level performance。值得一提的是當算法模型的表現超過human-level performance時,很難再通過人的直覺來解決如何繼續提高算法模型性能的問題。

12.改善模型表現

提高機器學習模型性能主要要解決兩個問題:avoidable bias和variance。training error與human-level error之間的差值反映的是avoidable bias,dev error與training error之間的差值反映的是variance。

解決avoidable bias的常用方法包括:

  • Train bigger model

  • Train longer/better optimization algorithms: momentum, RMSprop, Adam

  • NN architecture/hyperparameters search

解決variance的常用方法包括:

  • More data

  • Regularization: L2, dropout, data augmentation

  • NN architecture/hyperparameters search

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章