Structuring Machine Learning Projects — week 1
Week 1: ML Strategy(1)
下一篇 : week 2
這週課程主要是介紹機器學習中的一些策略和方法,讓我們能更有效率的建構一個機器學習模型
- Introduction to ML Strategy
- Setting up your goal
- Comparing to human-level performance
1-1. Why ML Strategy
這些是一些常見的方法來增進模型效能
1-2. Orthogonalization
機器學習中有許多參數、超參數需要調試。通過每次只調試一個參數,保持其它參數不變,而得到的模型某一性能改變是一種最常用的調參策略,我們稱之為正交化方法(Orthogonalization)。
Orthogonalization的核心在於每次調試一個參數只會影響模型的某一個性能。
例如 1. 老式電視機旋鈕,每個旋鈕就對應一個功能,調整旋鈕會調整對應的功能,而不會影響其它功能。也就是說彼此旋鈕之間是互不影響的,是正交的,這也是Orthogonalization名稱的由來。這種方法能夠讓我們更快更有效地進行機器學習模型的調試和優化。範例2.也是將汽車的控制將方向盤的角度和車子的速度作為正交化的關係。
對應到機器學習監督式學習模型中,可以大致分成四個獨立的“功能”,每個“功能”對應一些可調節的唯一的旋鈕。四個“功能”如下:
其中,
第一條優化訓練集可以通過使用更複雜NN,使用Adam等優化算法來實現;
第二條優化驗證集可以通過正則化,採用更多訓練樣本來實現;
第三條優化測試集可以通過使用更多的驗證集樣本來實現;
第四條提昇實際應用模型可以通過更換驗證集,使用新的cost function來實現。
概括來說,每一種“功能”對應不同的調節方法。而這些調節方法(旋鈕)只會對應一個“功能”,是正交的。
順便提一下,Early stopping在模型功能調試中並不推薦使用。因為early stopping在提升驗證集性能的同時降低了訓練集的性能。也就是說early stopping同時影響兩個“功能”,不具有獨立性、正交性。
2-1. Single number evaluation metric
構建、優化機器學習模型時,單值評價指標非常必要。有了量化的單值評價指標後,我們就能根據這一指標比較不同超參數對應的模型的優劣,從而選擇最優的那個模型。
舉個例子,比如有A和B兩個模型,它們的準確率(Precision)和召回率(Recall)分別如下:
Precision: 例如你的分類器說是貓的資料中,有多少%是真的貓。因此當Precision=95%,那他預測某張圖為貓,有95%的機會是貓。
Recall: 例如拿所有貓的圖片,你的分類器有多少%的機會能正確認出來。因此當recall=90%,表示在資料所有貓的圖裡面,分類器能找出全部的90%。
但因這兩個會有tradeoff問題,因此我們使用一種結合兩種的指標:F1 score
從F1 Score來看,A模型比B模型更好一些。通過引入單值評價指標F1 Score,很方便對不同模型進行比較。
除了F1 Score之外,我們還可以使用平均值作為單值評價指標來對模型進行評估。如下圖所示,A, B, C, D, E, F六個模型對不同國家樣本的錯誤率不同,可以計算其平均性能,然後選擇平均錯誤率最小的那個模型(C模型)。
2-2. Satisficing and Optimizing metric
假設我們不只對準確率(F1)有要求,我們同時也對模型的執行時間(認出一張圖片)的效率也有所要求,因此我們需要衡量多種指標的比較。
但有時候,要把所有的性能指標都綜合在一起,構成單值評價指標是比較困難的。解決辦法是,我們可以把某些性能作為優化指標(Optimizing metic),尋求最優化值;而某些性能作為滿意指標(Satisficing metic),只要滿足某設定值(threshlod)就行了。
舉個貓類識別的例子,有A,B,C三個模型,各個模型的Accuracy和Running time如下表中所示:
Accuracy和Running time這兩個性能不太合適綜合成單值評價指標。
因此,我們可以將Accuracy作為優化指標(Optimizing metic),將Running time作為滿意指標(Satisficing metic)。也就是說,給Running time設定一個threshold,在其滿足其值的情況下,選擇Accuracy最大的模型。如果設定Running time必須在100ms以內,那麼很明顯,模型C不滿足閾值條件,首先剔除;模型B相比較模型A而言,Accuracy更高,性能更好。
概括來說,性能指標(Optimizing metic)是需要優化的,越優越好;而滿意指標(Satisficing metic)只要滿足設定的threshold就好了。
假設當你現在有N個指標是你在意的,較佳的辦法是設定:1 Optimizing metic + N-1 Satisficing metrics
2-3. Train/dev/test distributions
Train/dev/test sets如何設置對機器學習的模型訓練非常重要,合理設置能夠大大提高模型訓練效率和模型質量。
原則上應該盡量保證dev sets和test sets來源於同一分佈且都反映了實際樣本的情況。
2-4. Size of the dev and test sets
在之前的課程中我們已經介紹過,當樣本數量不多(小於一萬)的時候,通常將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,實現無偏估計。
2-5. When to change dev/test sets and metrics
如何設定開發集和衡量指標,就像是放一個靶然後訓練模型去瞄準它。但有時計畫做到一半時,你卻會發現你的靶放錯位置了。因此算法模型的評價標準有時候需要根據實際情況進行動態調整,目的是讓算法模型在實際應用中有更好的效果。
舉個貓類識別的例子。初始的評價標準是錯誤率,算法A錯誤率為3%,算法B錯誤率為5%。顯然,A更好一些。但是,實際使用時發現算法A會通過一些色情圖片,但是B沒有出現這種情況。從用戶的角度來說,他們可能更傾向選擇B模型,雖然B的錯誤率高一些。
這時候,我們就需要改變之前單純只是使用錯誤率作為評價標準,而考慮新的情況進行改變。例如增加色情圖片的權重(如下圖的ω),增加其代價。
以下圖的權重ω為例,當圖片為色情圖片,其錯誤率會大大提高(因為*ω),便能使模型減少選到該色情圖片的機率。
概括來說,機器學習可分為兩個過程:
- Define a metric to evaluate classifiers
- How to do well on this metric
第一步是找靶心,第二步是通過訓練,射中靶心。但是在訓練的過程中可能會根據實際情況改變算法模型的評價標準,進行動態調整。
另外一個需要動態改變評價標準的情況是dev/test sets與實際使用的樣本分佈不一致。比如貓類識別樣本圖像分辨率差異。
3-1. Why human-level performance
Comparing ML model to human-level performance
圖中,橫坐標是訓練時間,縱坐標是準確性。機器學習模型經過訓練會不斷接近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.
3-2. Avoidable bias
我們把training error與human-level error之間的差值稱為bias,也稱作avoidable bias;把dev error與training error之間的差值稱為variance。
根據bias和variance值的相對大小,可以知道算法模型是否發生了欠擬合或者過擬合。
3-3. Understanding human-level performance
我們說過human-level performance能夠代表bayes optimal error。但是,human-level performance如何定義呢?舉個醫學圖像識別的例子,不同人群的error有所不同:
不同人群他們的錯誤率不同。一般來說,我們將表現最好的那一組,即Team of experienced doctors作為human-level performance。那麼,這個例子中,human-level error就為0.5%。但是實際應用中,不同人可能選擇的human-level performance基準是不同的,這會帶來一些影響。
3-4. Surpassing human-level performance
對於自然感知類問題,例如視覺、聽覺等,機器學習的表現不及人類。但是在很多其它方面,機器學習模型的表現已經超過人類了,包括:
- Online advertising
- Product recommendations
- Logistics(predicting transit time)
- Loan approvals
上述四項的共通點是
1. 都是從結構化的資料學習出來:可能是使用者點擊的資料庫, 購買歷史的資料庫, 移動時間資料庫, 貸款申請與結果資料庫
2. 而且這些也都與自然感官無關(e.g. CV, NLP, Speech Recognition…)
3. 該領域的系統看過的資料可能超過人類,因此表現自然更好
實際上,機器學習模型超過human-level performance是比較困難的。但是只要提供足夠多的樣本數據,訓練複雜的神經網絡,模型預測準確性會大大提高,很有可能接近甚至超過human-level performance。
3-5. Improving your model performance : 總結
提高機器學習模型性能主要要解決兩個問題:avoidable bias和variance。
avoidable bias : human-level error與training error之間的差值
variance : training error與dev error之間的差值。
解決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