Classes 3 結構化機器學習項目
1 機器學習政策

在機器學習中,可以觀察你的系統,然後說這一部分是錯的,它在訓練集上做的不好、在開發集上做的不好、它在測試集上做的不好,或者它在測試集上做的不錯,但在現實世界中不好,這就很好。必須弄清楚到底是什麼地方出問題了,然後剛好有對應的旋鈕,或者一組對應的旋鈕,剛好可以解決那個問題,那個限制了機器學習系統性能的問題。
1.2 單一數字評測名額
一般做法:
- 有想法,程式設計式,跑實驗,看看效果如何,然後使用這些實驗結果來改善想法,然後繼續走這個循環,不斷改進算法
有這樣一個開發集,加上單實數評估名額,疊代速度肯定會很快,它可以加速改進機器學習算法的疊代過程
有一個單實數評估名額真的可以提高效率,或者提高團
隊做出這些決策的效率
1.3 滿足和優化名額
準确度與時間上面的綜合權衡
考慮𝑁個名額,有時候選擇其中一個名額做為優化名額是合
理的。是以你想盡量優化那個名額,然後剩下𝑁 − 1個名額都是滿足名額,意味着隻要它們達到一定門檻值,例如運作時間快于 100 毫秒,但隻要達到一定的門檻值,你不在乎它超過那個門檻之後的表現,但它們必須達到這個門檻。
1.4 訓練集 驗證集 測試集的劃分
用訓練集訓練不同的模型,然後使用開發集來評估不同的思路,然後選擇一個,然後不斷疊代去改善開發集的性能,直到最後你可以得到一個令你滿意的成本,然後你再用測試集去評估
注意:
- 開發集和測試集來自同一分布,将所有資料随機洗牌,放入開發集和測試集
- 針對目标收集資料集
劃分比例:
- 機器學習早期: 全部資料用 70/30 比例分成訓練集和測試集。或者如果你必須設立訓練集、開發集和測試集,分 60%訓練集,20%開發集,20%測試集。(資料集小的時候,幾千-1w)
- 深度學習時代:百萬級别資料,98%作為訓練集,1%開發集,1%測試集
改變資料集:
- 如果你目前的名額和目前用來評估的資料和你真正關心必須做好的事情關系不大,那就應該更改你的名額或者你的開發測試集,讓它們能更夠好地反映你的算法需要處理好的資料
- 對于錯分的樣本需要加大損失權重
1.5 提升模型的性能
好的模型就兩件事:
- 算法對訓練集的拟合很好,這可以看成是你能做到可避免偏差很低
- 在訓練集中做得很好,然後推廣到開發集和測試集也很好,這就是說方差不是太大
偏差上的提升(欠拟合):
- 使用規模更大的模型,
- 訓練更久
- 使用更好的優化算法,比如說加入 momentum 或者RMSprop、 Adam
- 更好的新神經網絡架構
- 更好的超參數:激活函數、隐藏層數、隐藏節點數
方差上的提升(過拟合):
- 收集更多資料
- 嘗試正則化,包括𝐿2正則化,dropout 正則化
- 資料增強。
- 不同的神經網絡架構
- 超參數搜尋
2 機器學習政策
2.1 進行誤差分析
搭建應用系統,那這個簡單的人工統計步驟,錯誤分析,可以節省大量時間,可以迅速決定什麼是最重要的,或者最有希望的方向
進行錯誤分析,應該找一組錯誤樣本,可能在開發集裡或者測試集裡,觀察錯誤标記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬于不同錯誤類型的錯誤數量
如果這些标記錯誤嚴重影響了你在開發集上評估算法的能力,那麼就應該去花時間修正錯誤的标簽。如果它們沒有嚴重影響到你用開發集評估成本偏差的能力,那麼可能就不應該花寶貴的時間去處理。
在構造實際系統時,通常需要更多的人工錯誤分析,更多的人類見解來架構這些系統,盡管深度學習的研究人員不願意承認這點
2.2 快速搭建你的第一個系統,并進行疊代
應該盡快建立你的第一個系統原型,然後快速疊代
主要目标是弄出能用的系統,并不是發明全新的機器學習算法。可以從現有大量學術文獻為基礎出發,一開始就搭建比較複雜的系統。
2.3 使用來自不同分布的資料進行訓練和測試
越來越多的團隊都用來自和開發集、測試集分布不同的資料來訓練,這裡有一些微妙的地方,一些最佳做法來處理訓練集和測試集存在差異的情況。
這是由于項目任務所針對的圖檔類型決定的,比如手機app要識别的是使用者手機拍攝的貓,而這類資料集少,網上爬蟲的資料集大,但與任務的資料不是同一個分布,将其混合起來再劃分這樣的方法并不好,這是由于混一起後驗證集、測試集中任務所要針對的圖檔占的比例很低。
開發集和測試集都是手機圖。而訓練集包含了來自網頁的 20 萬張圖檔,還有 5000 張來自應用的圖檔,開發集就是 2500 張來自應用的圖檔,測試集也是 2500 張來自應用的圖檔。這樣将資料分成訓練集、開發集和測試集的好處在于,現在你瞄準的目标就是你想要處理的目标。
有助于提高你的學習算法的性能,但是,潛在問題就不隻是偏差和方差問題,這樣做會引入第三個潛在問題,資料不比對。
将訓練集劃分為訓練集與訓練-驗證集(不用來訓練,隻測試)來看偏差與方差的關系。
2.4 處理資料不比對問題
- 對訓練資料與開發資料進行錯誤分析,把訓練集變得更像開發集
- 盡可能地收集到相似的訓練資料
- 人工資料合成(注意過拟合)
存在資料不比對問題,建議你做錯誤分析,或者看看訓練集,或者看看開發集,試圖找出,試圖了解這兩個資料分布到底有什麼不同,然後看看是否有辦法收集更多看起來像開發集的資料作訓練。
2.5 遷移學習
把神經網絡最後的輸出層拿走,就把它删掉,還有進入到最後一層的權重删掉,然後為最後一層重新賦予随機權重,然後讓它在放射診斷資料上訓練。
如果你有足夠多的資料,你可以重新訓練神經網絡中剩下的所有層。經驗規則是,如果你有一個小資料集,就隻訓練輸出層前的最後一層,或者也許是最後一兩層。
- 預訓練:拿通用資料訓練網絡模型
- 微調:固定之前的層,拿專用資料隻訓練後面的一層
優點: 需要的資料少,學得快
2.6 多任務學習
在多任務學習中,同時開始學習的,試圖讓單個神經網絡同時做幾件事情,然後希望這裡每個任務都能幫到其他所有任務。
什麼時候可以使用多任務學習:
- 第一,如果你訓練的一組任務,可以共用低層次特征。
- 第二,這個準則沒有那麼絕對,是以不一定是對的。如果想要從多任務學習得到很大性能提升,那麼其他任務加起來必須要有比單個任務大得多的資料量
- 第三,一些場合:訓練一個足夠大的神經網絡,那麼多任務學習肯定不會或者很少會降低性能,我們都希望它可以提升性能,比單獨訓練神經網絡來單獨完成各個任務性能要更好。
多任務學習能讓你訓練一個神經網絡來執行許多任務,這可以給你更高的性能,比單獨完成各個任務更高的性能
2.7 端到端的深度學習
以前有一些資料處理系統或者學習系統,它們需要多個階段的處理。那麼端到端深度學習就是忽略所有這些不同的階段,用單個神經網絡代替它。
輸入資料,建構網絡模型,直接得到結果。這需要大量的資料以及好的應用場景。
如果不好一步到位,使用分任務的方式将其串起來也是很好的解決方案。
優點:
- 端到端學習真的隻是讓資料說話,可能更能夠捕獲資料中的任何統計資訊,而不是被迫引入人類的成見。
- 所需手工設計的元件更少,是以這也許能夠簡化設計工作流程,不需要花太多時間去手工設計功能,手工設計這些中間表示方式
缺點:
- 可能需要大量的資料
- 排除了可能有用的手工設計元件