Structuring Machine Learning Projects — week 1

Kevin Chiu
CodingJourney
Published in
3 min readAug 3, 2019

Week 1: ML Strategy(1)

下一篇 : week 2

這週課程主要是介紹機器學習中的一些策略和方法,讓我們能更有效率的建構一個機器學習模型

  1. Introduction to ML Strategy
  2. Setting up your goal
  3. 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

得出 A,B各自的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

--

--