機器學習開發流程基礎

無風聽海發表於2021-04-22

一、機器學習的四個分支

前邊我們已經學習了深度學習的分類問題,其目標是通過學習輸入的訓練資料和標籤,來學習兩者之間的關係,這是典型的監督學習。

機器學習演算法大致可以分為四類

* 監督學習

監督學習將輸入的樣本資料對映到標註的標記,是目前最常見的機器學習型別。

目前廣受關注的深度學習幾乎都屬於監督學習,例如光學字元識別、語音識別、影像分類、語言翻譯。

監督學習主要包括分類和迴歸,但是有很多變體,例如序列生成、語法樹預測、目標檢測、影像分割等。

現實中的業務場景都是有明確的業務目標的,也就是錯綜複雜的原始資料,都是有最終的業務目標的,也就是資料之間會有比較明確的關係;

* 無監督學習

無監督學習是在沒有標記資料的情況下尋找輸入資料的有趣變換,其目標在於資料視覺化、資料壓縮或者更好的理解資料的相關性。

降維和聚類是無監督學習的方法。

* 自監督學習

自監督學習是監督學習的一個特例;

自監督學習通常使用啟發式演算法從輸入資料中自動生成標籤;

自編碼器的輸出未經修改的輸入,也就是以輸入作為監督;

預測視訊的下一幀及預測文字下一個詞也是自監督學習,它們將未來的輸入作為監督;

自監督學習通過將訓練資料的一部分作為監督的目標,來自動的學習資料之間的關聯關係,避免了人為標註的干預,有利於完成沒有標記的大量資料的訓練;

* 強化學習

在強化學習中,智慧體接收環境有關資訊,並學會選擇使某種獎勵最大化的的行動;

強化學習處於發展期,成熟的應用不多,但是潛力很大,例如自動駕駛、機器人、教育等領域;

二、機器學習模型評估

機器學習的目的是得到可以泛化的模型,但是隨著訓練的進行,模型在訓練資料上的準確性不斷的提高,就存在過擬合問題,導致模型在未知資料上的預測能力變差。

評估機器學習模型的重點是將資料劃分為訓練集、驗證集、測試集,在訓練集上訓練模型,在驗證集上評估模型,一旦找到最佳引數後就在測試集上測試模型。

將資料集劃分為三個集合的原因跟機器學習的特點緊密相關

模型的訓練過程中,我們需要不斷的調整模型的配置來改善模型的效能,同時結合模型在驗證集上的效能作為反饋訊號來獲得最佳的模型,那麼這個模型在訓練集上很容易產生過擬合的問題,
同理在驗證集上也很容易產生過擬合問題,所以還需要使用測試集進行模型的評估來保證在模型在未知資料上的預測能力。

對訓練資料集的劃分,可以採用以下三種方法進行劃分

簡單留出驗證

留出一定比例的資料作為測試集和測試集,然後在訓練集中留出一部分作為驗證集。此方法比較簡單,但是如果遇到資料量比較少的情況,就需要使用下邊兩種方法了。

K折驗證

K折驗證將資料劃分為大小相同的K個分割槽。依次選擇分割槽i作為測試集,在剩餘的K-1個分割槽作為訓練集,最終計算K個分數的平均值。

帶有打亂資料的重複K折驗證

如果在較少可用資料的情況下,儘可能可能精確地評估模型,我們可以使用帶有打亂資料的重複K折驗證。具體做法是多次使用K折驗證,在每次將資料劃分為K個分割槽之前都先將資料打亂。最終分數是每次K折驗證分數的平均值。注意,這種方法一共要訓練和評估P×K個模型(P是重複次數),計算代價很大。

進行資料劃分是需要注意以下幾點

儘量避免每個資料集只包含區域性資料,尤其是有排序的資料要隨機打亂,確保各個資料集都可以反應整體的資料樣本分佈;

對於通過過去預測未來的情況,例如天氣預報、股市走勢等,需要確保測試集資料要晚於訓練集資料;

為了提高模型的準確行,要避免訓練集和測試集包含相同的資料;

三、資料處理

在將資料輸入到神經網路之前,必須對資料進行預處理來適應神經網路對輸入資料的要求,其中包括向量化、值標準化、處理缺失值、特徵提取。

無論什麼型別的資料,都需要進行向量化將輸入和目標轉化為張量。

為了避免取值相對較大的資料或異質資料輸入神經網路,導致網路無法收斂,需要對資料進行標準化。標準化之後,資料大部分值都應該在0-1的範圍內,同時所有特徵的取值都應該在大致相同的範圍內。

如果資料有缺失值,就需要格式化缺失值,一般來說會將缺失值設定為0。如果資料有缺失值,那麼各個資料集都應該包含有缺失值的樣本。

特徵工程(feature engineering)是指將資料輸入模型之前,利用你自己關於資料和機器學習演算法(這裡指神經網路)的知識對資料進行硬編碼的變換(不是模型學到的),以改善模型的效果。多數情況下,一個機器學習模型無法從完全任意的資料中進行學習。呈現給模型的資料應該便於模型進行學習。

特徵工程的本質:用更簡單的方式表述問題,從而使問題變得更容易。它通常需要深入理解問題。

良好的特徵可以讓我們用更少的資源更少的資料更優雅地解決問題。

四、過擬合

隨著訓練過程和優化的不斷深入,模型會不斷的學習到訓練資料更多的特徵,最終必然會導致模型的過擬合問題,從而導致模型在未知資料上的泛化能力的不佳。為了獲得一個可以更好預測未知資料的最佳模型,我們需要在優化和泛化之間需求一個最優的平衡點。

為了防止過擬合的最優方法是獲取更多的訓練資料,從統計學上來看,越多的資料越可以更好的反應資料的分佈規律,自然就提高了模型的泛化能力。而在現實的情況中,往往是在訓練資料確定並且已經產生過擬合的情況下,自然是模型記住了太多的訓練資料的自有特徵,導致模型泛化能力減弱只能識別訓練資料的尷尬,所以需要降低模型記錄的資訊量。

減小網路規模

深度網路的層數和引數的多少,直接反映了模型可記憶資料資訊的能力,理論上來說,層數或者引數越多,模型的學習能力越強,但是為了獲得一個更好的模型,需要在層數及引數的過多和過少之間尋求一個平衡。一般開始的時候選擇一個相對較少的層數和引數,隨著訓練過程不斷的增加層數和引數,直到這種增加對驗證損失的影響很小。

新增權重正則化

一種常見的降低過擬合的方法就是強制讓模型權重只能取較小的值,從而限制模型的複雜度,這使得權重值的分佈更加規則(regular)。這種方法叫作權重正則化(weightregularization),其實現方法是向網路損失函式中新增與較大權重值相關的成本(cost)。這裡常用的有L1、L2正則化。

新增dropout正則化

在訓練過程中Dropout不再依賴特定的神經元,使得神經網路難以記憶輸入/輸出對。這促使神經網路學習通用、魯棒的特徵,而不是學習一次性、特定的東西來對應訓練的例項。

五、機器學習開發流程

定義問題

我們使用機器學習解決問題基於的假設,所以我們需要明確了輸入輸出以及所使用的資料,方便定義需要解決的問題和模型。
已有的資料需要足夠豐富並且可以用來預測輸出
訓練資料承載的規律在過去和未來都是相同的

選擇評價指標

對於平衡分類問題(每個類別的可能性相同),使用精度和接收者操作特徵曲線下面積作為指標。
對於類別不平衡的問題,可以使用準確率和召回率。
對於排序問題或多標籤分類,可以使用平均準確率均值。

確定評估方法

留出驗證集。資料量很大時可以採用這種方法。
K折交叉驗證。如果留出驗證的樣本量太少,無法保證可靠性,那麼應該選擇這種方法。
重複的K折驗證。如果可用的資料很少,同時模型評估又需要非常準確,那麼應該使用這種方法。

資料預處理

格式化輸入資料為張量。
張量的取值通常應該縮放為較小的值,比如在[-1, 1]區間或[0, 1]區間。
針對不同特徵不同取值範圍的資料進行標準化。
針對小資料問題做特徵工程。

確認模型

計算的模型必須比純隨機的概率要高才行,否則就是我們基於的假設訓練資料出了問題。
根據實際要處理的問題來確定最後一層的啟用函式、損失函式、優化器等。

訓練模型

通過調整網路的層數、引數及訓練的輪次,時刻檢測訓練損失和驗證損失,尋找欠擬合和過擬合的折中點。

調整模型

通過不斷的調整模型及新增正則化、dropout、特徵工程等並進行訓練最終得到理想的可用於生產環境的模型。

相關文章