吳恩達讀書筆記【3】-基於不同分布數據的模型


什么叫不同分布的數據

舉幾個例子來說明

例子1,要訓練一個手機端的貓識別器,現在有 10000 張手機端的照片,並且被人為標記為是不是貓,然后我們可以從互聯網上得到 200000 張貓咪圖片,網絡上的照片和移動手機端的照片就屬於不同分布;

例子2,要訓練一個語音識別系統,將某個地址轉換成語音,現在有 20000 個 用戶說出地址 的樣本,還有 500000 個其他音頻樣本,內容隨機,這也是不同分布的數據;

 

在早期的機器學習中,由於數據有限,我們通常只有一個同分布的數據;

但是在大數據時代,我們可以獲得大型的數據集,比如貓的網絡圖片,即使他們屬於不同的分布,我們仍然希望使用它來學習,因為它可以提供大量的信息;

當然這需要比較復雜的模型,比如大規模的神經網絡,此時添加不同分布的數據也很可能提升模型的性能

 

如何用不同分布的數據來訓練模型

以例子1為例,通常我們可能會把這兩種數據混合在一起,隨機打亂,這樣整個數據集仍然是同一分布,但是不建議這樣做,為什么呢?

首先明確我們的目標,我們是想建立一個手機端的貓識別器,我們預測的目標是手機照片,如果混在一起,測試集中 90% 以上的數據都來自互聯網,模型的表現不能反映我們期望數據分布的表現;

所以記住這個建議:驗證集和測試集的選擇要符合我們期望的數據分布

正確的做法是:我們拿出 5000 張(一半)手機照片作為驗證集合測試集,然后把剩下的 205000 張作為訓練集,這樣我們的驗證和測試集都能反映我們的期望分布,

雖然訓練集有兩種分布的數據,但我們可以通過某種手段來使得模型學到手機端的特征,而把網絡端只作為參考

 

那是不是任何情況下都可以使用不同分布的數據呢?

顯然不是;

這需要依賴一個事實,就是存在一個“理想模型”能夠對不同分布的數據進行很好的識別,以貓識別器為例,人類就是一個“理想模型”,輸入圖片,人類就能判斷是不是貓,而不需要知道它來自手機還是網絡;

在存在“理想模型”的情況下,添加不同分布的數據有如下影響

1. 好處:能夠提供更多貓的信息,包括貓的品種、姿勢等等,這能讓神經網絡學到更多貓的特性,而這種特性可能和手機端的並無差別;

2. 風險:可能使得神經網絡花費大量的規模來學習網絡圖片,因為網絡圖片占比非常大,如果模型學到的網絡圖片的性質與手機端差別較大,這對手機端的識別無疑是有害的,對應我們關心的分布,可能降低模型的性能

所以,如果我們認為模型無法從另一種分布的數據上學到有用特征,那應該果斷放棄

 

給數據添加權重

上文講到如果我們添加了不同分布的數據,則存在降低模型性能的風險,

以例子1為例,網絡圖片:手機圖片=40:1,從理論上講,如果模型足夠大,訓練時間足夠長,可以得到一個模型能夠很好的識別不同分布的圖片;但實際中並沒有足夠的資源,這意味着我們需要妥協;

此時我們可以給數據添加權重

 

為了方便說明,我們以均方誤差為例(盡管是分類問題,但是道理是一樣的)

模型的目標是最小化損失函數

用如下方式進行優化

如果 β=1/40,則手機照片和網絡照片權重相同,當然你可以根據需要選擇不同的值,甚至其他方式

 

添加小於1的權重,使得模型不需要在兩種分布的數據上都表現的很好,這樣可以減少訓練的時間

 

不同分布數據模型調優

假設我們在不同分布數據上的模型表現不好,如:

1. 在訓練集上表現不佳,高偏差

2. 在訓練集上表現可以,但在與訓練集同分布的數據上表現不佳,高方差

3. 在訓練集上表現可以,但在與測試集同分布的數據上表現不佳,這種情況也在情理之中,這種問題被稱為數據不匹配

 

有沒有發現,我們多了一種與訓練集同分布的數據,所以判斷不同分布數據模型的表現,需要把數據分為 4 部分

  • 訓練集:來自手機圖片和網絡圖片
  • 訓練驗證集:來自和訓練集同分布的數據
  • 測試驗證集:來自和測試集同分布的數據
  • 測試集:來自手機圖片

 

假設模型表現如下

訓練集錯誤率 1%
訓練驗證集錯誤率 5%
測試驗證集錯誤率  5%

高方差,之前的方法可以解決

 

假設模型表現如下

訓練集錯誤率 5%
訓練驗證集錯誤率 6%
測試驗證集錯誤率  6%

高偏差,之前的方法可以解決

 

假設模型表現如下

訓練集錯誤率 10%
訓練驗證集錯誤率 11%
測試驗證集錯誤率  20%

這顯然存在高偏差與數據不匹配問題,在訓練集分布上表現無差異,

這表明兩種分布的數據相差甚遠

 

解決數據不匹配問題

1. 嘗試理解數據屬性在訓練集和測試集分布上的差異

2. 嘗試獲取更多的訓練數據,以便是算法更好的匹配測試集分布上的數據

 

例如我對語言識別系統進行誤差分析:手動遍歷 100 個樣本,嘗試理解算法錯在哪,假如我們發現,大部分測試集是在車里錄制的,噪聲很大,而訓練集都是在安靜環境下錄制;

這就需要我們獲取更多的訓練數據,包括在車里錄制的樣本,

誤差分析的目的就是了解訓練和測試集之間的差異,但不幸的是,我們可能無法獲取更多的數據,或者無法找到差異點,此時我們可能會考慮人工合成數據

 

人工合成數據的風險

以上面的論述為例,我們需要車里錄制的音頻樣本,我們可以下載一些車輛噪聲,然后把它與安靜環境下的音頻進行合成,聽起來就像是在車里錄制的;

然后構建一個對人而言真實的數據比構建一個對算法而言真實的數據要簡單的多,

比如,我們有一個 1000 小時的音頻,只有 1 個小時的汽車噪聲,那么我們把這 1 小時的噪聲循環加在 1000 小時音頻內,對人而言,都是聽不清而已,但對算法而言,可能“過擬合”這 1 個小時的噪聲

再如,我們有 1000 個音頻樣本,只有 10 個不同汽車的噪聲,合成之后,人聽起來一樣,但是算法可能“過擬合”這 10 輛車的噪聲;

延伸一下,在類別不均衡問題中,采用過采樣的方式也會過擬合,道理類似上面

 

總結

在不同分布的數據上進行建模,需要注意幾點

1. 驗證和測試集的選擇要與目標數據同分布

2. 兩種數據有很強的關聯性,可以考慮是否存在一個“理想模型”,能夠很好的識別兩種數據,而不需要知道數據來自哪個分布

3. 可以采用數據加權方式,降低模型訓練時間

4. 利用數據不匹配的概念對模型進行調優

 

 

參考資料:

吳恩達:完整翻譯版《機器學習要領》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM