目錄算法
目標:學習一些機器學習優化改進策略,使得搭建的學習模型可以朝着最有但願的方向前進。機器學習
搭建機器學習系統的挑戰:嘗試和改變的東西太多,好比超參數。函數
什麼是正交化?性能
正交化是協助調節搭建機器學習系統的方法之一,類比老式電視機的調節按鈕,正交化指的是電視設計師設計這樣的按鈕,使得每一個按鈕都只調整一個性質,這樣調整電視圖像就很容易,就能夠把圖像跳到正中。學習
訓練神經網絡時,使用early stopping雖然能夠改善過擬合,可是該功能沒有那麼正交化,由於他同時影響訓練集的擬合和改善開發集的表現這兩件事情。測試
單一數字評估指標大數據
在搭建的學習模型選擇優化過程當中,最好把多個評估指數按照某一個公式標準轉換爲單一的評估指標,這樣處理的效果是能夠大大加快訓練和選擇的效率。優化
知足和優化指標
有時造成單一數字評估指標不太現實,這時選擇多個指標中其中的某一個指標或者兩個指標,做爲評估當前學習模型是一種不錯的選擇。
訓練/開發/測試集劃分
開發集和測試集最好來自同一分佈,若是不在同一分佈會致使最終測試的結果不理想,甚至致使前期的工做白白浪費。
設立開發集以及評估指標,能夠定義你要瞄準的目標,經過在同一分佈中設立開發集和測試集,就能夠瞄準最終團隊所指望的目標。而設立訓練集的方式會影響你逼近那個目標有多快。
隨着時間的推移,當您繼續訓練算法時,可能模型愈來愈大,數據愈來愈多,可是性能沒法超過某個理論上限,這就是所謂的貝葉斯最優錯誤率(Bayes optimal error)。因此貝葉斯最優錯誤率通常認爲是理論上可能達到的最優錯誤率,就是說沒有任何辦法設計出一個x到y的函數,讓它可以超過必定的準確度。
減小可避免誤差方法
若是你想用盡一切辦法減小可避免誤差,我建議試試這樣的策略:好比使用規模更大的模型,0這樣算法在訓練集上的表現會更好,或者訓練更久。使用更好的優化算法,好比說加入momentum或者RMSprop,或者使用更好的算法,好比Adam。你還能夠試試尋找更好的新神經網絡架構,或者說更好的超參數。這些手段包羅萬有,你能夠改變激活函數,改變層數或者隱藏單位數,雖然你這麼作可能會讓模型規模變大。或者試用其餘模型,其餘架構,如循環神經網絡和卷積神經網絡。
減小方差方法
另外當你發現方差是個問題時,你能夠試用不少技巧,包括如下這些:你能夠收集更多數據,由於收集更多數據去訓練能夠幫你更好地推廣到系統看不到的開發集數據。你能夠嘗試正則化,包括L2正則化,dropout正則化或者咱們在以前課程中提到的數據加強。同時你也能夠試用不一樣的神經網絡架構,超參數搜索,看看能不能幫助你,找到一個更適合你的問題的神經網絡架構。
錯誤分析
進行錯誤分析,你應該找一組錯誤樣本,可能在你的開發集裏或者測試集裏,觀察錯誤標記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬於不一樣錯誤類型的錯誤數量。在這個過程當中,你可能會獲得啓發,概括出新的錯誤類型。
深度學習算法對隨機偏差很健壯,但對系統性的錯誤就沒那麼健壯了。
對於第一個系統,建議搭建快速而粗糙的實現,而後用它作誤差/方差分析,用它作錯誤分析,而後用分析結果肯定下一步優先要作的方向。
把數據分紅訓練、開發和測試集,在長期能給你帶來更好的系統性能。
處理數據不匹配問題
作錯誤分析,或者看看訓練集,或者看看開發集,試圖找出,試圖瞭解這兩個數據分佈到底有什麼不一樣,而後看看是否有辦法收集更多看起來像開發集的數據做訓練。(收集更多數據,能夠採用人工數據合成的方法來進行。 但當你使用人工數據合成時,必定要謹慎,要記住你有可能從全部可能性的空間只選了很小一部分去模擬數據。)
技術上,爲了不對測試集過擬合,要作錯誤分析,應該人工去看開發集而不是測試集。
遷移學習
若是你想從任務A學習並遷移一些知識到任務B,那麼當任務A和任務B都有一樣的輸入x時,遷移學習是有意義的。 當任務A的數據比任務B多得多時,遷移學習意義更大。
多任務學習
多任務學習能讓你訓練一個神經網絡來執行許多任務,這能夠給你更高的性能,比單獨完成各個任務更高的性能。
端到端學習
端到端深度學習作的是,你訓練一個巨大的神經網絡,輸入就是一段音頻,輸出直接是聽寫文本。
當你的數據集較小的時候,傳統流水線方法其實效果也不錯,一般作得更好。你須要大數據集才能讓端到端方法真正發出耀眼光芒。
優勢:
首先端到端學習真的只是讓數聽說話。
所需手工設計的組件更少, 不須要花太多時間去手工設計功能,手工設計這些中間表示方式。
缺點:
可能須要大量的數據。
排除了可能有用的手工設計組件, 精心設計的人工組件可能很是有用,但它們也有可能真的傷害到你的算法表現。
參考資料: