(3-1)結構化機器學習項目 | 機器學習策略(1)

目錄

正交化

評估指標

訓練_開發_測試集

改變開發、測試集和評估指標

機器學習與人的表現

改善模型的表現


正交化

在機器學習模型建立的整個流程中,我們需要根據不同部分反映的問題做出相應的解決措施。正交化是一種系統設計屬性,其確保修改系統的某部分而不會對系統的其他部分產生或傳播副作用,這樣可有效減少測試和開發時間。以汽車爲例,一輛車主要有三個控制,方向盤控制方向,油門和剎車控制速度,這樣設計出正交化的控制裝置,最理想的情況是和我們實際想控制的性質一致,這樣我們調整時就容易得多。可以讓車子以我們想要的方式運動。

在監督學習模型中,如果算法不能很好地擬合訓練集,可以設置一個旋鈕或者一組特定的旋鈕來調整算法使之很好地擬合訓練集,這個旋鈕可能是訓練更大的神經網絡或者更好的優化算法;如果算法對開發集的擬合很差,設置一組獨立的旋鈕調試,比如正則化、更大的訓練集;如果在測試集上表現不好,設置的旋鈕可能是更大的開發集;最後,如果在測試集上做得很好,但在真實的系統環境中表現不好,設置的旋鈕可能是修改開發測試集、修改代價函數。

評估指標

  • 單一數字評估指標

在訓練機器學習模型的時候,無論是調整超參數,還是嘗試更好的優化算法,爲問題設置一個單一數字評估指標,可以更好更快的評估模型。

如圖所示分別爲兩個分類器的Precision、Recall以及F1 score。如果以Precision爲指標,則分類器A的分類效果好;如果以Recall爲指標,則分類器B的分類效果好。所以在有兩個及以上判定指標的時候,就很難快速地二選一或者十選一,所以我們應該找到一個新的評估指標,能夠結合查準率和查全率,這樣可以更容易的評判出分類器A的效果更好(在機器學習文獻中,結合查準率和查全率的標準方法是所謂的F_1分數,F_1 = \frac{2}{\frac{1}{P}+\frac{1}{R}})。

  • 滿足和優化指標

有時把需顧及的評估指標組合成單一數字評估指標並不容易,在這種情況下,可以設立滿足和優化指標。如圖所示分別爲三個不同分類器性能表現,如果要求模型準確率儘可能的高,運行時間在100ms以內,我們可以以 Accuracy 爲優化指標,以 Running time 爲滿足指標,很容易從中選出B是滿足條件的最好的分類器。

一般地,如果要考慮N個指標,則選擇一個指標爲優化指標,其他N-1個指標都是滿足指標:

訓練_開發_測試集

設立訓練_開發_測試集的方式會大大影響建立機器學習應用方面取得進展的速度。

  • 開發、測試集設立規則

開發集和測試集需要來自同一分佈,且從所有數據中隨機選取(開發集和測試集要能夠反映你未來會得到的數據,認爲很重要的數據);

  • 開發、測試集大小

在現代機器學習中,我們更習慣操作規模大得多的數據集,比如說有1百萬個訓練樣本,我們將98%作爲訓練集,1%開發集,1%測試集這樣劃分會更合理。測試集是爲了在完成系統開發之後幫助我們評估投產系統的性能,除非我們需要對最終投產系統有一個很精確的指標,一般來說般來說測試集不需要上百萬個例子,能夠以高置信度評估系統整體性能即可。所以,一般我們會把大量數據分到訓練集,然後少量數據分到開發集和測試集,尤其是數據集非常大的 時候。

改變開發、測試集和評估指標

在設置完開發集和評估指標後,就像是把目標定在某個位置,讓團隊瞄準這個目標進行下一步。 但有時候在項目進行途中,我們可能會意識到目標的位置設置錯了。這種情況下,我們應該移動目標。

以構建貓分類器爲例來說,如果按下圖中所示以分類錯誤率爲指標,算法A的表現會更好。但在實際的測試中,算法A可能因爲某些原因,將很多色情圖片分類成了貓。在線上部署的時候,算法A會給愛貓人士推送更多更準確的貓的圖片,但同時也會給用戶推送一些色情圖片,這是不能忍受的。相比之下,算法𝐵有 5%的錯誤率,這樣分類器就得到較少的圖像,但它不會推送色情圖像。因此,從公司和用戶的角度來看,算法𝐵實際上是一個更好的算法,因爲它不讓任何色情圖像通過。這個時候我們就需要改變評估指標。

總而言之,如果評估指標無法正確評估算法的好壞,則需要重新定義一個新的評估指標。同理,如果在訓練開發測試的過程中得到的模型效果比較好,但是在實際應用中自己所真正關心的問題效果卻不好的時候,就需要改變開發、測試集。

機器學習與人的表現

  • 爲什麼人的表現

事實證明,機器學習在超越人的表現之前進展往往相當快,但當超越人的表現時,有時進展會變慢。一方面,人類水平在很多任務中離貝葉斯最優錯誤率(Bayesian,指理論上可能達到的最優錯誤率,就是說沒有任何辦法設計出一個𝑥到𝑦的函數,讓它能夠超過這個準確度)已經不遠了,所以在當超越人的表現之後也許沒有太多的空間繼續改善了。另一方面,只要機器學習的表現比人的表現更差,我們就可以使用某些工具來提高性能,但是一旦超越了人的表現,這些工具就沒那麼好用了。

  • 可避免偏差

如下圖所示,兩種學習算法均達到 8%的訓練錯誤率和 10%的開發錯誤率:

假設對於左邊的例子人類水平的錯誤率爲1%,可以看出在訓練集上的表現和人類水平的表現有很大差距,說明算法對訓練集的擬合併不好。所以在這種情況下,我們主要着手於減少偏差,可以試着訓練更大的神經網絡,或者跑久一點梯度下降;但如果人類水平的錯誤率爲7.5%,此時系統在訓練集上的表現還好,只是比人的表現差一點點,所以我們應該更專注於減少學習算法的方差,比如通過正則化讓開發錯誤率更接近訓練錯誤率。

一般將貝葉斯錯誤率或者對貝葉斯錯誤率的估計和訓練錯誤率之間的差值稱爲可避免偏差,我們希望一直提高訓練集表現,直到你接近貝葉斯錯誤率,但實際上我們也不希望做到比貝葉斯錯誤率更好,這理論上是不可能超過貝葉斯錯誤率的,除非過擬合。而這個訓練錯誤率和開發錯誤率之前的差值,就大概說明方差問題上的改善空間。

  • 理解人的表現

以醫學圖像分類問題爲例,假設有下面幾種分類的水平:普通人爲3% error,普通醫生爲1% error,專家爲 0.7% error,專家團隊爲0.5% error。那麼我們該如何界定人類水平錯誤率呢?人類水平錯誤率 3%,1%, 0.7%還是 0.5%?如果我們想要替代或估計貝葉斯錯誤率,人類水平誤差在這種情形下應定義爲0.5% error;如果在爲了部署系統或者做研究分析的背景下,也許超過一名普通醫生即可,即人類水平誤差在這種情形下定義爲1% error。

對人類水平誤差有一個大概的估計,可以讓我們去估計貝葉斯誤差,這樣可以讓我們更快的做出決定,是減少偏差還是減少方差。而這個決策技巧通常都很有效果,直到系統的性能開始超越人類,那麼我們對貝葉斯誤差的估計就不再準確了,再從減少偏差和減少方差方面提升系統性能就會比較困難了。

改善模型的表現

如果想要一個監督學習算法達到實用,我們基本需要完成兩件事情。 第一,算法對訓練集的擬合很好,也就是說可避免偏差很低。第二,算法在訓練集中做得很好,然後推廣到開發集和測試集也很好,也就是說方差不是太大。

如果要實現正交化,這裏我們可以設置一組旋鈕來修正可避免偏差問題,再設置另一套獨立的技巧來處理方差問題:

減少可避免偏差

  • 訓練更大的模型
  • 訓練更長時間、選擇更好的優化算法(Momentum、RMSprop、Adam)
  • 尋找更好的網絡架構(RNN、CNN)、尋找更好的超參數

減少方差

  • 收集更多的數據
  • 正則化(L2、dropout、數據增強)
  • 尋找更好的網絡架構(RNN、CNN)、尋找更好的超參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章