1. 程式人生 > >Deep Learning.ai學習筆記_第三門課_結構化機器學習專案

Deep Learning.ai學習筆記_第三門課_結構化機器學習專案

目錄

第一週 機器學習策略(1)

第二週 機器學習策略(2)

 

目標:學習一些機器學習優化改進策略,使得搭建的學習模型能夠朝著最有希望的方向前進。

第一週 機器學習策略(1)

搭建機器學習系統的挑戰:嘗試和改變的東西太多,比如超引數。

 

什麼是正交化?

正交化是協助調節搭建機器學習系統的方法之一,類比老式電視機的調節按鈕,正交化指的是電視設計師設計這樣的按鈕,使得每個按鈕都只調整一個性質,這樣調整電檢視像就很容易,就可以把影象跳到正中。

 

訓練神經網路時,使用early stopping雖然可以改善過擬合,但是該功能沒有那麼正交化,因為他同時影響訓練集的擬合和改善開發集的表現這兩件事情。

 

單一數字評估指標

在搭建的學習模型選擇優化過程中,最好把多個評估指數按照某一個公式標準轉換為單一的評估指標,這樣處理的效果是可以大大加快訓練和選擇的效率。

 

滿足和優化指標

有時形成單一數字評估指標不太現實,這時選擇多個指標中其中的某一個指標或者兩個指標,作為評估當前學習模型是一種不錯的選擇。

 

訓練/開發/測試集劃分

開發集和測試集最好來自同一分佈,如果不在同一分佈會導致最終測試的結果不理想,甚至導致前期的工作白白浪費。

設立開發集以及評估指標,可以定義你要瞄準的目標,通過在同一分佈中設立開發集和測試集,就可以瞄準最終團隊所期望的目標。而設立訓練集的方式會影響你逼近那個目標有多快。

 

隨著時間的推移,當您繼續訓練演算法時,可能模型越來越大,資料越來越多,但是效能無法超過某個理論上限,這就是所謂的貝葉斯最優錯誤率(Bayes optimal error)。所以貝葉斯最優錯誤率一般認為是理論上可能達到的最優錯誤率,就是說沒有任何辦法設計出一個x到y的函式,讓它能夠超過一定的準確度。

 

減少可避免偏差方法

如果你想用盡一切辦法減少可避免偏差,我建議試試這樣的策略:比如使用規模更大的模型,0這樣演算法在訓練集上的表現會更好,或者訓練更久。使用更好的優化演算法,比如說加入momentum或者RMSprop,或者使用更好的演算法,比如Adam。你還可以試試尋找更好的新神經網路架構,或者說更好的超引數。這些手段包羅萬有,你可以改變啟用函式,改變層數或者隱藏單位數,雖然你這麼做可能會讓模型規模變大。或者試用其他模型,其他架構,如迴圈神經網路和卷積神經網路。


減少方差方法

另外當你發現方差是個問題時,你可以試用很多技巧,包括以下這些:你可以收集更多資料,因為收集更多資料去訓練可以幫你更好地推廣到系統看不到的開發集資料。你可以嘗試正則化,包括L2正則化,dropout正則化或者我們在之前課程中提到的資料增強。同時你也可以試用不同的神經網路架構,超引數搜尋,看看能不能幫助你,找到一個更適合你的問題的神經網路架構。


第二週 機器學習策略(2)

錯誤分析

進行錯誤分析,你應該找一組錯誤樣本,可能在你的開發集裡或者測試集裡,觀察錯誤標記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬於不同錯誤型別的錯誤數量。在這個過程中,你可能會得到啟發,歸納出新的錯誤型別。


深度學習演算法對隨機誤差很健壯,但對系統性的錯誤就沒那麼健壯了。


對於第一個系統,建議搭建快速而粗糙的實現,然後用它做偏差/方差分析,用它做錯誤分析,然後用分析結果確定下一步優先要做的方向。


把資料分成訓練、開發和測試集,在長期能給你帶來更好的系統性能。


處理資料不匹配問題

做錯誤分析,或者看看訓練集,或者看看開發集,試圖找出,試圖瞭解這兩個資料分佈到底有什麼不同,然後看看是否有辦法收集更多看起來像開發集的資料作訓練。(收集更多資料,可以採用人工資料合成的方法來進行。 但當你使用人工資料合成時,一定要謹慎,要記住你有可能從所有可能性的空間只選了很小一部分去模擬資料。)

技術上,為了避免對測試集過擬合,要做錯誤分析,應該人工去看開發集而不是測試集。


遷移學習

如果你想從任務A學習並遷移一些知識到任務B,那麼當任務A和任務B都有同樣的輸入x時,遷移學習是有意義的。 當任務A的資料比任務B多得多時,遷移學習意義更大。


多工學習

多工學習能讓你訓練一個神經網路來執行許多工,這可以給你更高的效能,比單獨完成各個任務更高的效能。


端到端學習

端到端深度學習做的是,你訓練一個巨大的神經網路,輸入就是一段音訊,輸出直接是聽寫文字。

當你的資料集較小的時候,傳統流水線方法其實效果也不錯,通常做得更好。你需要大資料集才能讓端到端方法真正發出耀眼光芒。

優點:

首先端到端學習真的只是讓資料說話。

所需手工設計的元件更少, 不需要花太多時間去手工設計功能,手工設計這些中間表示方式。

缺點:

可能需要大量的資料。

排除了可能有用的手工設計元件, 精心設計的人工元件可能非常有用,但它們也有可能真的傷害到你的演算法表現。

 

 

參考資料:

1.http://www.ai-start.com