1. 程式人生 > >深度學習之三:機器學習的策略

深度學習之三:機器學習的策略

本文為Andrew ng深度學習課程的第三部分,主要總結了機器學習的策略方法。

1 機器學習策略之一

當我們的模型搭建出來之後,策略可以指引我們為了達到目標,如何採取下一步行動。

1.1 正交化

當設計和訓練一個監督學習的系統時,我們依賴下面四條正交的假定:

  1. 使模型在訓練集上擬合,否則使用更大的神經網路或使用更好的優化演算法。
  2. 使模型在開發集上擬合,否則使用正則化或使用更大的訓練集
  3. 使模型在測試集上擬合,否則使用最大的開發集
  4. 使模型在現實中執行良好,否則重新規劃開發集/測試集或調整損失函式

1.3 單一優化指標與決定性指標

在評估模型時,有時會有多個不同維度的評價引數。例如從演算法角度有精確度,召回率。從應用角度上,演算法可能對不同型別的客戶或場景有不同的效果。

如果同時採用多個指標,就不能快速有效對比多個不同模型,可能會造成模型選擇上的混亂。因此需要將不同標準歸一化到單個量化評估指標,以方便比較不同模型。

另外的場景存在硬性指標要滿足。比如在模型大小受限或執行時間受限的場景中,模型的大小或執行時間將成為接受模型的決定性因素。不滿足這些條件的模型即使軟性指標再好也無法接受。

1.4 訓練/開發/測試集的分佈

訓練集/開發集/測試集的設定對大型團隊的生產力影響十分巨大。

測試集是我們模型優化要瞄準的目標,因此強調開發集與測試集的資料要來自相同的分佈,這樣模型日常在開發集上的調優與測試集效果的目標是一致的,否則團隊就會在模型優化與最終測試中南轅北轍,極大浪費團隊時間。

1.5 改變開發集/測試或損失函式的情況

以一個推薦演算法為例,假定有兩個演算法A,B。演算法A以3%的錯誤率向用戶推薦貓的圖片,演算法B以5%的錯誤率向用戶推薦貓的圖片。然而演算法A卻會向用戶推薦黃色圖片,而演算法B卻不會。從社會的層面算B是更合適的。

此種場景,說明損失函式定義是有問題的。需要調整損失函式,需要將損失函式定義為對黃色圖片更敏感,通過對不同類圖片增加權重以影響損失函式,例如增加黃色圖片的權重:

Error:1w(i)i=1mw(i)L{y^iyi}

1.6 人類的表現

下圖展示了機器學習的效能隨時間的表現,與人類表現以及理論最優表現的關係。
此處輸入圖片的描述

一般的,當機器學習超過人的表現水平後,它就進步地很緩慢了,其中有一個重要的原因是人類的對於一些自然感知問題的表現水平幾近於貝葉斯誤差(Bayes Error)。

貝葉斯誤差被定義為最優的可能誤差,換句話說,就是任何從x到精確度y對映的函式都不可能超過這個值。

1.7 可避免偏差

人類的表現可以作為機器表現的基準,讓我們得出是需要解決機器學習的結果是偏差大還是要解決方差大的問題。

分類\示例 例1 例2
人類誤差 1% 7.5%
訓練集誤差 8% 8%
開發集誤差 10% 10%
結論 高偏差 高方差

1.8 超越人類的表現

在某些領域中,機器學習可以明顯的超越人類的表現,如線上廣告,商品推薦,反信用欺詐等領域,由於這些領域存在大量的資料,機器演算法可以從中發現人類難以發現的規律。而在另一些人類任務的領域,如語音識別,圖片識別,自然語言處理等領域,機器學習與人類水平仍有一段距離。

2 機器學習策略二

2.1 誤差分析

誤差分析的目的是對錯誤分類的資料進行主成分分析,發現其中佔比最大的錯誤,依次解決一類佔比最大的錯誤。不建議優化佔比較低的錯誤型別,因為其對提高模型的正確率幫助較低。

誤差分析的作法是選擇一個小資料集,執行模型,然後手工整理每一個錯誤預測的原因,然後統計出對模型準確率提升最有價值的原因,進行有針對性的解決。

2.2 關於錯誤標註的資料

通過誤差分析,可以評估錯誤引入的主要原因。若標籤錯誤佔比較小,則可以忽略標籤錯誤,否則則需要修復錯誤的標籤。

2.3 快速進行實現與迭代

在收集到必要的資料,設定好開發集和測試集之後,儘量快速的構建一個可執行的簡單系統,得到演算法執行的結果,通過偏差和方差分析,理解演算法的執行結果,對演算法欠缺的地方進行鍼對性的研究。不鼓勵一開始就建立複雜的系統。

2.5 不匹配資料的劃分

對於獲取的資料集,前面一直在強調訓練、開發、測試集的來源都應該要是相同的。在無法達成這一要求下,對於不同來源的資料集,就要充分考慮如何將它們進行劃分。

例如想要開發一款手機應用,能對使用者上傳的貓的圖片進行識別。假如現在有1萬張普通使用者上傳的貓的圖片資料,這些圖片的質量都不太好,有一些可能是模糊的,另外從網路上獲取了20萬張質量較好的貓的圖片。

構建機器學習模型時,在開發集和測試集上,一定要反映出將來需要面臨的資料。考慮到例子中這個機器學習模型主要將應用在識別使用者拍攝的貓的圖片上,在劃分資料上,就可以將20萬張網路獲取和圖片和5千張使用者上傳的圖片共20.5萬張圖片作為訓練集,剩下的5千張圖片一半作開發集,一半作測試集。長遠來看,這種分配方法比起隨機打亂所有資料樣本再進行分配效能要好。

在這種情況下,由於資料集的不匹配,後續如果進行方差/偏差分析,就很難找到問題的根源了,例如對於上面的例子,由於開發集包含的樣本比訓練集中的樣本更加難以準確識別,開發集的錯誤率往往會大於訓練集的錯誤率。為了解決這個問題,可以再定義一個訓練-開發集,訓練-開發集和訓練集的來源相同,但是這部分並不參與訓練。

2.6 分析不匹配的資料

有時候訓練集和開發測試集資料的差異性,導致模型方差較大。這個時候需要儘量使得訓練資料與真實應用影響更匹配。

對於語音識別問題,如果訓練資料缺少背景的噪音,可以通過聲音合成的方式,將噪音加入到訓練資料中,使其更接近測試資料。

2.7 遷移學習

如果針對某個分類任務你只有一個很小的資料集,但有人公開了大量資料集訓練好的類似任務的資料模型,則你可以使用遷移學習的方法。

在遷移學習中,通過凍結他人訓練好模型的前面若干層,使用自己的資料只訓練模型的最後一層。這樣也可以取得較好的效果,因為他人模型中的低層的特徵對於你的任務而言是有用的。

2.8 多工學習

若現在有一個任務,它需要識別出圖片中的車輛,行人,交通標識。一種作法是訓練三個模型,分別用來識別圖片的車輛,行人與交通標識。但這種作法較為耗時。另一種作法是訓練單個模型,它可以對圖片中的多種目標作出識別。

多工學習的場景是在一組任務的訓練過程中它們能共享低層的特徵,且對於每個任務的訓練資料有大量的重合資料。

2.9 端到端學習

以自然語言處理為例,非端到端的作法會劃分為多步。例如處理文字,人工特徵工程,以人工特徵作輸入進行學習。特徵工程這一步常常需要專業的研究人員進行大量的分析工作。在數量集較小時,特徵工程的效果還可以接受。
端到端的學習則去除了中間的步驟,直接以文字和標籤為輸入,訓練神經網路在高維空間中學習文字與標籤之間的對映關係。如果有大量監督資料集,則端到端的效果會迅速提升,甚至超過人工特徵工程的效果。

端到端深度學習完全由資料驅動,不需要人工設計的元件,效率較好。其缺點是需要大量的資料,若資料量不滿足則難以取得較好的效果。另外排除了對人工特徵利用的可能性。