對於一個已經被構建好且產生初步結果的機器學習系統,爲了能使結果更令人滿意,往往還要進行大量的改進。鑑於之前的課程介紹了多種改進的方法,例如收集更多數據、調試超參數、調整神經網絡的大小或結構、採用不同的優化算法、進行正則化等等,我們有可能浪費大量時間在一條錯誤的改進路線上。
想要找準改進的方向,使一個機器學習系統更快更有效地工作,就需要學習一些在構建機器學習系統時常用到的策略。
一、正交化
正交化(Orthogonalization)的核心在於每次調整隻會影響模型某一方面的性能,而對其他功能沒有影響。這種方法有助於更快更有效地進行機器學習模型的調試和優化。
在機器學習(監督學習)系統中,可以劃分四個“功能”:
- 建立的模型在訓練集上表現良好;
- 建立的模型在驗證集上表現良好;
- 建立的模型在測試集上表現良好;
- 建立的模型在實際應用中表現良好。
其中,
- 對於第一條,如果模型在訓練集上表現不好,可以嘗試訓練更大的神經網絡或者換一種更好的優化算法(例如 Adam);
- 對於第二條,如果模型在驗證集上表現不好,可以進行正則化處理或者加入更多訓練數據;
- 對於第三條,如果模型在測試集上表現不好,可以嘗試使用更大的驗證集進行驗證;
- 對於第四條,如果模型在實際應用中表現不好,可能是因爲測試集沒有設置正確或者成本函數評估指標有誤,需要改變測試集或成本函數。
面對遇到的各種問題,正交化能夠幫助我們更爲精準有效地解決問題。
一個反例是早停止法(Early Stopping)。如果早期停止,雖然可以改善驗證集的擬合表現,但是對訓練集的擬合就不太好。因爲對兩個不同的“功能”都有影響,所以早停止法不具有正交化。雖然也可以使用,但是用其他正交化控制手段來進行優化會更簡單有效。
二、單一數字評估指標
構建機器學習系統時,通過設置一個量化的單一數字評估指標(single-number evaluation metric),可以使我們根據這一指標比較不同超參數對應的模型的優劣,從而選擇最優的那個模型。
例如,對於二分類問題,常用的評價指標是精確率(Precision)和召回率(Recall)。假設我們有 A 和 B 兩個分類器,其兩項指標分別如下:
實際應用中,我們通常使用綜合了精確率和召回率的單值評價指標 F1 Score 來評價模型的好壞。F1 Score 其實就是精準率和召回率的調和平均數(Harmonic Mean),比單純的平均數效果要好。
因此,我們計算出兩個分類器的 F1 Score。可以看出 A 模型的效果要更好。
通過引入單值評價指標,我們可以更方便快速地對不同模型進行比較。
三、優化指標和滿足指標
如果我們還想要將分類器的運行時間也納入考慮範圍,將其和精確率、召回率組合成一個單值評價指標顯然不那麼合適。這時,我們可以將某些指標作爲優化指標(Optimizing Matric),尋求它們的最優值;而將某些指標作爲滿足指標(Satisficing Matric),只要在一定閾值以內即可。
在這個例子中,準確率就是一個優化指標,因爲我們想要分類器儘可能做到正確分類;而運行時間就是一個滿足指標,如果你想要分類器的運行時間不多於某個閾值,那最終選擇的分類器就應該是以這個閾值爲界裏面準確率最高的那個。
四、動態改變評價指標
對於模型的評價標準優勢需要根據實際情況進行動態調整,以讓模型在實際應用中獲得更好的效果。
例如,有時我們不太能接受某些分類錯誤,於是改變單純用錯誤率作爲評價標準,給某些分類錯誤更高的權重,以從追求最小錯誤率轉爲追求最小風險。
五、訓練 / 開發 / 測試集劃分
我們一般將數據集分爲訓練集train、開發(驗證)集dev、測試集test。構建機器學習系統時,我們採用不同的學習方法,在訓練集上訓練出不同的模型,然後使用驗證集對模型的好壞進行評估,確信其中某個模型足夠好時再用測試集對其進行測試。
因此,訓練集、開發集、測試集的設置對於機器學習模型非常重要,合理的設置能夠大大提高模型訓練效率和模型質量。
1、開發集和測試集的分佈
開發集和測試集的數據來源應該相同(來自同一分佈)、和機器學習系統將要在實際應用中面對的數據一致,且必須從所有數據中隨機抽取。這樣,系統才能做到儘可能不偏離目標。
2、開發集和測試集的大小
過去數據量較小(小於 1 萬)時,通常將數據集按照以下比例進行劃分:
- 無開發集的情況:70% / 30%;
- 有開發集的情況:60% / 20% / 20%;
這是爲了保證開發集和測試集有足夠的數據。現在的機器學習時代數據集規模普遍較大,例如 100 萬數據量,這時將相應比例設爲 98% / 1% / 1% 或 99% / 1% 就已經能保證開發集和測試集的規模足夠。
測試集的大小應該設置得足夠大,能夠以高置信度評估系統的整體性能。
開發集的大小也要設置得足夠用於評估幾個不同的模型。應該根據實際情況對數據集靈活地進行劃分,而不是死板地遵循老舊的經驗。
在大數據時代,應該把大量數據分到訓練集,少量數據分到開發和測試。
六、比較人類表現水平
很多機器學習模型的誕生是爲了取代人類的工作,因此其表現也會跟人類表現水平作比較。
上圖展示了隨着時間的推進,機器學習系統和人的表現水平的變化。一般的,當機器學習超過人的表現水平後,它的進步速度逐漸變得緩慢,最終性能無法超過某個理論上限,這個上限被稱爲貝葉斯最優誤差(Bayes Optimal Error)。
貝葉斯最優誤差一般認爲是理論上可能達到的最優誤差,換句話說,其就是理論最優函數,任何從 x 到精確度 y 映射的函數都不可能超過這個值。例如,對於語音識別,某些音頻片段嘈雜到基本不可能知道說的是什麼,所以完美的識別率不可能達到 100%。
因爲人類對於一些自然感知問題的表現水平十分接近貝葉斯最優誤差,所以當機器學習系統的表現超過人類後,就沒有太多繼續改善的空間了。
也因此,只要建立的機器學習模型的表現還沒達到人類的表現水平時,就可以通過各種手段來提升它。例如採用人工標記過的數據進行訓練,通過人工誤差分析瞭解爲什麼人能夠正確識別,或者是進行偏差、方差分析。
當模型的表現超過人類後,這些手段起的作用就微乎其微了。
1、可避免偏差
通過與貝葉斯最優誤差,或者說,與人類表現水平的比較,可以表明一個機器學習模型表現的好壞程度,由此判斷後續操作應該注重於減小偏差還是減小方差。
模型在訓練集上的誤差與人類表現水平的差值被稱作可避免偏差(Avoidable Bias)。可避免偏差低便意味着模型在訓練集上的表現很好,而訓練集與驗證集之間錯誤率的差值越小,意味着模型在驗證集與測試集上的表現和訓練集同樣好。
如果可避免偏差大於訓練集與驗證集之間錯誤率的差值,之後的工作就應該專注於減小偏差;反之,就應該專注於減小方差。
2、理解人類表現水平
我們一般用人類水平誤差(Human-level Error)來代表貝葉斯最優誤差(或者簡稱貝葉斯誤差)。對於不同領域的例子,不同人羣由於其經驗水平不一,錯誤率也不同。一般來說,我們將表現最好的作爲人類水平誤差。但是實際應用中,不同人選擇人類水平誤差的基準是不同的,這會帶來一定的影響。我們需要根據我們的目標去選定。
例如,如果某模型在訓練集上的錯誤率爲 0.7%,驗證集的錯誤率爲 0.8%。如果選擇的人類水平誤差爲 0.5%,那麼偏差(bias)比方差(variance)更加突出;而如果選擇的人類水平誤差爲 0.7%,則方差更加突出。也就是說,根據人類水平誤差的不同選擇,我們可能因此選擇不同的優化操作。
這種問題只會發生在模型表現很好,接近人類水平誤差的時候纔會出現。人類水平誤差給了我們一種估計貝葉斯誤差的方式,而不是像之前一樣將訓練的錯誤率直接對着 0% 的方向進行優化。
當機器學習模型的表現超過了人類水平誤差時,很難再通過人的直覺去判斷模型還能夠往什麼方向優化以提高性能。
七、總結
想讓一個監督學習算法達到使用程度,應該做到以下兩點:
- 算法對訓練集的擬合很好,可以看作可避免偏差很低;
- 推廣到開發集和測試集效果也很好,即方差不是很大。
根據正交化的思想,我們有一些措施可以獨立地優化二者之一。