1. 進行誤差分析
誤差分析的過程,在開發集錯分類的樣本中隨機抽一定數量的樣本,觀察這些樣本錯分原因或者類型,這些就是下一步該做的,同時統計這些原因或者類型所佔比例,通過這個比例就可以確定這些想法的潛力或者提升上限。
舉個例子
對於識別貓的圖片,算法的準確率只有90%,也就是誤差有10%,這是一個很高的誤差,檢查了錯分類的圖片,發現有很多狗的圖片,那麼可以做接下來的工作:
- 蒐集更多的狗的圖片
- 設計處理狗圖片的算法
- …
這樣子或許可以讓貓圖片分類器的效果更好。但是設計這個處理狗圖片的算法可能需要幾個月的時間,但是不知道對結果有沒有,或者效果大不大。
- 誤差分析:
手動分析其中隨機挑選的100個錯分例子,看看裏面有多少是因爲狗的圖片的原因而被錯分,如果只有5張,也就是說就算你完全解決了這個狗的問題,也只能把誤差減少到9.5%。如果是50張,那就有必要去解決這個問題了。這個比例可以認爲是該誤差提升的潛力或者上限。
同時評估多個想法
- 修復那些被認爲是貓的狗的圖片
- 修復那些像貓,比如說豹等被認爲是貓的圖片
- 模糊的圖片提升準確率
在如下的一張表中進行統計:
Image | Dogs | Great Cat | Blurry picutre | comments |
---|---|---|---|---|
1 | Keji Dog | |||
2 | ||||
… | ||||
% of total | 8% | 43% | 61% |
在查圖的過程中發現了其他類型的誤差也可以加入這個表格。
2. 清除標記錯誤的數據
深度學習算法對訓練集的隨機誤差很穩定,所以有個別人工分類錯的標籤不影響結果。但是對系統誤差不穩定,比如一直把白色狗圖片都標記成貓。
可以在上一節的表格中加上一列屬性,用來標識那些錯誤標籤的圖片。如果這些錯誤沒有影響到算法,那就不需要去處理,否則需要處理掉。
舉個例子
對於如下兩種情況:
情況A | 情況B | |
---|---|---|
開發集誤差 | 10% | 2% |
錯分類誤差 | 0.6% | 0.6% |
其他誤差 | 9.4% | 1.4% |
對於情況A,由於手工標記錯誤的原因錯誤佔比少,而情況B則很多,對於算法整體評估標準有嚴重影響,所以對於B需要修正數據集,手動重新檢查標籤,並嘗試修復一些標籤。
修改標籤需要遵循的原則
- 爲了確保開發集和測試集的分佈保持一致,需要同時對這兩個集進行修復標籤操作
- 考慮對分錯的和分對的標籤都需要進行檢查處理,數據很多,所以在必要的時候做
- 學習算法很穩定,訓練集和開發集測試集的分佈有些小差別是可以接受的
2,3兩條在後面會詳細介紹。
3. 快速建立你的系統並迭代
- 原則:上手一個新領域,儘快建立一個可運行的模型,這樣會比較有目標。
步驟:
- 設立開發集、測試集和評價指標
- 建立一個初始的模型
- 分析偏差方差和誤差分析
如果是領域資深或者該領域有成熟的參考文獻,那麼不需要如上,直接上手複雜的算法也可以了。
4. 在不同的劃分上進行訓練並測試
處理訓練集和測試集存在差異的情況。
情況描述:貓圖片分類問題,有200000張圖片來自網上,專業拍攝的圖片,10000張來自用戶的模糊圖像,構造訓練集、開發集和測試集?
- 把兩個來源的圖片混在一起,隨機抽取構造訓練集205000張,開發集2500,測試集2500。優點:訓練集開發集和測試集都來自同一分佈,好管理;壞處:開發集和測試集得到的結果不是你最初的目的 - 分類普通用戶的貓圖片。不推薦這種做法。
- 測試集是來自網上的200000圖片加上用戶的5000,開發集是用戶的2500張,測試集是用戶的2500張。好處:目標一致,就是要分類用戶的貓圖片;壞處:訓練集和開發集、測試集的分佈不一致。
5. 不匹配數據的偏差和方差
計算偏差和方差可以爲接下來的步驟有所幫助,但是對於訓練集開發集和測試集分佈不一致的時候,計算的方式會不一樣。
舉個例子
貓分類器。
訓練誤差爲1%,開發集誤差爲10%。
- 由於算法只見過訓練集的數據,沒見過開發集的數據,泛化能力差,導致了方差大。
- 由於訓練集和開發集的分佈不一致,即數據不匹配問題。
分割一個新的數據集,叫做訓練-開發集,該集是從訓練集中分割出來的,和訓練集的分佈保持一致。
在前面的例子中,如果訓練-開發集的誤差爲9%,那麼可以認爲是第一個原因,也就是泛化能力差導致了方差大;否則則是第二個原因,數據不匹配問題。
關於4個集的誤差和偏差方差等的對應關係
誤差類型 | 對應名詞 |
---|---|
人類表現水平 | |
可避免偏差 | |
訓練集誤差 | |
方差 | |
訓練-開發集誤差 | |
數據不匹配 | |
開發集誤差 | |
對開發集的過擬合程度 | |
測試集誤差 |
更通用的表格
以後視鏡導航開啓的語音識別爲例,用一般的語音和後視鏡導航的語音來構建模型
一般的語音識別 | 後視鏡導航語音 | |
---|---|---|
人類表現水平 | 4% | 6% |
可避免偏差 | ||
訓練過的數據的誤差(一般是訓練集誤差) | 7% | 6% |
方差 | ||
沒有訓練過的數據的誤差(一般是開發集或者測試集) | 10% | 6% |
這一行的差值的誤差是由數據不匹配導致的 |
6. 處理數據不匹配
- 嘗試人工分析訓練集和開發集/測試集之間的區別
- 比如上例中開發集中多了汽車的噪聲,特有的街道號碼等
- 讓測試集的分佈向開發集靠攏,或者在訓練集中加入一些開發集/測試集類似的數據
- 比如在測試集的聲音中加入汽車的噪聲,或者在測試集中加入一些帶有數字的語音樣本
測試集的原始聲音+汽車噪聲=新的測試集聲音
如果只用少量的汽車噪聲來進行合成,那麼就有對這個噪聲過擬合的風險。
打個比方,汽車遊戲中有20輛車,但是不同的造型可以截出很多的圖像,人眼看起來很多,但是如果用這個圖像做訓練去識別其他車,那麼開發集中的其他車輛都是訓練集沒有遇到過的,在一個很大的可能性空間中挑很少的一部分去訓練,所以效果會很差,過擬合很嚴重。
7. 遷移學習(transfer learning)
神經網絡可以把從一個任務中學到的知識應用到另一個獨立的任務中,例如訓練了一個分類貓的圖像,從中學到的知識能夠對X射線掃描有幫助。
比如有了一個訓練好的圖像識別的深度神經網絡(預訓練),現在要去做X射線診斷的任務。那麼只需要替換掉輸出層,然後初始化L層到輸出層或者最後兩層的權重偏置(微調),如果數據少的話,就只訓練這一層的權重偏置,如果數據多的話可以訓練整個網絡的權重偏置。
遷移學習的原因:有很多低層次的特徵,比如說邊緣檢測、曲線檢測、陽性對象檢測,從非常大的圖像識別數據庫中習得這些能力,可能有助於學習算法在放射科診斷的學習。算法學到了很多結構信息、圖像形狀的信息,其中的一些知識可能會有用,可以學習的更快或者需要的數據更少。
也可以在後面多加幾層,重新訓練的層數也可以多加幾層。
什麼時候用遷移學習
任務A遷移到任務B
- 任務A和B有相同的輸入
- 任務A有比任務B大的多的數據集
- 任務A的低層次特徵提取對任務B會有幫助
8. 多任務學習
讓一個網絡同時學習很多的任務,希望訓練出來的網絡能對這些任務都有幫助。
具體操作
主要體現在網絡的輸出層,比如說對於無人駕駛的例子,需要檢測圖像中是否出現了人行道、信號燈、人、指示牌,那麼輸出層就是一個4*1的向量。
成本函數的計算(使用邏輯迴歸的損失函數):
和Softmax不同,多任務學習可以有多個值爲1。
- 多任務學習可能比單個任務學習的效果要好
- 一個圖有4個標籤,即使有一些圖沒有全部標記出來,也就是說有些圖裏有行人,但是標籤沒有寫1,也可以用來訓練
什麼時候用遷移學習
- 需要訓練的任務可以通過共享低層次的特徵來得到更好的學習
- 每個任務的的數據是一樣的
- 可以訓練一個大規模的網絡來做所有的任務,網絡規模太小會導致性能比單獨的網絡差
9. 什麼是端對端的深度學習
以語音識別爲例,傳統的語音識別過程如下:
audio/x –> | MFCC | features–> | IML | Phonemes–> words–> transcript/y
但是對於深度學習來說:
audio/x–>transcript/y
在只有3000h語音的時候,傳統的方法可能要比深度學習要少,但是隨着數據規模的增大,深度學習的效果會比傳統的方法要好。
同時也可以結合這兩種方法,先提取一些特徵,然後再輸入網絡。
比如說人臉識別的門禁,首先用傳統的方法識別出人臉,然後裁剪出一個人臉居中的圖片,接着把這樣圖片和員工人臉庫中的圖片進行比對。
兩步法人臉識別門禁效果好的原因:
- 把問題分成兩個,每個問題的難度都降低了很多
- 兩個子任務的訓練數據都很多,從圖像中框出人臉,人臉比對這兩個子問題的訓練數據有很多
舉個例子
機器翻譯,對於傳統的方法來說,需要從輸入的英文經過文本提取等一系列操作翻譯成需要的語言,但是對於深度學習來說,只需要輸入和輸出就可以了。因爲這樣的一對數據很多,所以最後的性能好。
用x光片來估計小孩的年齡,直接估計數據少,用傳統的方法,即先檢測骨頭,然後通過骨頭來估計年齡。
10. 是否要使用端對端深度學習
優點:
- 讓數據說話,用網絡自己去構造特徵去識別,而不是通過手動主觀的方式人爲設定特徵
- 減少了手工設計特徵的工作量
缺點:
- 需要大量的數據,(x,y)類型的數據
- 排除了潛在的有用的手工組件
什麼時候使用端對端深度學習?
最關鍵的問題,是否有足夠的數據來學習我們需要的映射。
舉個例子
自動駕駛,從雷達激光的圖像中,用深度學習獲取是否有車、人行道等,然後用自動決策(而不是深度學習)來進行路徑規劃,最後用控制算法(又不是深度學習)來進行車輛的控制。
- 所以要仔細確認深度學習需要學習的x到y的映射,取決於可以收集的數據