1. 程式人生 > >吳恩達《深度學習-結構化機器學習專案》1--機器學習策略(1)

吳恩達《深度學習-結構化機器學習專案》1--機器學習策略(1)

1. Why ML Strategy為什麼需要機器學習策略,機器學習策略指的是一些分析機器學習問題的方法。讓我們從一個例子開始:假設訓練的分類器準確率為90%,想要提高準確率應該怎麼辦呢?我們有很多選擇可以嘗試,但嘗試錯誤的話往往會浪費大量時間,機器學習策略就是在嘗試之前幫忙分析出哪種或哪幾種方法可能性最大,

2. Orthogonalization正交化

搭建機器學習系統的挑戰之一就是有太多的東西如超參可以改變,思維清晰的知道要調整什麼來達到某種效果,這個步驟稱之為正交化,正交化字面意思就是呈90度直角,互不影響,比如一輛車,設計的方向盤是調整前進方向的,改變他不會影響速度,而調整速度同樣也不會影響方向,這種修改某一部分或功能而不會影響其他部分或功能的設計思想就是正交化。
對應到機器學習監督式學習模型中,可以大致分成四個獨立的“功能”,每個“功能”對應一些可調節的唯一的旋鈕,如上圖,

第一條即若在訓練集上表選不好,可以通過使用更復雜NN,或使用Adam等優化演算法來調整;第二條,若在訓練集表現很好,而在驗證集表現不好,可以通過正則化,或採用更多訓練樣本來調整;第三條,在訓練集和驗證集表現都不錯,在測試集表現不好,說明很可能過擬合了,可以通過使用更多的驗證集樣本來調整;第四條在實際應用中表現不好,可以通過更換驗證集,或使用新的cost function來調整。

值得一提的是,之前講到的early stopping同時影響在訓練集和驗證集的表現,不具有正交性。

3. Single number evaluation metric
單一數字評估指標

構建、優化機器學習模型時,單一數值評價指標非常必要,有了評價指標後,我們就能根據這一指標比較不同超引數對應的模型的優劣,從而幫助我們快速的選擇最優模型。常用的單一數字評估指標有F1分數和平均數:--F1分數是查準率(Precision)和召回率(Recall)的調和平均數P:用模型測試被劃分為某類中,真正屬於此類的比率R: 實際屬於某類,而被模型正確劃分到此類的比率F1 = (2*P*R)/(P+R)

上圖兩個模型,如果只看Precision的話,B模型更好。如果只看Recall的話,A模型更好,無法確定如何選擇,所以需要單一數字的評估指標F1。

--平均數對於上圖的例子,看著一堆資料實在一時無法判斷哪個模型更好,但是假如平均數(最後一列)之後,就一目瞭然了。4. Satisficing and Optimizing metic
有時候,要把所有的效能指標都綜合在一起,構成單值評價指標是比較困難的。解決辦法是,我們可以把某些效能作為優化指標(Optimizing metic),尋求最優化值;而某些效能作為滿意指標(Satisficing metic),只要滿足閾值就行了。舉例說明:一般來說,如果有N個指標,通常合理的做法是選擇一個作為優化指標,儘量去優化它,而其餘N-1個作為滿足指標,只要滿足一定閾值就可以。5. Train/dev/test distributionsdev set開發集(也叫驗證集)+單一數字評估指標=目標

也就是由開發集和單一數字評估指標來確定優化的最終位置,所以其選擇對整個模型最終的效果來說至關重要,因為一旦選擇有偏差,所有的優化工作就需要重新來做。選擇開發集最重要就是:一定要保證其是和訓練集來自同一分佈的隨機樣本,且樣本能夠反映真實情況。

6. Size of the dev and test sets在深度學習中,開發集和測試集的設定也有所不同,這裡推薦一些最佳做法:在大資料時代,當樣本數量很大(百萬級別)的時候,通常要提高訓練集的比例,如將訓練集/開發集/測試集的比例設為98%/1%/1%或者99%/1%。

對於dev sets數量的設定,應該遵循的準則是通過dev sets能夠檢測不同演算法或模型的區別,以便選擇出更好的模型。對於test sets數量的設定,應該遵循的準則是通過test sets能夠反映出模型在實際中的表現。

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

7. When to change dev/test sets and metrics之前講過,在建立模型過程中,要先確定一個目標,然後整個團隊向著這個目標優化模型,如果優化過程中發現目標有偏差怎麼辦?在什麼時候修正目標?

1)重新定義一個評估指標

如果發現評估指標不能正確評估好演算法的排名,那麼就需要花時間重新定義一個評估指標。舉例說明,如果建立一個貓的識別器,以分類誤差作為評估指標,演算法A錯分率為3%,演算法B錯分率為5%,看起來A演算法更好,但是實際中公司或使用者更偏愛演算法B,因為演算法A總會把一些色情圖片錯分為貓,這是使用者極為不喜歡的。這時候就需要修改一下評估指標,比如:

這樣做相當於對錯分為貓類的色情圖片加大懲罰,從而使得演算法排序更為合理。

以正交化的思想來概括,機器學習可以分為兩個獨立的部分:

1)設定目標2)瞄準和射擊目標2)修改開發測試集當模型在訓練集測試集表現都很好,但是在實際中表現卻不好的時候,可以考慮修改評估指標或開發測試集。

比如,訓練測試的樣本都是高清影象,而使用者使用的影象比較模糊,這時候就要考慮更換訓練開發集,以便能更好的反映真實情況。

建議:如果不能一開始就定義一個完美的評估指標和開發集,那麼先迅速定義一個,然後用它來驅動團隊的迭代,當發現評估指標或開發集不夠好的時候,可以立即對其進行修改。但是不要在沒有定義評估指標或開發集的時候跑太久,那樣會大大降低整個團隊的迭代和改善演算法的速度。8. Why human-level performance為什麼機器學習要跟人類水平比較呢?

研究發現,當機器學習向人類水平靠近的時候,其進展是十分迅速的,一旦其超過人類水平,其進展就會越來越緩慢。

不斷接近理想最優的情況下,效能無法超越某個理論上線,這就是所謂的bayes optimal error貝葉斯最優誤差,即理論上能達到的最優誤差,理論上x到y的最優函式,也就是無法設計出一個函式,可以超過一定的準確度。

因為和人類表現比較,如果演算法不如人類表現好,可以通過一些手段來幫助提升演算法,但是一旦演算法超過人類之後,這些手段就沒用了,所以進展會比較緩慢。9. Avoidable bias
可避免誤差:貝葉斯誤差或貝葉斯誤差的近似估計和測試集之間的誤差稱為可避免誤差。

因為人類很擅長識圖,所以對於這類問題,通常以人類水平誤差代替貝葉斯最優誤差,所以上圖A中的可避免誤差就是7%,B的可避免誤差是0.5%,所以A的問題是模型對資料擬合不夠好,即偏差過大,可以訓練更大的網路或訓練更久來解決這個問題,B的問題是方差過大,可以通過正則化或者採用更大的訓練集來解決。

10. Understanding human-level performance

1)怎樣定義人類水平誤差?

人類水平誤差是用來代替貝葉斯最優誤差,也就是理論上的最優值,所以人類水平誤差一般取最小的誤差,比如醫學影象診斷的例子,不同人群的error有所不同:Typical human:3% error

Typical doctor: 1% error

Experienced doctor: 0.7% error

Team of experienced doctors: 0.5% error

那麼0.5%的誤差即可以作為人類水平誤差來代替貝葉斯最優誤差。但是實際中根據不同的目的,比如只需要超過一半人類水平就足夠用了,那麼也可以選1%來作為人類水平誤差。所以定義人類水平誤差的時候,需要根據目的來確定。

11. Surpassing human-level performance對於結構化資料,計算機往往做得比單個人類出色,對於自然感知問題,例如視覺、聽覺等,機器學習的表現不及人類,不過最新的研究在個別領域也有超過人類水平的。12. Improving your model performance

提高機器學習模型效能主要要解決兩個問題:avoidable bias和variance。方法見上圖。