3.1)深度学习笔记:机器学习策略(1)
目錄
1)Why ML Strategy
2)Orthogonalization
3)Single number evaluation metric
4)Satisficing and optimizing metrics
5)訓練/開發/測試集劃分(Train/dev/test distributions)
6)Size of dev and test sets
7)When to change dev/test sets and metrics
8)Why human-level performance?
9)Avoidable bias
10)Understanding human-level performance
11)Surpassing human-level performance
12)Improving your model performance
以下筆記是吳恩達老師深度學習課程第三門課第一周的的學習筆記:ML Strategy。筆記參考了黃海廣博士的內容,在此表示感謝。
1)Why ML Strategy
假設你正在調試你的貓分類器,經過一段時間的調整,你的系統達到了90%的準確率,但你還是認為你的應用程序不夠好,此時我們想對它進行改善,那么我們可以怎么做呢:
- 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
機器學習系統中有許多參數、超參數需要調試。每次只調試一個參數、而保持其它參數不變的方法稱為正交化方法。對應到機器學習監督學習模型中,可以按照以下四個步驟進行調試:
-
Fit training set well on cost function(可以通過使用更大的NN或Adam等優化算法來實現)
-
Fit dev set well on cost function(通過正則化或收集更多訓練樣本來實現)
-
Fit test set well on cost function(使用更多開發集來實現)
-
Performs well in real world(改變開發集或損失函數)
順便提一下,early stopping在模型調試中并不推薦使用。因為early stopping在提升開發集性能的同時也會降低訓練集的性能。
3)Single number evaluation metric
應用機器學習是一個非常經驗性的過程,我們通常有一個想法,編程序,跑實驗,看看效果如何,然后使用這些實驗結果來改善你的想法,然后繼續走這個循環,不斷改進你的算法
比如說對于你的貓分類器,之前你搭建了某個分類器,通過改變超參數,還有改變訓練集等手段,你現在訓練出來了一個新的分類器B,所以評估你的分類器的一個合理方式是觀察它的查準率(precision)和查全率(recall)。
但使用查準率和查全率作為評估指標的時候,有個問題,如果分類器A在查全率上表現更好,分類器B在查準率上表現更好,就很難判斷哪個分類器更好。此時需要找到一個新的評估指標,能夠結合查準率和查全率。
在機器學習文獻中,結合查準率和查全率的標準方法是所謂的分數,分數的細節并不重要。但非正式的,你可以認為這是查準率和查全率的平均值。正式來看,分數的定義是這個公式:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
但在這個例子中,可以馬上看出,分類器的分數更高。假設分數是結合查準率和查全率的合理方式,可以快速選出分類器A,淘汰分類器B。
除了F1 Score之外,我們還可以使用平均值作為單值評價指標來對模型進行評估。如下圖所示,A, B, C, D, E, F六個模型對不同國家樣本的錯誤率不同,可以計算其平均性能,然后選擇平均錯誤率最小的那個模型(C模型)
4)Satisficing and optimizing metrics
要把顧及到的所有事情組合成單實數評估指標有時并不容易,在那些情況里,有時候設立滿足和優化指標是很重要的。
假設你已經決定你很看重貓分類器的分類準確度,這可以是分數或者用其他衡量準確度的指標。但除了準確度之外,我們還需要考慮運行時間,就是需要多長時間來分類一張圖。分類器需要80毫秒,需要95毫秒,需要1500毫秒,就是說需要1.5秒來分類圖像。
Accuracy和Running time不太容易綜合成單一評價指標。因此,可以將Accuracy作為優化指標(Optimizing metic),將Running time作為滿足指標(Satisficing metic)。也就是說,給Running time設定一個閾值,在其滿足閾值的情況下,選擇Accuracy最高的模型。
概括來說,性能指標(Optimizing metic)是需要優化的,越優越好;而滿足指標(Satisficing metic)只要滿足設定的閾值就好了。
5)訓練/開發/測試集劃分(Train/dev/test distributions)
設立訓練集,開發集和測試集的方式大大影響了你或者你的團隊在建立機器學習應用方面取得進展的速度。同樣的團隊,即使是大公司里的團隊,在設立這些數據集的方式,真的會讓團隊的進展變慢而不是加快,我們看看應該如何設立這些數據集,讓你的團隊效率最大化。
舉個例子,你要開發一個貓分類器,然后你在這些區域里運營,美國、英國、其他歐洲國家,南美洲、印度、中國,其他亞洲國家和澳大利亞,那么你應該如何設立開發集和測試集呢?
在左邊的例子中,設立開發集和測試集時存在一個問題,當在測試集上測試系統時,來自這四個國家或者說下面這四個地區的數據(即測試集數據)和開發集里的數據可能差異很大,在測試集上的表現卻不佳。
所以,為了避免這種情況,我建議的是你將所有數據隨機洗牌,放入開發集和測試集,所以開發集和測試集都有來自八個地區的數據,并且開發集和測試集都來自同一分布。
6)Size of 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能夠反映出模型在實際中的表現。
7)When to change dev/test sets and metrics
來看一個例子,假設你在構建一個貓分類器,試圖找到很多貓的照片,向你的愛貓人士用戶展示,你決定使用的指標是分類錯誤率。所以算法A和B分別有3%錯誤率和5%錯誤率,所以算法A似乎做得更好。
但實際情況可能如下:算法A由于某些原因,把很多色情圖像分類成貓了。會給用戶推送一些色情圖像,這是完全不能接受的。相比之下,算法B有5%的錯誤率,雖然分類器就得到較少正確的圖像,但它不會推送色情圖像。用戶的角度來說,他們可能更傾向選擇B模型,雖然B的錯誤率高一些。這時候,我們就需要改變之前單純只是使用錯誤率作為評價標準,而考慮新的情況進行改變。例如增加色情圖片的權重,增加其代價。
更改后的損失函數:
再看一個例子,假設你的兩個貓分類器A和B,分別有用開發集評估得到3%的錯誤率和5%的錯誤率。或者甚至用在網上下載的圖片構成的測試集上,這些是高質量,取景框很專業的圖像。但也許你在部署算法產品時,你發現算法B看起來表現更好,即使它在開發集上表現不錯,你發現你一直在用從網上下載的高質量圖片訓練,但當你部署到手機應用時,算法作用到用戶上傳的圖片時,那些圖片取景不專業。此時就要更改開發集。
8)Why human-level performance?
機器學習模型的表現通常會跟人類水平表現作比較,如下圖所示:
圖中,橫坐標是訓練時間,縱坐標是準確性。機器學習模型經過訓練會不斷接近human-level performance甚至超過它。但是,超過human-level performance之后,準確性會上升得比較緩慢,最終不斷接近理想的最優情況,我們稱之為bayes optimal error。理論上任何模型都不能超過它,bayes optimal error代表了最佳表現。
9)Avoidable bias
我們經常使用貓分類器來做例子,比如人類具有近乎完美的準確度,所以人類水平的錯誤是1%。在這種情況下,如果您的學習算法達到8%的訓練錯誤率和10%的開發錯誤率,那么你也許想在訓練集上得到更好的結果。事實上,你的算法在訓練集上的表現和人類水平的表現有很大差距的話,說明你的算法對訓練集的擬合并不好。所以從減少偏差和方差的工具這個角度看,在這種情況下,我會把重點放在減少偏差上。你需要做的是,比如說訓練更大的神經網絡,或者跑久一點梯度下降,就試試能不能在訓練集上做得更好。
但現在我們看看同樣的訓練錯誤率和開發錯誤率,假設人類的表現不是1%,我們就把它抄寫過來。但你知道,在不同的應用或者說用在不同的數據集上,假設人類水平錯誤實際上是7.5%,也許你的數據集中的圖像非常模糊,即使人類都無法判斷這張照片中有沒有貓。這個例子可能稍微更復雜一些,因為人類其實很擅長看照片,分辨出照片里有沒有貓。但就為了舉這個例子,比如說你的數據集中的圖像非常模糊,分辨率很低,即使人類錯誤率也達到7.5%。在這種情況下,即使你的訓練錯誤率和開發錯誤率和其他例子里一樣,你就知道,也許你的系統在訓練集上的表現還好,它只是比人類的表現差一點點。在第二個例子中,你可能希望專注減少這個分量,減少學習算法的方差,也許你可以試試正則化,讓你的開發錯誤率更接近你的訓練錯誤率。
在這里注意是判斷,我們是過擬合還是欠擬合了。
10)Understanding human-level performance
我們一般用人類水平誤差(Human-level Error)來代表貝葉斯最優誤差(bayes optimal error)。對于不同領域的例子,不同人群由于其經驗水平不一,錯誤率也不同。一般來說,我們將表現最好的作為人類水平誤差。但是實際應用中,不同人選擇人類水平誤差的基準是不同的,這會帶來一定的影響。
舉個醫學圖像識別的例子,不同人群的error有所不同:
- ??? Typical human : 3% error
- ??? Typical doctor : 1% error
- ??? Experienced doctor : 0.7% error
- ??? Team of experienced doctors : 0.5% error,
如果某模型在訓練集上的錯誤率為 0.7%,驗證集的錯誤率為 0.8%。如果選擇的人類水平誤差為 0.5%,那么偏差(bias)比方差(variance)更加突出;而如果選擇的人類水平誤差為 0.7%,則方差更加突出。也就是說,根據人類水平誤差的不同選擇,我們可能因此選擇不同的優化操作。
這種問題只會發生在模型表現很好,接近人類水平誤差的時候才會出現。人類水平誤差給了我們一種估計貝葉斯誤差的方式,而不是像之前一樣將訓練的錯誤率直接對著 0% 的方向進行優化。
當機器學習模型的表現超過了人類水平誤差時,很難再通過人的直覺去判斷模型還能夠往什么方向優化以提高性能。
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
想讓一個監督學習算法達到使用程度,應該做到以下兩點:
算法對訓練集的擬合很好,可以看作可避免偏差很低;
推廣到驗證集和測試集效果也很好,即方差不是很大
總結
以上是生活随笔為你收集整理的3.1)深度学习笔记:机器学习策略(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七彩虹首发三款GTX 1630:经典战斧
- 下一篇: ubuntu18.04下安装grafan