吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)

吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)

1 Why ML Strategy


當咱們最初獲得一個深度神經網絡模型時,咱們可能但願從不少方面來對它進行優化,例如:算法

  • 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 Orthogonalization


機器學習中有許多參數、超參數須要調試。經過每次只調試一個參數,保持其它參數不變,而獲得的模型某一性能改變是一種最經常使用的調參策略,咱們稱之爲正交化方法(Orthogonalization)。app

Orthogonalization的核心在於每次調試一個參數只會影響模型的某一個性能。例如老式電視機旋鈕,每一個旋鈕就對應一個功能,調整旋鈕會調整對應的功能,而不會影響其它功能。也就是說彼此旋鈕之間是互不影響的,是正交的,這也是Orthogonalization名稱的由來。這種方法可以讓咱們更快更有效地進行機器學習模型的調試和優化。機器學習

對應到機器學習監督式學習模型中,能夠大體分紅四個獨立的「功能」,每一個「功能」對應一些可調節的惟一的旋鈕。四個「功能」以下:ide

  • 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

其中,第一條優化訓練集能夠經過使用更復雜NN,使用Adam等優化算法來實現;第二條優化驗證集能夠經過正則化,採用更多訓練樣原本實現;第三條優化測試集能夠經過使用更多的驗證集樣原本實現;第四條提高實際應用模型能夠經過更換驗證集,使用新的cost function來實現。歸納來講,每一種「功能」對應不一樣的調節方法。而這些調節方法(旋鈕)只會對應一個「功能」,是正交的。性能

順便提一下,early stopping在模型功能調試中並不推薦使用。由於early stopping在提高驗證集性能的同時下降了訓練集的性能。也就是說early stopping同時影響兩個「功能」,不具備獨立性、正交性。學習

3 Single Number Evaluation Metric


構建、優化機器學習模型時,單值評價指標很是必要。有了量化的單值評價指標後,咱們就能根據這一指標比較不一樣超參數對應的模型的優劣,從而選擇最優的那個模型。測試

舉個例子,好比有A和B兩個模型,它們的準確率(Precision)和召回率(Recall)分別以下:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
若是隻看Precision的話,B模型更好。若是隻看Recall的話,A模型更好。實際應用中,咱們一般使用單值評價指標F1 Score來評價模型的好壞。F1 Score綜合了Precision和Recall的大小,計算方法以下:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
而後獲得了A和B模型各自的F1 Score:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
從F1 Score來看,A模型比B模型更好一些。經過引入單值評價指標F1 Score,很方便對不一樣模型進行比較。優化

除了F1 Score以外,咱們還可使用平均值做爲單值評價指標來對模型進行評估。以下圖所示,A, B, C, D, E, F六個模型對不一樣國家樣本的錯誤率不一樣,能夠計算其平均性能,而後選擇平均錯誤率最小的那個模型(C模型)。
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)this

4 Satisficing and Optimizing Metic


有時候,要把全部的性能指標都綜合在一塊兒,構成單值評價指標是比較困難的。解決辦法是,咱們能夠把某些性能做爲優化指標(Optimizing metic),尋求最優化值;而某些性能做爲滿意指標(Satisficing metic),只要知足閾值就好了。

舉個貓類識別的例子,有A,B,C三個模型,各個模型的Accuracy和Running time以下表中所示:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
Accuracy和Running time這兩個性能不太合適綜合成單值評價指標。所以,咱們能夠將Accuracy做爲優化指標(Optimizing metic),將Running time做爲滿意指標(Satisficing metic)。也就是說,給Running time設定一個閾值,在其知足閾值的狀況下,選擇Accuracy最大的模型。若是設定Running time必須在100ms之內,那麼很明顯,模型C不知足閾值條件,首先剔除;模型B相比較模型A而言,Accuracy更高,性能更好。

歸納來講,性能指標(Optimizing metic)是須要優化的,越優越好;而滿意指標(Satisficing metic)只要知足設定的閾值就行了。

5 Train/Dev/Test Distributions


Train/dev/test sets如何設置對機器學習的模型訓練很是重要,合理設置可以大大提升模型訓練效率和模型質量。

原則上應該儘可能保證dev sets和test sets來源於同一分佈且都反映了實際樣本的狀況。若是dev sets和test sets不來自同一分佈,那麼咱們從dev sets上選擇的「最佳」模型每每不可以在test sets上表現得很好。這就比如咱們在dev sets上找到最接近一個靶的靶心的箭,可是咱們test sets提供的靶心卻遠遠偏離dev sets上的靶心,結果這支確定沒法射中test sets上的靶心位置。
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)

6 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,實現無偏估計。

7 When to Change Dev/Test Sets and Metrics


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

舉個貓類識別的例子。初始的評價標準是錯誤率,算法A錯誤率爲3%,算法B錯誤率爲5%。顯然,A更好一些。可是,實際使用時發現算法A會經過一些色情圖片,可是B沒有出現這種狀況。從用戶的角度來講,他們可能更傾向選擇B模型,雖然B的錯誤率高一些。這時候,咱們就須要改變以前單純只是使用錯誤率做爲評價標準,而考慮新的狀況進行改變。例如增長色情圖片的權重,增長其代價。

原來的cost function:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
更改評價標準後的cost function:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
歸納來講,機器學習可分爲兩個過程:

  • Define a metric to evaluate classifiers
  • How to do well on this metric

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

另一個須要動態改變評價標準的狀況是dev/test sets與實際使用的樣本分佈不一致。好比貓類識別樣本圖像分辨率差別。
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)

8 Why Human-level Performance


機器學習模型的表現一般會跟人類水平表現做比較,以下圖所示:
吳恩達《構建機器學習項目》精煉筆記(1)-- 機器學習策略(上)
圖中,橫座標是訓練時間,縱座標是準確性。機器學習模型通過訓練會不斷接近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 Avoidable Bias


實際應用中,要看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。這是相對而言的。

對於物體識別這類CV問題,human-level error是很低的,很接近理想狀況下的bayes optimal error。所以,上面例子中的1%和7.5%均可以近似當作是兩種狀況下對應的bayes optimal error。實際應用中,咱們通常會用human-level error表明bayes optimal error。

一般,咱們把training error與human-level error之間的差值稱爲誤差(bias),也稱做avoidable bias;把dev error與training error之間的差值稱爲方差(variance)。根據bias和variance值的相對大小,能夠知道算法模型是否發生了欠擬合或者過擬合。

10 Understanding Human-level Performance


咱們說過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

不一樣人羣他們的錯誤率不一樣。通常來講,咱們將表現最好的那一組,即Team of experienced doctors做爲human-level performance。那麼,這個例子中,human-level error就爲0.5%。可是實際應用中,不一樣人可能選擇的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 Surpassing Human-level Performance


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

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

12 Improving Your Model Performance


提升機器學習模型性能主要要解決兩個問題: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
相關文章
相關標籤/搜索