1. 程式人生 > >深度學習——機器學習策略(2)

深度學習——機器學習策略(2)

語音識別 peak 分類器 9.png 場景 end 射線 erro 完成

1. 誤差分析manual error analysis

對學習的結果進行人工誤差分析。

例:貓的分類器

比如train結果的正確率為90%(10%的誤差),對結果進行人工分析,如果發現有些狗被識別為貓導致錯誤,那是不是就可以考慮怎麽來減少這種錯誤?

如何通過人工誤差分析來提高算法性能

可以按下面的方式來列出一些可能的錯誤類型,然後統計在一定樣本空間內每種錯誤所占的比例(中間也可能總結出新的錯誤類型),根據比例大小來判斷應該先從哪個方向開始進行優化(如下是模糊對結果影響比較大)

技術分享圖片

2. 標註錯誤的數據

監督學習是包含輸入X和輸出標簽Y,如果Y被標記錯誤(人為的),那是否有必要對這些標簽進行修改?

答案:DL對於隨機誤差魯棒性不錯,所以如果這些人為誤差隨機性較大,且數據集較大,則不太有必要進行修改。但是如果是系統誤差就問題大了

技術分享圖片

3. 修正標簽的幾點建議

技術分享圖片

4. 建立一個ML系統的建議

例如一個語音識別系統,建議快速建立一個簡單的,然後再進行優化叠代

技術分享圖片

5. 如果train和dev數據不是同分布?

第一種方式會導致dev/test中包含了train data,而這些數據並不是我們想要關心的

建議使用第二種

技術分享圖片

6. 數據不匹配問題

新增一個train-dev數據集(與train同分布),用它來判斷是否存在data mismatch問題

技術分享圖片

技術分享圖片

7. 如何處理data mismatch問題

讓train盡量與dev相似

可以采用人工合成數據的方法,但是可能會有過擬合的問題。比如為了模擬在汽車的嘈雜環境中說話的場景,將1000句說話聲與1個小時的汽車聲音合並,可能需要把1小時的時間復制n多份,然後合並,這樣可能會導致對這1小時聲音的過擬合

技術分享圖片

8. 遷移學習transfer learning

從一個任務學習後,把它的網絡再運用於另一個任務

如果一個任務的數據會比較少,那可以從另一個數據量大的任務先預學習,然後進行微調,得到我們想要的任務的結果???這裏的預學習和微調要再看一下

可以這樣的原因:兩個任務會共享一些低層的特征,比如輸入的都是圖片

做法:一般是把輸出進行修改(也可以多加幾層),對輸出層用新任務的數據再訓練,而其它層的可以不變(如果新任務的數據多,那也可以再訓練)

例:把學習貓圖片遷移到學習x射線圖

技術分享圖片

什麽時候遷移學習是比較有意義的

技術分享圖片

9. 多任務學習

一次可以學習多個特征,比如從一張圖中同時識別是否有車、有停車標誌等,也就是對於一個輸出有多種標簽

技術分享圖片

什麽時候多任務學習會比較有用

例:無人駕駛時需要同時識別多種物體

第二點:每個任務的數據量差不多,如果關註於最後一個任務,那麽其它任務的知識也許也可以起到幫助作用。而如果只有一個網絡一個任務,這個數據量可能就相對較少

第三點:多任務的性能比單任務差的唯一情況是它的網絡不夠大

技術分享圖片

總體來說:在實踐中,多任務學習會比遷移學習的使用頻率低,但是計算機視覺是例外

9. end-to-end 端到端學習

端到端的學習:利用神經網絡可以直接拿到你想要的結果

傳統上,有些事是以流水的方式工作,比如音頻轉文字,需要先識別出特征,然後音位,然後一個詞,最後變成文本。但是以端到端的方式的話就是直接輸入音頻,經過網絡學習輸出文本即可

技術分享圖片

有些並不能一步就完成的,需要分成多步。比如門禁系統,通過識別人臉來判斷是否準入

這裏分成兩步:先從圖片找出頭部並放大,再與信息系統中的頭像進行比較判斷是否一致

為什麽?每一步的操作比較簡單,且每一步的數據可以夠大。如果直接一步的話,數據量(需要的是人靠近門禁系統時的照片)並不是很大(端到端的學習需要有足夠多的數據)

技術分享圖片

9. 什麽時候應該用端到端學習

優缺點

let data speak:不在中間加入人為的思想,比如在語音識別時,並不強調一定要以音位的方式來表達轉換

hand designed:就是人為的想法,當數據量比較少的時候這個是比較有幫助的

數據和人工組件是深度學習兩個知識來源

技術分享圖片

是否應該使用端到端?

舉了一個自動駕駛的例子,一個是數據量,另一個是數據形式(x是圖片,y是方向盤的操作,這樣的數據並不是很容易獲得)。需要中間經過一些其它的系統,而不是直接端到端

技術分享圖片

深度學習——機器學習策略(2)