吳恩達深度學習——機器學習策略(二)

引言

本文是吳恩達深度學習第三課:如何構建你的機器學習項目,也就是機器學習策略。從這次課程中可以學到如何診斷在機器學習系統中的錯誤、知道如何最有效的減少錯誤、懂得複雜的機器學習設置,比如錯開的訓練/測試集和如何和人類水平的表現進行比較、知道如何應用端到端學習,遷移學習和多任務學習。

第三課有以下兩個部分,本文是第一部分。

  1. 機器學習策略(一)
  2. 機器學習策略(二)

本篇的內容沒有複雜的算法和公式推導,不過有很多文字描述。

進行錯誤分析

如果你的學習算法還沒達到人類的表現,那麼可以人工檢查一下你的算法犯的錯誤,也許可以讓你瞭解接下來應該做什麼,這個過程稱爲錯誤分析。

舉個例子,你做的貓分類器,訓練誤差率是90%,驗證誤差率是10%。雖然不錯,但離你滿意的目標還有一定的距離。

假設你看了一些錯誤分類的例子,發現算法將一些狗分類爲貓。
在這裏插入圖片描述
假設是兩隻這種狗,看起來確實有點像貓,小巧、耳朵像貓。

此時應該針對狗收集更多的圖片,還是應該設計一些只處理狗的算法。是不是應該開始去做一個項目專門處理狗? 可以這個項目要花幾個月的時間。

預期花時間去試驗,不如先看下下面這個錯誤分析的流程,能給你一些方向:

  • 收集100個錯誤分類的開發集例子
  • 計算其中包含狗圖像的數量

假設錯誤分類的圖像中只有5張圖像包含狗,這意味着,即使你完全解決了狗分類錯誤的問題,也只是能修正這100個錯誤中的5個,因爲它的佔比只爲5%,最終可能只會讓你的錯誤率從10%,下降到9.5%(10 * 5%)。

此時你就知道花大量的時間去優化狗分類錯誤的問題是徒勞的。

另一種情況,假設這100個錯誤分類的圖片中,有50張狗圖片,即50%都是狗的圖片,那麼此時花時間取解決狗分類錯誤的問題可能效果就很好,錯誤率可能從10%下降到5%。

有時你可以同時評估多個想法,比如你有幾個改善貓識別器的想法:

  • 修復狗被分類爲貓的問題
  • 修復其他貓科動物(獅子、豹等)被分類爲貓的問題
  • 提升算法在模糊圖片上的表現

要進行錯誤分析來評估這三個想法,建議先建立一個這樣的表格。

除了錯誤分類的圖片序號外還有4列,分別對應於上面三個想法,以及備註列。

在這裏插入圖片描述

把一些錯誤分類的圖片過一遍,比如第1張圖片是將狗分類爲貓,備註內容是比特犬;
第2張圖片分類錯誤是因爲很模糊;第3張是因爲在動物園下雨天拍的獅子圖片,同時具有第三個和第二個問題。

最後一行作爲彙總,統計下每種情況下的佔比。在進行這個錯誤分析的過程中,你也可能會發現其他錯誤分類的情況,比如是因爲花銷的濾鏡(比如十級美顏功能)干擾了你的分類器。此時可以增加這一列。

在這裏插入圖片描述

這個分析步驟可以給出一個方向,來看是否值得去處理每個不同的錯誤類型,比如上面的例子中,有61%的錯誤是因爲圖片很模糊,也有不少的是其他貓科圖片。

雖然不一定要你先去處理圖片模糊問題,但至少能告訴你如果你去處理狗圖片或濾鏡問題是浪費時間的。

清除標記錯誤的數據

監督學習問題的數據是由輸入XX和輸出標籤YY構成的,如果你觀察了一下你的數據,並發現有些輸出標籤YY是錯的,那麼是否值得花時間去修正這些標籤呢。

在這裏插入圖片描述
還是以貓分類器爲例,假設這裏錯誤的將一張狗的圖片標記爲貓,那麼應該怎麼辦呢?

首先,我們考慮一下訓練集,事實證明深度學習算法對於訓練集中的錯誤是相當健壯(魯棒性好)的,
只要你的標記出錯的樣本離隨機錯誤不遠,即只要不是有人故意標記錯的,那麼放着這些錯誤不管也是沒問題的。前提是數據集足夠大。

這裏說的是對隨機錯誤很健壯,但對系統誤差就沒那麼健壯了,比如有人一直把白狗標記爲貓,那麼你的分類器學習後會把所有的白狗都分類爲貓。但隨機錯誤或近似隨機錯誤對大多數深度學習算法來說都不是問題。

那如果驗證集和測試集也有這些標記出錯的樣本要怎麼辦呢

在這裏插入圖片描述
可以在進行上面錯誤分析的時候增加一個列,用來統計標籤YY錯誤的樣本數。最後還可以統計因爲標籤錯誤而分類錯誤的樣本的佔比。

所以現在的問題是是否值得修正這個6%標記出錯的樣本,如果這些標記錯誤嚴重影響了你在驗證集上評估算法的能力,那麼應該花時間去修正錯誤的標籤。

但是如果它們沒有嚴重影響到你用開發集評估算法的能力,那就不應該花寶貴的時間去處理。

通常考慮三個指標來確定是否去修正錯誤標記的數據。

在這裏插入圖片描述

假設整體的驗證集錯誤率,假設是10%,然後看由錯誤標記引起的錯誤樣本數的百分比,該例子中有6%,所以10%的6%就是0.6%。 接着要看看其他原因導致的錯誤,這裏是9.4%。

所以這種情況下, 應該集中精力修正9.4%的錯誤率,因爲由標記問題導致的錯誤只是一小部分而已。
在這裏插入圖片描述
假設像上面右邊這種情況,驗證集中共有2%的錯誤率,其中有0.6%是因爲標籤錯誤而導致的,此時修正這些標籤錯誤就很有意義。

此時假設你想修正這些錯誤標籤,這裏還有一些額外的指導原則需要了解。

  • 同樣的手段要同時作用到驗證集合測試集上,以保證它們是同分布的。
  • 建議同時檢驗算法判斷正確和判斷錯誤的樣本。
  • 只需要修正驗證集/測試集中的樣本,哪怕導致訓練集分佈稍微有點不同,這很合理。

快速搭建你的第一個系統,並進行迭代

如果你正在開發全新的機器學習應用,那麼你應該快速搭建你的第一個系統,並進行快速迭代。

  • 嘈雜的背景
    • 咖啡店別人聊天
    • 車輛的噪音
  • 帶口音的語音
  • 遠離麥克風的聲音(遠場語音識別)
  • 兒童的語音(詞語的發音與使用的詞彙)
  • 口喫(或者有很多無意義的詞,哦、啊之類的)

假設如果你想建立一個新的語音識別系統,你可以優先考慮很多事情,比如有一些技術可以讓 語音識別系統對嘈雜的背景更加健壯;還有些技術在處理帶口音的語音時更有優勢;

所以可以做很多事情來改進語音識別系統,一般對於每個機器學習系統,都有約50個方向可以跟進,每個方向都是相對合理的。

現在問題在於如何選擇一個方向集中處理,這確實很難。

因此如果你正在開發全新的機器學習應用,那麼你應該快速搭建你的第一個系統,並進行快速迭代。

  • 首先快速設定你的驗證集/測試集和評估指標,這決定了你的目標所在。
  • 一旦定好目標,馬上搭建一個機器學習系統原型(通常不需要很複雜)。然後用訓練集訓練,並看在驗證集/測試集的表現如何。
    • 建立初始系統原型的意義在於,有一個訓練過的系統,可以讓你確定偏差/方差的範圍,爲下一步做準備。
  • 建立好系統後,就可以使用偏差/方差分析與錯誤分析來確定下一步優先做什麼。
    • 如果錯誤分析告訴你大部分的錯誤來源於說話人遠離麥克風,那麼你就可以集中精力研究相關技術。

所以建議快速建立第一個系統,並迭代。除非你在這個領域很有經驗,或者有很多文獻可以借鑑參考。

但如果第一次處理某個新的問題,那麼上面的建議就很中肯。

在不同的分佈上進行訓練並測試

深度學習需要大量的數據,爲了收集到大量數據,存在驗證集和測試集數據分佈不一致的情況。

在這裏插入圖片描述
還是貓分類器,左邊是從網絡獲取的貓圖片,而右邊是用戶上傳的圖片。
你想識別用戶上傳的圖片中是否含有貓。

此時你有兩個數據來源,其中一個是你真正關心的數據,即用戶上傳的圖片。

另一個數據來源就是你通過爬蟲技術從網上抓下來的圖片。

在這裏插入圖片描述
假設你應用的用戶量不大,你只收集了1000張用戶上傳的圖片。但通過爬蟲可以下載海量的圖片。
在這裏插入圖片描述
假設從網上爬下來20萬張圖片,你真正關心的是識別用戶上傳圖片的效果如何。

那這種情況下要怎麼做呢。
有一種做法是混合這兩份數據,這樣你有21萬張圖片,然後對這些圖片隨機打亂,將它們分配到訓練集、驗證/測試集中。

在這裏插入圖片描述
假設你驗證集和測試集都取2500個樣本。
這種做法有利有弊,好處在於你的訓練集、驗證集/測試集都來自同一個分佈。
但弊端可能更大,弊端在於驗證集/測試集中小部分數據(2500張)中有很多來自於網絡中下載的圖片(這很合理,因爲網絡下載的圖片本身佔比大得多)。

但網絡下載的圖片並不是你真正想要關心的圖片。
在這裏插入圖片描述
比如驗證集的2500個樣本有2381(按照概率)是來自網上抓取的圖片,只有119是用戶上傳的圖片。這樣分配設定的目標就會變成了去優化識別來自網頁下載圖片的準確率。

因此這種方法不建議使用。建議使用的是下面這種方法:

在這裏插入圖片描述
訓練數據還是205000份,但是其中20萬份全是來自網上的圖片,加上5000份來自用戶上傳的。而驗證集/測試集裏的數據都是用戶上傳的,各佔2500份。

這種劃分的好處在於,現在你想要處理的目標就是你真正關心的圖片分佈(來自用戶上傳的)。

壞處在於,現在你訓練集和驗證集的數據分佈不一樣了,但事實證明,這樣劃分的話,從長期來看,可以給你帶來更好的系統性能。

在這裏插入圖片描述

接下來看一個語言識別的例子。假設你要做一個語音激活汽車後視鏡的系統。
在這裏插入圖片描述
實際上可以搜到這款產品了。假設你只要對這個系統說去最近的加油站怎麼走,然後後視鏡系統就會處理這個請求。

那麼你怎麼收集數據取訓練這個產品語音識別模塊呢?可能你已經在語音識別領域工作了很久了,有很多來自其他語音識別應用的數據,只是並不是來自後視鏡語音激活系統的數據,現在如何分配訓練集、驗證集/測試集。

在這裏插入圖片描述

對於訓練集,你擁有的所有語音數據有50萬份。而對於驗證集/測試集也許數據集小很多,比如實際上來自語音激活後視鏡的數據只有2萬份。這2萬份數據裏面可能會有很多地名、街道地址。

所以驗證集/測試集的數據分佈和左邊的訓練集不太一樣,

在這裏插入圖片描述
此時可以是訓練集中包含全部50萬份數據,驗證集/測試各1萬份來自後視鏡系統的數據。

也可以是50萬份數據加上1萬份來自後視鏡系統的數據作爲訓練集,剩下的1萬份後視鏡系統數據均分成驗證集/測試集。

不匹配數據劃分的偏差和方差

當你訓練集和驗證集/測試集的分佈不同時,分析偏差和方差的方式可能不一樣。我們來看下爲什麼。

繼續用貓分類器爲例,假設人類水平表現近乎完美,錯誤率約等於0%。因此要進行錯誤率分析,你通常需要看訓練錯誤和驗證錯誤。

在這裏插入圖片描述
假設訓練錯誤率是1%,而驗證錯誤率是10%。如果你驗證集和訓練集是一樣的分佈,你就可以認爲這裏存在很大的方差問題。

但是如果訓練集和驗證集的數據分佈不一樣,那麼就無法放心地下這個結論了。尤其是,可能算法在訓練集上做的很好只是因爲訓練集的圖片都很清晰,但驗證集就要難以識別的多。

所以也許算法沒有問題,只是因爲驗證集包含了更多更難分辨的圖片。

所以這個分析的問題在於,當你看訓練錯誤和驗證錯誤的時候,兩件事情變了。
首先算法只學習過訓練數據集,沒看過驗證集;其次是驗證集和訓練集數據分佈不同。

此時就無法區分這9%的錯誤率裏面有多少是因爲分佈不同導致的和沒看過驗證集導致的。

爲了分辨清楚兩個因素的影響,需要定義一組新的數據集,稱爲訓練-驗證集(Training-dev set)。

我們要讓它與訓練集擁有同樣的數據分佈,但是不直接拿來訓練你的算法。

在這裏插入圖片描述
假設之前的劃分是這樣的,驗證/測試集同分布,但和訓練集不同分佈。

接下來我們將訓練集隨機打亂,從中選出一小部分作爲訓練-驗證集。

在這裏插入圖片描述
現在驗證/測試集同分布,訓練-驗證集和訓練集也同分布。
區別在於現在你只需要用大部分訓練集來訓練網絡,接着用訓練-驗證集用於反向傳播算法。

在這裏插入圖片描述
做誤差分析時要做的是對比分類器的誤差:訓練集誤差、訓練-驗證集誤差和驗證集誤差。
在這裏插入圖片描述
假設現在對應的誤差是這樣的,我們可以看到,從訓練數據到訓練-驗證數據,誤差上升了很多,
訓練數據和訓練-驗證數據唯一的差別在於你的算法看過了訓練數據,但是沒有看過訓練-驗證集中的數據。

在這裏插入圖片描述

所以這表明你的算法方差有問題,因爲訓練-驗證誤差是在與訓練集同分布的數據上測量的。

再看一個不同的例子。
在這裏插入圖片描述
此時訓練-驗證誤差爲1.5%,所以現在就是數據不匹配問題(data mismatch),因爲從已經見過的訓練集數據到未見過的訓練-驗證集數據,誤差只增加了一點點。但到驗證集的時候,誤差出現了明顯的增長。

所以這是數據不匹配問題。再多看幾個例子。

在這裏插入圖片描述
這個例子中訓練集誤差率遠超過人類水平,並且和驗證集誤差率相差不大,因此可以說這是高偏差問題。

在這裏插入圖片描述
這個例子中,可避免方差較大,數據不匹配問題也很嚴重,因此存在上面兩種問題。

總結一下,我們要關注的關鍵數據是人類水平誤差、訓練集誤差、訓練-驗證集誤差和驗證集誤差。
在這裏插入圖片描述
通過這些指標就能大致瞭解可避免偏差、方差以及數據不匹配的程度。

其實還可以加上一個測試集誤差,從測試集誤差和驗證集誤差之間的差值可以看過對驗證集的過擬合程度。

在這裏插入圖片描述
上面看到的指標都是從上往下增加的例子,還有可能不是這樣:
在這裏插入圖片描述
可能是某個語音是被任務的數據,它會導致這樣的效果,即訓練集的數據要比驗證集和測試集更難學習。

對於這種分析還有一個更通用的公式。
還是以語音激活後視鏡這個爲例,畫一張表格,表格的兩列分別代表通用的語音識別數據和語音激活後視鏡數據。

第二行代表人類水平表現;第三行代表訓練NN的數據誤差;第四行代表沒被訓練過的數據誤差|。

在這裏插入圖片描述
在訓練集上的訓練誤差和人類水平誤差的差值就是可避免誤差,訓練-驗證誤差和訓練誤差的差值就是方差的大小。而在訓練-驗證集上的誤差和在驗證/測試集上的誤差差值代表數據不匹配的程度。

我們已經知道了如何處理偏差問題和方差問題,那如何處理數據不匹配的問題呢?

實際上沒有非常系統的方法,但有一些事情你可以試試,或許能有幫助。

定位數據不匹配

如果錯誤分析顯示有一個數據不匹配問題,該怎麼辦呢

實際上沒有非常系統的方法,但有一些事情你可以試試,或許能有幫助。

  • 做錯誤分析,嘗試瞭解訓練集和驗證測試集的具體差異
    • 如果是語音喚醒後視鏡系統,可能需要你自己聽一下來自驗證集的樣本,比如你可能會發現驗證集樣本噪音很多,有很多汽車噪音,這就是你的驗證集和訓練集差異之一。
  • 嘗試把訓練數據變得與驗證集更相似,或手機更多類似驗證集和測試集的數據
    • 比如你發現車輛背景噪音是主要錯誤來源,那麼你可以模擬車輛噪音數據,加到訓練集裏

如果你想讓訓練數據變得與驗證集更相似,你可以利用的一種技術是人工合成數據。

要建立語音識別系統,可能你沒有那麼多實際在汽車背景噪音下錄製的音頻。但我們發現可以合成,所以假設你錄製了大量清晰的音頻,就是沒有車輛背景噪音的音頻。

在這裏插入圖片描述
就是用清晰音頻加上汽車噪音合成一種包含噪音的音頻。

通過人工合成數據技術,你可以快速製造更多的訓練數據,就像真的在車裏錄的那樣。

但是人工數據合成有一個潛在問題,比如你在安靜的背景裏錄製了10000個小時的音頻數據,然後只錄制了一小時車輛背景噪音,那麼你可以這麼做,將這1小時車輛噪音複製10000次,併疊加到安靜背景下錄得的10000個小時數據中。

如果這麼做了,人聽起來這個音頻沒什麼問題,但有個風險是,你的算法對這1小時汽車噪音過擬合,

在這裏插入圖片描述
假設上面這個大圓圈是所有你可能想到的汽車噪音情形,而裏面的這一個小圓圈就是你錄製的1個小時的汽車噪音,此時顯然你只模擬了全部數據空間中的一小部分。

對人類來說,聽起來和其他任意一小時車輛噪音是一樣的,但是神經網路可能會對這一小時噪音數據過擬合。並且無法保證哪怕你花代價錄製了10000個小時不同的噪音,再疊加到無背景噪音的清晰音頻中,得到的效果比重複一小時的噪音更好。

這裏人工數據合成的挑戰在於,人耳無法分辨10000個小時不同噪音的不同之處。

下面是另一個例子,假設你要做無人駕駛裏的一個小任務——車輛識別,並框出來。

在這裏插入圖片描述
很多人討論的一個思路是用計算機合成圖片來模擬成千上萬的車輛,

在這裏插入圖片描述
這裏有幾張圖片是計算機合成的,人眼來看的話,這個合成其實是非常逼真了。

不幸的是,合成的車輛也是所有車輛可能集合中的一小部分。
在這裏插入圖片描述
雖然人類覺得合成的汽車圖像沒什麼問題,但是算法可能會對合成的這麼一個小子集過擬合。

總之,如果你認爲存在數據不匹配問題,那麼建議你做錯誤分析,看看訓練集和驗證集,試圖找出這兩個數據分佈到底有什麼不同。然後嘗試收集更多像驗證集的數據來做訓練,我們談到其中一種技術是人工合成。在語音識別領域中,人工合成的確顯著地提升了系統的表現,所以這是可行的。但當你使用人工數據合成時,要記住你可能會只選擇了所有可能空間的一小部分去模擬數據。

遷移學習

深度學習中最強大的理念之一就是,有時你能把從一個任務中學到的知識應用到另一個獨立的任務中。

比如你已經訓練好了一個神經網絡,能識別貓,然後(部分)使用這些知識取幫助你更好地閱讀X射線掃描圖,這就是所謂的遷移學習。

在這裏插入圖片描述
假設你想把訓練好的圖像識別神經網絡應用到X射線掃描圖中,你可以做的是,把神經網絡最後的輸出層拿走,同時把進入到最後一層的權重刪掉,然後爲最後一層重新賦值隨機權重。 然後把這個神經網路放到X射線掃描數據上訓練。
在這裏插入圖片描述
要用X射線數據集重新訓練神經網絡有幾種做法,如果你的X射線數據集很小,這時可能只需要重新訓練最後一層的權重,即W[L],b[L]W^{[L]},b^{[L]},保持其他層的權重不變。

如果你有足夠的數據,那麼可以重新訓練神經網絡所有的層。

在圖像識別數據的初始訓練階段,有時稱爲預訓練(pre-training)(因爲你用圖像識別數據去預訓練神經網絡的權重),如果你以後更新所有權重,然後在X射線數據上訓練,有時這個過程叫微調(fine tuning)

爲什麼遷移學習有效果呢

因爲從大規模的圖像識別數據集中學習到的邊緣檢測、曲線檢測、明暗對象檢測等低層次的信息,或許能幫助你的學習算法更好地區進行X射線掃描數據的診斷。它會在圖像的組織結構和自然特徵中學習到很多信息,其中一些信息會非常的有幫助。

所以當神經網絡學會了圖像識別,意味着它可能學到了以下信息:關於不同圖片的點、線、曲面等信息,以及在不同圖片中看起來是什麼樣子的,這些都能幫助你在X射線掃描診斷的神經網絡中,學習得更快或減少學習需要的數據。

下面看另一個例子,假設你已經訓練好了一個語音識別系統,現在假設你要構建一個喚醒詞檢測系統。

在這裏插入圖片描述
爲了喚醒我們的語音控制設備,我們會說小度你好或hi siri。
爲了實現這樣的功能,你同樣可以去除神經網路的最後一層,然後創建一個新的輸出節點,這裏你也可以創建好幾層新的網絡

在這裏插入圖片描述
接下來根據你擁有的數據集規模,你可能只對你的神經網絡中新建的幾層進行訓練,或者可以重新訓練更多層的神經網絡。

那麼遷移學習在什麼時候有用呢,當你在你的被遷移的模型中擁有大量的數據,而你在你需要解決的問題上的數據較少時,遷移學習是非常適用的。

假設你在一個圖像識別任務裏擁有一百萬個樣本,這意味着大量數據的低層次特徵信息在神經網絡的前幾層被學習到了,但是對於X射線掃描結果診斷的任務中,可能你只有幾百個樣本。 所以從圖像識別中學習到的大量的信息可以被用於遷移,並且這些信息會有效地幫助你處理好X射線診斷,哪怕你沒有足夠多的數據來完成訓練放射診斷任務。

一個遷移學習不適用的例子是,上面講到的數據集被顛倒過來的情況,比如你有一百個樣本來做圖像識別,然後你有1000個樣本來做X射線診斷任務,這時X射線掃描圖像比那100個貓、狗的圖像更有價值。

總結一下,什麼時候從任務A遷移到任務B的遷移學習有意義呢

  • 任務A和任務B用同樣的輸入(都是圖片輸入或語音輸入)
  • 任務A的數據量遠遠大於任務B的數據量
  • 任務A中的低層次特徵會幫助到任務B達成目標時

多任務學習

假設你正在建造一輛自動駕駛汽車,你的汽車需要檢測幾個不同事物:行人、其他車輛、停車標誌和交通信號燈等。
在這裏插入圖片描述
上圖中有一輛車和一個停車標誌,所以把這個圖像作爲一個輸入的話,那麼此時的輸出有多個。

現在要做的是訓練一個神經網絡來預測輸出。

在這裏插入圖片描述
爲了訓練這個神經網絡,需要先定義這個神經網絡的損失函數,因爲輸出有4個,所以和我們之前看到的有所不同:

在這裏插入圖片描述
損失函數用的還是交叉熵。和Softmax迴歸不同是,這個例子中一個樣本可以有多個標籤。

到目前爲止在算法中,在訓練時,好像每個圖像樣本都要標記這四個類別。其實在多任務學習中,即使一些圖像指標及某些類別也能正常工作。
在這裏插入圖片描述
假設你有一份這樣的數據集,你仍然可以訓練你的算法,同時完成標記這4個類別的任務,即使有些樣本只有一些類別標記。

在這裏插入圖片描述
在這裏的jj1144中,即使這些標籤中的一些是問號或沒有標註,你只需要對標籤維0或1的jj值求和。

那什麼時候進行多任務學習纔有意義?它在以下三個條件下適用。

  • 你要訓練的一系列任務可以共享一些低層次特徵信息
  • 每個單項任務的數據量非常相似

假設有100個任務,每個任務都只有1000個樣本
在這裏插入圖片描述
我們來看第100個任務,如果你想單獨地完成第100個任務,你只有1000個樣子來訓練這一任務,但是通過其他99個任務的訓練,有9.9萬個樣本會是一個很大的推動。

同樣地,其餘99個任務也能從其他任務信息得到幫助。

  • 能訓練一個很大的神經網絡使所有任務都有很高的準確度
    • 訓練一個很大的神經網絡通常還會比單獨訓練多個神經網絡的表現更好

什麼是端到端深度學習

以前我們有一些數據處理系統,或由多個階段組成的學習系統,端到端的深度學習可以忽略所有這些不同的階段,用單個神經網絡代替它。

在這裏插入圖片描述
以語音識別爲例,傳統上語音識別需要很多階段的處理,首先要提取一些(人工設計的)特徵,然後應用及其學習算法在音頻片段中找到音位(phonemes,音位是聲音的基本單位),然後將音位串在一起構成獨立的詞,最後轉換成文本。
在這裏插入圖片描述

和這種有很多階段的流水線相比,端到端深度學習做的是訓練一個巨大的神經網絡,輸入一段音頻,輸出直接就是文本。

端到端深度學習的一個挑戰是,你可能需要大量數據才能讓系統表現良好。
如果你只有3000小時的音頻數據,那麼傳統的流水線效果更好。但當你擁有非常大的數據集時,比如10000(或10萬)個小時的數據,這時端到端方法就表現很好了。

但也不是所有的問題都能用端到端方法來解決。來看個例子,
在這裏插入圖片描述
以人臉識別刷門禁爲例,比較有效的做法不是識別整個人的圖像,而是分成兩步,第一步從圖像中找到人臉框出來並放大,第二步針對第一步的人臉去進行識別。

爲什麼兩步法更好呢,第一個原因是你解決的兩個問題,每個問題實際上要簡單得多;第二個原因是,兩個子任務的訓練數據都有很多。相反,如果你想直接識別整個人的圖像,那麼數據量就少了很多。

因爲你沒有足夠多的數據來解決這個端到端學習問題,但是你有很多數據來解決兩個子問題。把這個問題分成兩個子問題,可以比純粹的端到端深度學習放到可以得到更好的表現。

我們再看一個例子,

在這裏插入圖片描述
以機器翻譯爲例,傳統的機器翻譯需要一個複雜的流水線,比如先要提取特徵,最後翻譯成法語。

對於機器翻譯來說,確實有很多(英文,法文)的數據對,因此端到端深度學習在機器翻譯領域非常好用。

最後一個例子是假設你想觀察一個孩子手部的x光照片,來評估一個孩子的年齡,用於判斷一個孩子是否發育正常。

在這裏插入圖片描述
傳統的方法可能要單獨看每一塊骨頭,然後根據骨頭的長度來判斷年齡。

相比之下,端到端可以直接從圖像去判斷孩子的年齡,但是你需要大量的數據去訓練。而如今數據量不夠,因此最好是用上面的方法,分成兩步。

我們看的這些例子中有些能應用端到端的方法,有些不能。那如何判斷是否應該使用端到端深度學習方法呢

是否要應用端到端方法

我們先來看下端到端深度學習到一些優缺點。

優點:

  • 只是讓數據說話(直接從輸入映射到輸出,但是需要數據量足夠大)
  • 所需人工設計的組件更少

缺點:

  • 需要大量的數據
  • 可能排除了有用的人工設計組件

所以如果你在構建一個新的機器學習系統,而你在決定是否使用端到端深度學習,關鍵的問題是,你是否有足夠多的數據能直接學到從xx映射到yy足夠複雜的函數。

參考

  1. 吳恩達深度學習 專項課程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章