回覆列表
-
1 # 機器之心Pro
-
2 # 機器不學習
資料,資料,資料,重要的事情說三遍。
演算法模型只是提升機器學習效果的一部分。很多時候依賴資料樣本的分佈和特徵的選取,就拿LR來說,模型很簡單,但是選取不同的樣本和特徵最後效果完全不一樣。當然,在同樣資料的情況下,模型提升的空間有限。
資料,資料,資料,重要的事情說三遍。
演算法模型只是提升機器學習效果的一部分。很多時候依賴資料樣本的分佈和特徵的選取,就拿LR來說,模型很簡單,但是選取不同的樣本和特徵最後效果完全不一樣。當然,在同樣資料的情況下,模型提升的空間有限。
搭建機器學習系統好幾周,效能卻不盡如人意?Kritika Jalan 近日在 Medium 上發表文章,總結她從吳恩達的 Coursera 課程《Structuring Machine Learning Projects》中學到的相關經驗。
如何選擇策略以改進演算法表現
你已經花了好幾個星期構建機器學習系統。然而,它的效能卻不能令你滿意。你想到了許多方法來提高演算法效能,比如收集更多資料、新增更多隱藏單元、增加更多層、改變網路架構、更改基本演算法等。但是,哪種方案會給系統帶來最大改善呢?你要麼就得把這些方法都嘗試一遍,投入大量的時間找出適合的方法。或者,你其實可以利用吳恩達的經驗和技巧。
正交化
構建機器學習系統的挑戰之一是你有太多事情可以嘗試、有太多事情可以改變。比如,你可以調整很多超引數。瞭解調整哪個引數能獲得什麼效果,這種方法叫作正交化(orthogonalisation)。因為正交化是一種系統屬性,它確保了修改各個超引數不會對演算法的其它部分產生影響。因此正交化令獨立性地驗證超引數與演算法效能變得更加簡單,減少了測試與調整的時間。
在監督學習中,機器學習系統需要在以下四項任務中表現較好。每一項任務都可以進行一系列調整來提升系統表現。
* 擬合訓練集
* 擬合開發集
* 擬合測試集
* 在現實世界中表現良好
單一數值評價指標
為你的專案準備一個簡單的實數指標作為評價指標,以便知道調節某個設定是否有助於演算法的改進。在測試多個場景時,該指標能夠幫助你快速選擇最有效的演算法。有時,你可能需要兩個指標來評估演算法,比如查準率(Precision)和召回率(Recall)。但是如果有兩個指標,就很難選出哪個演算法更好。
將評價指標合二為一
因此,與其使用兩個指標(查準率和召回率)選出一個分類器,不如找一個能將兩者結合起來的新評估指標。在機器學習文獻中,結合查準率和召回率的標準方法是 F1 分數(F1 score)。實際上,你幾乎不需要自己設計新的效能評估指標,因為根據你的系統要求,通常能在機器學習文獻中找到一個合適的指標。
f1分數的計算式。
滿意度量和最佳化度量
在某些情況下,不是隻有一兩個指標,而是 n 個。假設需要你建立一個最高準確率的分類器,且有著最低的時間複雜度和空間複雜度。然後你建立了以下 4 種 分類器,你會選擇其中的哪種呢?
在這種情況下,你可以選擇一個度量作為最佳化度量(optimizing),其他 n-1 個作為滿意度量(satisficing)。在這個例子中,我們可以最大化測試準確率(optimizing),也就是將其作為最佳化度量;同時保證執行時間(Runtime)少於 10 秒,記憶體(Memory)要求小於 10MB,也就是將這兩者作為滿意度量,達到閾值即可。這樣,你就為團隊設立了一個目標。
機器學習領域中,人人都知道吳恩達。即使大家瞭解他,也會知道他在 Coursera 上有一個 Deep Learning Specialization 系列課程,該課程可以幫助你入門人工智慧領域。其中一門課是《Structuring Machine Learning Projects》,從中你可以瞭解到如何診斷機器學習系統中的錯誤,並瞭解如何優先考慮某些方向以減少這些錯誤。本文正是基於這個課程而寫的。
訓練集/開發集/測試集的分佈
始終保證你的開發集和測試集來自同樣的分佈,且是從全體資料中隨機獲取的。例如,假設你正在製作一個貓類分類器,且你有來自美國、英國、南美、印度、中國和澳洲的資料。使用前三個區域的資料作為開發集、使用後三個區域的資料作為測試集的做法是不正確的。你應該打亂這些資料,並將它們隨機放入兩個集中。
選擇一個開發/測試集以反映你期望得到的以及重要的資料。
更改開發集/測試集和評估指標
如果專案進展到一半時,你意識到選擇了錯誤的開發集或錯誤的效能評估指標,請更正。畢竟,機器學習的成功取決於:
1. 清晰瞭解目標(選擇正確的開發集和評估指標)
2. 努力達到目標(在這些指標上表現良好)
如果系統在你的指標和開發/測試集上的效能與在應用上的效能並不匹配,你應該改變他們。因為你沒有正確的設定目標。
前面主要是瞭解機器學習演算法的應用、據此收集相應的資料,並隨機分成訓練/開發/測試集。此外,選擇單一的最佳化評估指標,並且透過調整設定來改善這個指標也是提高系統性能的關鍵點。後面一部分主要關注的是如何令機器學習模型達到人類級別的效能與避免高偏差,這些經驗同樣都是基於吳恩達在 Coursera 上的課程。
與人類效能的對比
近年來,越來越多的機器學習團隊對比機器學習系統和人類的效能。其原因在於:
1. 由於深度學習的進步,演算法的效能突然變好,在機器學習的多個應用領域中具備更強的可行性。
2. 嘗試做人類也能做的事情時,設計和構建機器學習系統的工作流程會更加高效。
如果你一直訓練演算法,它的效能就會快速提升,直到超越人類。儘管它無法超越一些理論限制,如貝葉斯最優誤差(理論上的最優誤差)。換言之,任何函式中從 x 到 y 的對映都無法超越一定的準確率。
通常,人類和貝葉斯誤差非常接近,尤其是自然感知問題,因此超越人類效能後,系統就沒有了很大的提升空間,學習過程也會相對減緩。
只要你的演算法效能不如人類,就可以遵循以下方法來提升效能:
獲取人類標註的資料
獲取手動誤差分析見解,如理解為什麼人類認為某項是對的
更好的偏差/方差分析
避免高偏差
我們希望演算法在訓練集上能有出色的表現,但又不希望它擬合地太完美,出現過擬合現象。因為我們知道人類級別的效能是怎麼樣的,所以我們可以判斷模型在訓練集上的擬合情況是不是很好、太好或者不夠好。如下對於分類任務來說:
透過將人類級別的效能作為貝葉斯誤差的代理(對於影象識別),我們可以大致瞭解是否需要關注偏差與方差之間的均衡從而提升系統的效能。
若人類級別的效能和訓練誤差之間差距比較大,那麼模型的偏差可能就比較大。若測試集誤差與訓練集誤差間的差距比較大,那很可能方差就會比較高,且模型出現了過擬合現象。
如果高偏差問題大於高方差問題,那麼我們需要注意避免高偏差。
在上圖場景 A 中,演算法在訓練集上擬合地並不好,因為人類級別的效能要遠比訓練集上的誤差低,所以這個問題就是模型的偏差太高。一般解決辦法是採用更大規模的神經網路、使用更好的最佳化方法、訓練更多的迭代數或乾脆修正神經網路的架構。
在上圖場景 B 中,演算法需要降低高方差,因為它在訓練集擬合的情況要遠比在測試集擬合的情況好。一般的解決辦法是使用正則化技術、使用更大的訓練資料集或乾脆選擇稍微淺層的神經網路架構。