深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

本文是吳恩達老師的深度學習課程[1]筆記部分。

做者:黃海廣[2]

主要編寫人員:黃海廣、林興木(第四全部底稿,第五課第一二週,第三週前三節)、祝彥森:(第三課全部底稿)、賀志堯(第五課第三週底稿)、王翔、胡瀚文、 餘笑、 鄭浩、李懷鬆、 朱越鵬、陳偉賀、 曹越、 路皓翔、邱牧宸、 唐天澤、 張浩、 陳志豪、 遊忍、 澤霖、沈偉臣、 賈紅順、 時超、 陳哲、趙一帆、 胡瀟楊、段希、於衝、張鑫倩

參與編輯人員:黃海廣、陳康凱、石晴路、鍾博彥、向偉、嚴鳳龍、劉成 、賀志堯、段希、陳瑤、林家泳、王翔、 謝士晨、蔣鵬

備註:筆記和做業(含數據、原始做業文件)、視頻都在 github[3]中下載。

我將陸續將課程筆記發佈在公衆號「機器學習初學者」,敬請關注。

第二週:機器學習策略(2)(ML Strategy (2))

2.1 進行偏差分析(Carrying out error analysis)

你好,歡迎回來,若是你但願讓學習算法可以勝任人類能作的任務,但你的學習算法尚未達到人類的表現,那麼人工檢查一下你的算法犯的錯誤也許可讓你瞭解接下來應該作什麼。這個過程稱爲錯誤分析,咱們從一個例子開始講吧。git

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

假設你正在調試貓分類器,而後你取得了90%準確率,至關於10%錯誤,,在你的開發集上作到這樣,這離你但願的目標還有很遠。也許你的隊員看了一下算法分類出錯的例子,注意到算法將一些狗分類爲貓,你看看這兩隻狗,它們看起來是有點像貓,至少乍一看是。因此也許你的隊友給你一個建議,如何針對狗的圖片優化算法。試想一下,你能夠針對狗,收集更多的狗圖,或者設計一些只處理狗的算法功能之類的,爲了讓你的貓分類器在狗圖上作的更好,讓算法再也不將狗分類成貓。因此問題在於,你是否是應該去開始作一個項目專門處理狗?這項目可能須要花費幾個月的時間才能讓算法在狗圖片上犯更少的錯誤,這樣作值得嗎?或者與其花幾個月作這個項目,有可能最後發現這樣一點用都沒有。這裏有個錯誤分析流程,可讓你很快知道這個方向是否值得努力。github

這是我建議你作的,首先,收集一下,好比說100個錯誤標記的開發集樣本,而後手動檢查,一次只看一個,看看你的開發集裏有多少錯誤標記的樣本是狗。如今,假設事實上,你的100個錯誤標記樣本中只有5%是狗,就是說在100個錯誤標記的開發集樣本中,有5個是狗。這意味着100個樣本,在典型的100個出錯樣本中,即便你徹底解決了狗的問題,你也只能修正這100個錯誤中的5個。或者換句話說,若是隻有5%的錯誤是狗圖片,那麼若是你在狗的問題上花了不少時間,那麼你最多隻能但願你的錯誤率從10%降低到9.5%,對吧?錯誤率相對降低了5%(整體降低了0.5%,100的錯誤樣本,錯誤率爲10%,則樣本爲1000),那就是10%降低到9.5%。你就能夠肯定這樣花時間很差,或者也許應該花時間,但至少這個分析給出了一個上限。若是你繼續處理狗的問題,可以改善算法性能的上限,對吧?在機器學習中,有時咱們稱之爲性能上限,就意味着,最好能到哪裏,徹底解決狗的問題能夠對你有多少幫助。算法

但如今,假設發生了另外一件事,假設咱們觀察一下這100個錯誤標記的開發集樣本,你發現實際有50張圖都是狗,因此有50%都是狗的照片,如今花時間去解決狗的問題可能效果就很好。這種狀況下,若是你真的解決了狗的問題,那麼你的錯誤率可能就從10%降低到5%了。而後你可能以爲讓錯誤率減半的方向值得一試,能夠集中精力減小錯誤標記的狗圖的問題。數據庫

我知道在機器學習中,有時候咱們很鄙視手工操做,或者使用了太多人爲數值。但若是你要搭建應用系統,那這個簡單的人工統計步驟,錯誤分析,能夠節省大量時間,能夠迅速決定什麼是最重要的,或者最有但願的方向。實際上,若是你觀察100個錯誤標記的開發集樣本,也許只須要5到10分鐘的時間,親自看看這100個樣本,並親自統計一下有多少是狗。根據結果,看看有沒有佔到5%、50%或者其餘東西。這個在5到10分鐘以內就能給你估計這個方向有多少價值,而且能夠幫助你作出更好的決定,是否是把將來幾個月的時間投入到解決錯誤標記的狗圖這個問題。安全

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

在本幻燈片中,咱們要描述一下如何使用錯誤分析來評估某個想法,這個樣本里狗的問題是否值得解決。有時你在作錯誤分析時,也能夠同時並行評估幾個想法,好比,你有幾個改善貓檢測器的想法,也許你能夠改善針對狗圖的性能,或者有時候要注意,那些貓科動物,如獅子,豹,獵豹等等,它們常常被分類成小貓或者家貓,因此你也許能夠想辦法解決這個錯誤。或者也許你發現有些圖像是模糊的,若是你能設計出一些系統,可以更好地處理模糊圖像。也許你有些想法,知道大概怎麼處理這些問題,要進行錯誤分析來評估這三個想法。網絡

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

我會作的是創建這樣一個表格,我一般用電子表格來作,但普通文本文件也能夠。在最左邊,人工過一遍你想分析的圖像集,因此圖像多是從1到100,若是你觀察100張圖的話。電子表格的一列就對應你要評估的想法,因此狗的問題,貓科動物的問題,模糊圖像的問題,我一般也在電子表格中留下空位來寫評論。因此記住,在錯誤分析過程當中,你就看看算法識別錯誤的開發集樣本,若是你發現第一張識別錯誤的圖片是狗圖,那麼我就在那裏打個勾,爲了幫我本身記住這些圖片,有時我會在評論裏註釋,也許這是一張比特犬的圖。若是第二張照片很模糊,也記一下。若是第三張是在下雨天動物園裏的獅子,被識別成貓了,這是大型貓科動物,還有圖片模糊,在評論部分寫動物園下雨天,是雨天讓圖像模糊的之類的。最後,這組圖像過了一遍以後,我能夠統計這些算法(錯誤)的百分比,或者這裏每一個錯誤類型的百分比,有多少是狗,大貓或模糊這些錯誤類型。因此也許你檢查的圖像中8%是狗,可能43%屬於大貓,61%屬於模糊。這意味着掃過每一列,並統計那一列有多少百分比圖像打了勾。架構

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

在這個步驟作到一半時,有時你可能會發現其餘錯誤類型,好比說你可能發現有Instagram濾鏡,那些花哨的圖像濾鏡,干擾了你的分類器。在這種狀況下,實際上能夠在錯誤分析途中,增長這樣一列,好比多色濾鏡Instagram濾鏡和Snapchat濾鏡,而後再過一遍,也統計一下那些問題,並肯定這個新的錯誤類型佔了多少百分比,這個分析步驟的結果能夠給出一個估計,是否值得去處理每一個不一樣的錯誤類型。併發

例如,在這個樣本中,有不少錯誤來自模糊圖片,也有不少錯誤類型是大貓圖片。因此這個分析的結果不是說你必定要處理模糊圖片,這個分析沒有給你一個嚴格的數學公式,告訴你應該作什麼,但它能讓你對應該選擇那些手段有個概念。它也告訴你,好比說無論你對狗圖片或者Instagram圖片處理得有多好,在這些例子中,你最多隻能取得8%或者12%的性能提高。而在大貓圖片這一類型,你能夠作得更好。或者模糊圖像,這些類型有改進的潛力。這些類型裏,性能提升的上限空間要大得多。因此取決於你有多少改善性能的想法,好比改善大貓圖片或者模糊圖片的表現。也許你能夠選擇其中兩個,或者你的團隊成員足夠多,也許你把團隊能夠分紅兩個團隊,其中一個想辦法改善大貓的識別,另外一個團隊想辦法改善模糊圖片的識別。但這個快速統計的步驟,你能夠常常作,最多須要幾小時,就能夠真正幫你選出高優先級任務,並瞭解每種手段對性能有多大提高空間。機器學習

因此總結一下,進行錯誤分析,你應該找一組錯誤樣本,可能在你的開發集裏或者測試集裏,觀察錯誤標記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬於不一樣錯誤類型的錯誤數量。在這個過程當中,你可能會獲得啓發,概括出新的錯誤類型,就像咱們看到的那樣。若是你過了一遍錯誤樣本,而後說,天,有這麼多Instagram濾鏡或Snapchat濾鏡,這些濾鏡干擾了個人分類器,你就能夠在途中新建一個錯誤類型。總之,經過統計不一樣錯誤標記類型佔總數的百分比,能夠幫你發現哪些問題須要優先解決,或者給你構思新優化方向的靈感。在作錯誤分析的時候,有時你會注意到開發集裏有些樣本被錯誤標記了,這時應該怎麼作呢?咱們下一個視頻來討論。ide

2.2 清除標註錯誤的數據(Cleaning up Incorrectly labeled data)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

首先,咱們來考慮訓練集,事實證實,深度學習算法對於訓練集中的隨機錯誤是至關健壯的(robust)。只要你的標記出錯的樣本,只要這些錯誤樣本離隨機錯誤不太遠,有時可能作標記的人沒有注意或者不當心,按錯鍵了,若是錯誤足夠隨機,那麼放着這些錯誤無論可能也沒問題,而不要花太多時間修復它們。

固然你瀏覽一下訓練集,檢查一下這些標籤,並修正它們也沒什麼害處。有時候修正這些錯誤是有價值的,有時候放着無論也能夠,只要總數據集總足夠大,實際錯誤率可能不會過高。我見過一大批機器學習算法訓練的時候,明知訓練集裏有X個錯誤標籤,但最後訓練出來也沒問題。

我這裏先警告一下,深度學習算法對隨機偏差很健壯,但對系統性的錯誤就沒那麼健壯了。因此好比說,若是作標記的人一直把白色的狗標記成貓,那就成問題了。由於你的分類器學習以後,會把全部白色的狗都分類爲貓。但隨機錯誤或近似隨機錯誤,對於大多數深度學習算法來講不成問題。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
因此如今問題是,是否值得修正這6%標記出錯的樣本,個人建議是,若是這些標記錯誤嚴重影響了你在開發集上評估算法的能力,那麼就應該去花時間修正錯誤的標籤。可是,若是它們沒有嚴重影響到你用開發集評估成本誤差的能力,那麼可能就不該該花寶貴的時間去處理。

我給你看一個樣本,解釋清楚個人意思。因此我建議你看3個數字來肯定是否值得去人工修正標記出錯的數據,我建議你看看總體的開發集錯誤率,在咱們之前的視頻中的樣本,咱們說也許咱們的系統達到了90%總體準確度,因此有10%錯誤率,那麼你應該看看錯誤標記引發的錯誤的數量或者百分比。因此在這種狀況下,6%的錯誤來自標記出錯,因此10%的6%就是0.6%。也許你應該看看其餘緣由致使的錯誤,若是你的開發集上有10%錯誤,其中0.6%是由於標記出錯,剩下的佔9.4%,是其餘緣由致使的,好比把狗誤認爲貓,大貓圖片。因此在這種狀況下,我說有9.4%錯誤率須要集中精力修正,而標記出錯致使的錯誤是整體錯誤的一小部分而已,因此若是你必定要這麼作,你也能夠手工修正各類錯誤標籤,但也許這不是當下最重要的任務。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們再看另外一個樣本,假設你在學習問題上取得了很大進展,因此如今錯誤率再也不是10%了,假設你把錯誤率降到了2%,但整體錯誤中的0.6%仍是標記出錯致使的。因此如今,若是你想檢查一組標記出錯的開發集圖片,開發集數據有2%標記錯誤了,那麼其中很大一部分,0.6%除以2%,實際上變成30%標籤而不是6%標籤了。有那麼多錯誤樣本實際上是由於標記出錯致使的,因此如今其餘緣由致使的錯誤是1.4%。當測得的那麼大一部分的錯誤都是開發集標記出錯致使的,那彷佛修正開發集裏的錯誤標籤彷佛更有價值。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

如今若是你決定要去修正開發集數據,手動從新檢查標籤,並嘗試修正一些標籤,這裏還有一些額外的方針和原則須要考慮。首先,我鼓勵你無論用什麼修正手段,都要同時做用到開發集和測試集上,咱們以前討論過爲何,開發和測試集必須來自相同的分佈。開發集肯定了你的目標,當你擊中目標後,你但願算法可以推廣到測試集上,這樣你的團隊可以更高效的在來自同一分佈的開發集和測試集上迭代。若是你打算修正開發集上的部分數據,那麼最好也對測試集作一樣的修正以確保它們繼續來自相同的分佈。因此咱們僱傭了一我的來仔細檢查這些標籤,但必須同時檢查開發集和測試集。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

其次,我強烈建議你要考慮同時檢驗算法判斷正確和判斷錯誤的樣本,要檢查算法出錯的樣本很容易,只須要看看那些樣本是否須要修正,但還有可能有些樣本算法判斷正確,那些也須要修正。若是你只修正算法出錯的樣本,你對算法的誤差估計可能會變大,這會讓你的算法有一點不公平的優點,咱們就須要再次檢查出錯的樣本,但也須要再次檢查作對的樣本,由於算法有可能由於運氣好把某個東西判斷對了。在那個特例裏,修正那些標籤可能會讓算法從判斷對變成判斷錯。這第二點不是很容易作,因此一般不會這麼作。一般不會這麼作的緣由是,若是你的分類器很準確,那麼判斷錯的次數比判斷正確的次數要少得多。那麼就有2%出錯,98%都是對的,因此更容易檢查2%數據上的標籤,然而檢查98%數據上的標籤要花的時間長得多,因此一般不這麼作,但也是要考慮到的。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

最後,若是你進入到一個開發集和測試集去修正這裏的部分標籤,你可能會,也可能不會去對訓練集作一樣的事情,還記得咱們在其餘視頻裏講過,修正訓練集中的標籤其實相對沒那麼重要,你可能決定只修正開發集和測試集中的標籤,由於它們一般比訓練集小得多,你可能不想把全部額外的精力投入到修正大得多的訓練集中的標籤,因此這樣實際上是能夠的。咱們將在本週晚些時候討論一些步驟,用於處理你的訓練數據分佈和開發與測試數據不一樣的狀況,對於這種狀況學習算法其實至關健壯,你的開發集和測試集來自同一分佈很是重要。但若是你的訓練集來自稍微不一樣的分佈,一般這是一件很合理的事情,我會在本週晚些時候談談如何處理這個問題。

最後我講幾個建議:

首先,深度學習研究人員有時會喜歡這樣說:「我只是把數據提供給算法,我訓練過了,效果拔羣」。這話說出了不少深度學習錯誤的真相,更多時候,咱們把數據餵給算法,而後訓練它,並減小人工干預,減小使用人類的看法。但我認爲,在構造實際系統時,一般須要更多的人工錯誤分析,更多的人類看法來架構這些系統,儘管深度學習的研究人員不肯意認可這點。

其次,不知道爲何,我看一些工程師和研究人員不肯意親自去看這些樣本,也許作這些事情很無聊,坐下來看100或幾百個樣原本統計錯誤數量,但我常常親自這麼作。當我帶領一個機器學習團隊時,我想知道它所犯的錯誤,我會親自去看看這些數據,嘗試和一部分錯誤做鬥爭。我想就由於花了這幾分鐘,或者幾個小時去親自統計數據,真的能夠幫你找到須要優先處理的任務,我發現花時間親自檢查數據很是值得,因此我強烈建議大家這樣作,若是你在搭建你的機器學習系統的話,而後你想肯定應該優先嚐試哪些想法,或者哪些方向。

這就是錯誤分析過程,在下一個視頻中,我想分享一下錯誤分析是如何在啓動新的機器學習項目中發揮做用的。

2.3 快速搭建你的第一個系統,並進行迭代(Build your first system quickly, then iterate)

若是你正在開發全新的機器學習應用,我一般會給你這樣的建議,你應該儘快創建你的第一個系統原型,而後快速迭代。

讓我告訴你個人意思,我在語音識別領域研究了不少年,若是你正在考慮創建一個新的語音識別系統,其實你能夠走不少方向,能夠優先考慮不少事情。

好比,有一些特定的技術,可讓語音識別系統對嘈雜的背景更加健壯,嘈雜的背景多是說咖啡店的噪音,背景裏有不少人在聊天,或者車輛的噪音,高速上汽車的噪音或者其餘類型的噪音。有一些方法可讓語音識別系統在處理帶口音時更健壯,還有特定的問題和麥克風與說話人距離很遠有關,就是所謂的遠場語音識別。兒童的語音識別帶來特殊的挑戰,挑戰來自單詞發音方面,還有他們選擇的詞彙,他們傾向於使用的詞彙。還有好比說,說話人口吃,或者說了不少無心義的短語,好比「哦」,「啊」之類的。你能夠選擇不少不一樣的技術,讓你聽寫下來的文本可讀性更強,因此你能夠作不少事情來改進語音識別系統。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

通常來講,對於幾乎全部的機器學習程序可能會有50個不一樣的方向能夠前進,而且每一個方向都是相對合理的能夠改善你的系統。但挑戰在於,你如何選擇一個方向集中精力處理。即便我已經在語音識別領域工做多年了,若是我要爲一個新應用程序域構建新系統,我仍是以爲很難不花時間去思考這個問題就直接選擇方向。因此我建議大家,若是你想搭建全新的機器學習程序,就是快速搭好你的第一個系統,而後開始迭代。個人意思是我建議你快速設立開發集和測試集還有指標,這樣就決定了你的目標所在,若是你的目標定錯了,以後改也是能夠的。但必定要設立某個目標,而後我建議你立刻搭好一個機器學習系統原型,而後找到訓練集,訓練一下,看看效果,開始理解你的算法表現如何,在開發集測試集,你的評估指標上表現如何。當你創建第一個系統後,你就能夠立刻用到以前說的誤差方差分析,還有以前最後幾個視頻討論的錯誤分析,來肯定下一步優先作什麼。特別是若是錯誤分析讓你瞭解到大部分的錯誤的來源是說話人遠離麥克風,這對語音識別構成特殊挑戰,那麼你就有很好的理由去集中精力研究這些技術,所謂遠場語音識別的技術,這基本上就是處理說話人離麥克風很遠的狀況。

創建這個初始系統的全部意義在於,它能夠是一個快速和粗糙的實現(quick and dirty implementation),你知道的,別想太多。初始系統的所有意義在於,有一個學習過的系統,有一個訓練過的系統,讓你肯定誤差方差的範圍,就能夠知道下一步應該優先作什麼,讓你可以進行錯誤分析,能夠觀察一些錯誤,而後想出全部能走的方向,哪些是實際上最有但願的方向。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

因此回顧一下,我建議大家快速創建你的第一個系統,而後迭代。不過若是你在這個應用程序領域有不少經驗,這個建議適用程度要低一些。還有一種狀況適應程度更低,當這個領域有不少能夠借鑑的學術文獻,處理的問題和你要解決的幾乎徹底相同,因此,好比說,人臉識別就有不少學術文獻,若是你嘗試搭建一我的臉識別設備,那麼能夠從現有大量學術文獻爲基礎出發,一開始就搭建比較複雜的系統。但若是你第一次處理某個新問題,那我真的不鼓勵你想太多,或者把第一個系統弄得太複雜。我建議大家構建一些快速而粗糙的實現,而後用來幫你找到改善系統要優先處理的方向。我見過不少機器學習項目,我以爲有些團隊的解決方案想太多了,他們造出了過於複雜的系統。我也見過有限團隊想的不夠,而後造出過於簡單的系統。平均來講,我見到更多的團隊想太多,構建太複雜的系統。

因此我但願這些策略有幫助,若是你將機器學習算法應用到新的應用程序裏,你的主要目標是弄出能用的系統,你的主要目標並非發明全新的機器學習算法,這是徹底不一樣的目標,那時你的目標應該是想出某種效果很是好的算法。因此我鼓勵大家搭建快速而粗糙的實現,而後用它作誤差/方差分析,用它作錯誤分析,而後用分析結果肯定下一步優先要作的方向。

2.4 使用來自不一樣分佈的數據,進行訓練和測試(Training and testing on different distributions)

深度學習算法對訓練數據的胃口很大,當你收集到足夠多帶標籤的數據構成訓練集時,算法效果最好,這致使不少團隊用盡一切辦法收集數據,而後把它們堆到訓練集裏,讓訓練的數據量更大,即便有些數據,甚至是大部分數據都來自和開發集、測試集不一樣的分佈。在深度學習時代,愈來愈多的團隊都用來自和開發集、測試集分佈不一樣的數據來訓練,這裏有一些微妙的地方,一些最佳作法來處理訓練集和測試集存在差別的狀況,咱們來看看。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

假設你在開發一個手機應用,用戶會上傳他們用手機拍攝的照片,你想識別用戶從應用中上傳的圖片是否是貓。如今你有兩個數據來源,一個是你真正關心的數據分佈,來自應用上傳的數據,好比右邊的應用,這些照片通常更業餘,取景不太好,有些甚至很模糊,由於它們都是業餘用戶拍的。另外一個數據來源就是你能夠用爬蟲程序挖掘網頁直接下載,就這個樣本而言,能夠下載不少取景專業、高分辨率、拍攝專業的貓圖片。若是你的應用用戶數還很少,也許你只收集到10,000張用戶上傳的照片,但經過爬蟲挖掘網頁,你能夠下載到海量貓圖,也許你從互聯網上下載了超過20萬張貓圖。而你真正關心的算法表現是你的最終系統處理來自應用程序的這個圖片分佈時效果好很差,由於最後你的用戶會上傳相似右邊這些圖片,你的分類器必須在這個任務中表現良好。如今你就陷入困境了,由於你有一個相對小的數據集,只有10,000個樣原本自那個分佈,而你還有一個大得多的數據集來自另外一個分佈,圖片的外觀和你真正想要處理的並不同。但你又不想直接用這10,000張圖片,由於這樣你的訓練集就過小了,使用這20萬張圖片彷佛有幫助。可是,困境在於,這20萬張圖片並不徹底來自你想要的分佈,那麼你能夠怎麼作呢?

這裏有一種選擇,你能夠作的一件事是將兩組數據合併在一塊兒,這樣你就有21萬張照片,你能夠把這21萬張照片隨機分配到訓練、開發和測試集中。爲了說明觀點,咱們假設你已經肯定開發集和測試集各包含2500個樣本,因此你的訓練集有205000個樣本。如今這麼設立你的數據集有一些好處,也有壞處。好處在於,你的訓練集、開發集和測試集都來自同一分佈,這樣更好管理。但壞處在於,這壞處還不小,就是若是你觀察開發集,看看這2500個樣本其中不少圖片都來自網頁下載的圖片,那並非你真正關心的數據分佈,你真正要處理的是來自手機的圖片。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

我建議你走另一條路,就是這樣,訓練集,好比說仍是205,000張圖片,咱們的訓練集是來自網頁下載的200,000張圖片,而後若是須要的話,再加上5000張來自手機上傳的圖片。而後對於開發集和測試集,這數據集的大小是按比例畫的,你的開發集和測試集都是手機圖。而訓練集包含了來自網頁的20萬張圖片,還有5000張來自應用的圖片,開發集就是2500張來自應用的圖片,測試集也是2500張來自應用的圖片。這樣將數據分紅訓練集、開發集和測試集的好處在於,如今你瞄準的目標就是你想要處理的目標,你告訴你的團隊,個人開發集包含的數據所有來自手機上傳,這是你真正關心的圖片分佈。咱們試試搭建一個學習系統,讓系統在處理手機上傳圖片分佈時效果良好。缺點在於,固然了,如今你的訓練集分佈和你的開發集、測試集分佈並不同。但事實證實,這樣把數據分紅訓練、開發和測試集,在長期能給你帶來更好的系統性能。咱們之後會討論一些特殊的技巧,能夠處理 訓練集的分佈和開發集和測試集分佈不同的狀況。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們來看另外一個樣本,假設你正在開發一個全新的產品,一個語音激活汽車後視鏡,這在中國是個真實存在的產品,它正在進入其餘國家。但這就是造一個後視鏡,把這個小東西換掉,如今你就能夠和後視鏡對話了,而後只須要說:「親愛的後視鏡,請幫我找找到最近的加油站的導航方向」,而後後視鏡就會處理這個請求。因此這其實是一個真正的產品,假設如今你要爲你本身的國家研製這個產品,那麼你怎麼收集數據去訓練這個產品語言識別模塊呢?

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

在這個樣本中,你應該這樣設立你的訓練集,左邊有500,000段語音,而後你的開發集和測試集,我把它簡寫成

,可能每一個集包含10,000段語音,是從實際的語音激活後視鏡收集的。或者換種方式,若是你以爲不須要將20,000段來自語音激活後視鏡的錄音所有放進開發和測試集,也許你能夠拿一半,把它放在訓練集裏,那麼訓練集多是51萬段語音,包括來自那裏的50萬段語音,還有來自後視鏡的1萬段語音,而後開發集和測試集也許各自有5000段語音。因此有2萬段語音,也許1萬段語音放入了訓練集,5000放入開發集,5000放入測試集。因此這是另外一種將你的數據分紅訓練、開發和測試的方式。這樣你的訓練集大得多,大概有50萬段語音,比只用語音激活後視鏡數據做爲訓練集要大得多。

因此在這個視頻中,大家見到幾組樣本,讓你的訓練集數據來自和開發集、測試集不一樣的分佈,這樣你就能夠有更多的訓練數據。在這些樣本中,這將改善你的學習算法。

如今你可能會問,是否是應該把收集到的數據都用掉?答案很微妙,不必定都是確定的答案,咱們在下段視頻看看一個反例。

2.5 數據分佈不匹配時,誤差與方差的分析(Bias and Variance with mismatched data distributions)

估計學習算法的誤差和方差真的能夠幫你肯定接下來應該優先作的方向,可是,當你的訓練集來自和開發集、測試集不一樣分佈時,分析誤差和方差的方式可能不同,咱們來看爲何。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們繼續用貓分類器爲例,咱們說人類在這個任務上能作到幾乎完美,因此貝葉斯錯誤率或者說貝葉斯最優錯誤率,咱們知道這個問題裏幾乎是0%。因此要進行錯誤率分析,你一般須要看訓練偏差,也要看看開發集的偏差。好比說,在這個樣本中,你的訓練集偏差是1%,你的開發集偏差是10%,若是你的開發集來自和訓練集同樣的分佈,你可能會說,這裏存在很大的方差問題,你的算法不能很好的從訓練集出發泛化,它處理訓練集很好,但處理開發集就忽然間效果不好了。

但若是你的訓練數據和開發數據來自不一樣的分佈,你就不能再放心下這個結論了。特別是,也許算法在開發集上作得不錯,可能由於訓練集很容易識別,由於訓練集都是高分辨率圖片,很清晰的圖像,但開發集要難以識別得多。因此也許軟件沒有方差問題,這只不過反映了開發集包含更難準確分類的圖片。因此這個分析的問題在於,當你看訓練偏差,再看開發偏差,有兩件事變了。首先算法只見過訓練集數據,沒見過開發集數據。第二,開發集數據來自不一樣的分佈。並且由於你同時改變了兩件事情,很難確認這增長的9%偏差率有多少是由於算法沒看到開發集中的數據致使的,這是問題方差的部分,有多少是由於開發集數據就是不同。

爲了弄清楚哪一個因素影響更大,若是你徹底不懂這兩種影響究竟是什麼,別擔憂咱們立刻會再講一遍。但爲了分辨清楚兩個因素的影響,定義一組新的數據是有意義的,咱們稱之爲訓練-開發集,因此這是一個新的數據子集。咱們應該從訓練集的分佈裏挖出來,但你不會用來訓練你的網絡。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

個人意思是咱們已經設立過這樣的訓練集、開發集和測試集了,而且開發集和測試集來自相同的分佈,但訓練集來自不一樣的分佈。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們要作的是隨機打散訓練集,而後分出一部分訓練集做爲訓練-開發集(training-dev),就像開發集和測試集來自同一分佈,訓練集、訓練-開發集也來自同一分佈。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

但不一樣的地方是,如今你只在訓練集訓練你的神經網絡,你不會讓神經網絡在訓練-開發集上跑後向傳播。爲了進行偏差分析,你應該作的是看看分類器在訓練集上的偏差,訓練-開發集上的偏差,還有開發集上的偏差。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

好比說這個樣本中,訓練偏差是1%,咱們說訓練-開發集上的偏差是9%,而後開發集偏差是10%,和之前同樣。你就能夠從這裏獲得結論,當你從訓練數據變到訓練-開發集數據時,錯誤率真的上升了不少。而訓練數據和訓練-開發數據的差別在於,你的神經網絡能看到第一部分數據並直接在上面作了訓練,但沒有在訓練-開發集上直接訓練,這就告訴你,算法存在方差問題,由於訓練-開發集的錯誤率是在和訓練集來自同一分佈的數據中測得的。因此你知道,儘管你的神經網絡在訓練集中表現良好,但沒法泛化到來自相同分佈的訓練-開發集裏,它沒法很好地泛化推廣到來自同一分佈,但之前沒見過的數據中,因此在這個樣本中咱們確實有一個方差問題。

咱們來看一個不一樣的樣本,假設訓練偏差爲1%,訓練-開發偏差爲1.5%,但當你開始處理開發集時,錯誤率上升到10%。如今你的方差問題就很小了,由於當你從見過的訓練數據轉到訓練-開發集數據,神經網絡尚未看到的數據,錯誤率只上升了一點點。但當你轉到開發集時,錯誤率就大大上升了,因此這是數據不匹配的問題。由於你的學習算法沒有直接在訓練-開發集或者開發集訓練過,可是這兩個數據集來自不一樣的分佈。但無論算法在學習什麼,它在訓練-開發集上作的很好,但開發集上作的很差,因此總之你的算法擅長處理和你關心的數據不一樣的分佈,咱們稱之爲數據不匹配的問題。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
咱們再來看幾個樣本,我會在下一行裏寫出來,因上面沒空間了。因此訓練偏差、訓練-開發偏差、還有開發偏差,咱們說訓練偏差是10%,訓練-開發偏差是11%,開發偏差爲12%,要記住,人類水平對貝葉斯錯誤率的估計大概是0%,若是你獲得了這種等級的表現,那就真的存在誤差問題了。存在可避免誤差問題,由於算法作的比人類水平差不少,因此這裏的誤差真的很高。

最後一個例子,若是你的訓練集錯誤率是10%,你的訓練-開發錯誤率是11%,開發錯誤率是20%,那麼這其實有兩個問題。第一,可避免誤差至關高,由於你在訓練集上都沒有作得很好,而人類能作到接近0%錯誤率,但你的算法在訓練集上錯誤率爲10%。這裏方差彷佛很小,但數據不匹配問題很大。因此對於這個樣本,我說,若是你有很大的誤差或者可避免誤差問題,還有數據不匹配問題。

咱們看看這張幻燈片裏作了什麼,而後寫出通常的原則,咱們要看的關鍵數據是人類水平錯誤率,你的訓練集錯誤率,訓練-開發集錯誤率,因此這分佈和訓練集同樣,但你沒有直接在上面訓練。根據這些錯誤率之間差距有多大,你能夠大概知道,可避免誤差、方差數據不匹配問題各自有多大。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
咱們說人類水平錯誤率是4%的話,你的訓練錯誤率是7%,而你的訓練-開發錯誤率是10%,而開發錯誤率是12%,這樣你就大概知道可避免誤差有多大。由於你知道,你但願你的算法至少要在訓練集上的表現接近人類。而這大概代表了方差大小,因此你從訓練集泛化推廣到訓練-開發集時效果如何?而這告訴你數據不匹配的問題大概有多大。技術上你還能夠再加入一個數字,就是測試集表現,咱們寫成測試集錯誤率,你不該該在測試集上開發,由於你不但願對測試集過擬合。但若是你看看這個,那麼這裏的差距就說明你對開發集過擬合的程度。因此若是開發集表現和測試集表現有很大差距,那麼你可能對開發集過擬合了,因此也許你須要一個更大的開發集,對吧?要記住,你的開發集和測試集來自同一分佈,因此這裏存在很大差距的話。若是算法在開發集上作的很好,比測試集好得多,那麼你就可能對開發集過擬合了。若是是這種狀況,那麼你可能要往回退一步,而後收集更多開發集數據。如今我寫出這些數字,這數字列表越日後數字越大。
深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

這裏還有個例子,其中數字並無一直變大,也許人類的表現是4%,訓練錯誤率是7%,訓練-開發錯誤率是10%。但咱們看看開發集,你發現,很意外,算法在開發集上作的更好,也許是6%。因此若是你見到這種現象,好比說在處理語音識別任務時發現這樣,其中訓練數據其實比你的開發集和測試集難識別得多。因此這兩個(7%,10%)是從訓練集分佈評估的,而這兩個(6%,6%)是從開發測試集分佈評估的。因此有時候若是你的開發測試集分佈比你應用實際處理的數據要容易得多,那麼這些錯誤率可能真的會降低。因此若是你看到這樣的有趣的事情,可能須要比這個分析更普適的分析,我在下一張幻燈片裏快速解釋一下。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

因此,咱們就以語音激活後視鏡爲例子,事實證實,咱們一直寫出的數字能夠放到一張表裏,在水平軸上,我要放入不一樣的數據集。好比說,你可能從通常語音識別任務裏獲得不少數據,因此你可能會有一堆數據,來自小型智能音箱的語音識別問題的數據,你購買的數據等等。而後你收集了和後視鏡有關的語音數據,在車裏錄的。因此這是表格的

軸,不一樣的數據集。在另外一條軸上,我要標記處理數據不一樣的方式或算法。

首先,人類水平,人類處理這些數據集時準確度是多少。而後這是神經網絡訓練過的數據集上達到的錯誤率,而後還有神經網絡沒有訓練過的數據集上達到的錯誤率。因此結果咱們上一張幻燈片說是人類水平的錯誤率,數字填入這個單元格里(第二行第二列),人類對這一類數據處理得有多好,好比來自各類語音識別系統的數據,那些進入你的訓練集的成千上萬的語音片斷,而上一張幻燈片中的例子是4%。這個數字(7%),多是咱們的訓練錯誤率,在上一張幻燈片中的例子中是7%。是的,若是你的學習算法見過這個樣本,在這個樣本上跑過梯度降低,這個樣原本自你的訓練集分佈或通常的語音識別數據分佈,你的算法在訓練過的數據中表現如何呢?而後這就是訓練-開發集錯誤率,一般來自這個分佈的錯誤率會高一點,通常的語音識別數據,若是你的算法沒在來自這個分佈的樣本上訓練過,它的表現如何呢?這就是咱們說的訓練-開發集錯誤率。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

若是你移到右邊去,這個單元格是開發集錯誤率,也多是測試集錯誤,在剛剛的例子中是6%。而開發集和測試集,其實是兩個數字,但均可以放入這個單元格里。若是你有來自後視鏡的數據,來自從後視鏡應用在車裏實際錄得的數據,但你的神經網絡沒有在這些數據上作過反向傳播,那麼錯誤率是多少呢?

咱們在上一張幻燈片做的分析是觀察這兩個數字之間的差別(Human level 4%和Training error 7%),還有這兩個數字之間(Training error 7%和Training-dev error 10%),這兩個數字之間(Training-dev error 10%和Dev/Test dev 6%)。這個差距(Human level 4%和Training error 7%)衡量了可避免誤差大小,這個差距Training error 7%和Training-dev error 10%)衡量了方差大小,而這個差距(Training-dev error 10%和Dev/Test dev 6%)衡量了數據不匹配問題的大小。

事實證實,把剩下的兩個數字(rearview mirror speech data 6%和Error on examples trained on 6%),也放到這個表格裏也是有用的。若是結果這也是6%,那麼你得到這個數字的方式是你讓一些人本身標記他們的後視鏡語音識別數據,看看人類在這個任務裏能作多好,也許結果也是6%。作法就是,你收集一些後視鏡語音識別數據,把它放在訓練集中,讓神經網絡去學習,而後測量那個數據子集上的錯誤率,但若是你獲得這樣的結果,好吧,那就是說你已經在後視鏡語音數據上達到人類水平了,因此也許你對那個數據分佈作的已經不錯了。

當你繼續進行更多分析時,分析並不必定會給你指明一條前進道路,但有時候你可能洞察到一些特徵。好比比較這兩個數字(General speech recognition Human level 4%和rearview mirror speech data 6%),告訴咱們對於人類來講,後視鏡的語音數據實際上比通常語音識別更難,由於人類都有6%的錯誤,而不是4%的錯誤,但看看這個差值,你就能夠了解到誤差和方差,還有數據不匹配這些問題的不一樣程度。因此更通常的分析方法是,我已經用過幾回了。我還沒用過,但對於不少問題來講檢查這個子集的條目,看看這些差值,已經足夠讓你往相對有但願的方向前進了。但有時候填滿整個表格,你可能會洞察到更多特徵。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

最後,咱們之前講過不少處理誤差的手段,講過處理方差的手段,但怎麼處理數據不匹配呢?特別是開發集、測試集和你的訓練集數據來自不一樣分佈時,這樣能夠用更多訓練數據,真正幫你提升學習算法性能。可是,若是問題不只來自誤差和方差,你如今又有了這個潛在的新問題,數據不匹配,有什麼好辦法能夠處理數據不匹配的呢?實話說,並無很通用,或者至少說是系統解決數據不匹配問題的方法,但你能夠作一些嘗試,可能會有幫助,咱們在下一個視頻裏看看這些嘗試。

因此咱們講了如何使用來自和開發集、測試集不一樣分佈的訓練數據,這能夠給你提供更多訓練數據,所以有助於提升你的學習算法的性能,可是,潛在問題就不僅是誤差和方差問題,這樣作會引入第三個潛在問題,數據不匹配。若是你作了錯誤分析,並發現數據不匹配是大量錯誤的來源,那麼你怎麼解決這個問題呢?但結果很不幸,並無特別系統的方法去解決數據不匹配問題,但你能夠作一些嘗試,可能會有幫助,咱們來看下一段視頻。

2.6 處理數據不匹配問題(Addressing data mismatch)

若是您的訓練集來自和開發測試集不一樣的分佈,若是錯誤分析顯示你有一個數據不匹配的問題該怎麼辦?這個問題沒有徹底系統的解決方案,但咱們能夠看看一些能夠嘗試的事情。若是我發現有嚴重的數據不匹配問題,我一般會親自作錯誤分析,嘗試瞭解訓練集和開發測試集的具體差別。技術上,爲了不對測試集過擬合,要作錯誤分析,你應該人工去看開發集而不是測試集。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

但做爲一個具體的例子,若是你正在開發一個語音激活的後視鏡應用,你可能要看看……我想若是是語音的話,你可能要聽一下來自開發集的樣本,嘗試弄清楚開發集和訓練集到底有什麼不一樣。因此,好比說你可能會發現不少開發集樣本噪音不少,有不少汽車噪音,這是你的開發集和訓練集差別之一。也許你還會發現其餘錯誤,好比在你的車子裏的語言激活後視鏡,你發現它可能常常識別錯誤街道號碼,由於那裏有不少導航請求都有街道地址,因此獲得正確的街道號碼真的很重要。當你瞭解開發集偏差的性質時,你就知道,開發集有可能跟訓練集不一樣或者更難識別,那麼你能夠嘗試把訓練數據變得更像開發集一點,或者,你也能夠收集更多相似你的開發集和測試集的數據。因此,好比說,若是你發現車輛背景噪音是主要的錯誤來源,那麼你能夠模擬車輛噪聲數據,我會在下一張幻燈片裏詳細討論這個問題。或者你發現很難識別街道號碼,也許你能夠有意識地收集更多人們說數字的音頻數據,加到你的訓練集裏。

如今我知道這張幻燈片只給出了粗略的指南,列出一些你能夠作的嘗試,這不是一個系統化的過程,我想,這不能保證你必定能取得進展。但我發現這種人工看法,咱們能夠一塊兒嘗試收集更多和真正重要的場合類似的數據,這一般有助於解決不少問題。因此,若是你的目標是讓訓練數據更接近你的開發集,那麼你能夠怎麼作呢?

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

你能夠利用的其中一種技術是人工合成數據(artificial data synthesis),咱們討論一下。在解決汽車噪音問題的場合,因此要創建語音識別系統。也許實際上你沒那麼多實際在汽車背景噪音下錄得的音頻,或者在高速公路背景噪音下錄得的音頻。但咱們發現,你能夠合成。因此假設你錄製了大量清晰的音頻,不帶車輛背景噪音的音頻,「The quick brown fox jumps over the lazy dog」(音頻播放),因此,這多是你的訓練集裏的一段音頻,順便說一下,這個句子在AI測試中常用,由於這個短句包含了從a到z全部字母,因此你會常常見到這個句子。可是,有了這個「the quick brown fox jumps over the lazy dog」這段錄音以後,你也能夠收集一段這樣的汽車噪音,(播放汽車噪音音頻)這就是汽車內部的背景噪音,若是你一聲不響開車的話,就是這種聲音。若是你把兩個音頻片斷放到一塊兒,你就能夠合成出"the quick brown fox jumps over the lazy dog"(帶有汽車噪聲),在汽車背景噪音中的效果,聽起來像這樣,因此這是一個相對簡單的音頻合成例子。在實踐中,你可能會合成其餘音頻效果,好比混響,就是聲音從汽車內壁上反彈疊加的效果。

可是經過人工數據合成,你能夠快速製造更多的訓練數據,就像真的在車裏錄的那樣,那就不須要花時間實際出去收集數據,好比說在實際行駛中的車子,錄下上萬小時的音頻。因此,若是錯誤分析顯示你應該嘗試讓你的數據聽起來更像在車裏錄的,那麼人工合成那種音頻,而後餵給你的機器學習算法,這樣作是合理的。

如今咱們要提醒一下,人工數據合成有一個潛在問題,好比說,你在安靜的背景裏錄得10,000小時音頻數據,而後,好比說,你只錄了一小時車輛背景噪音,那麼,你能夠這麼作,將這1小時汽車噪音回放10,000次,併疊加到在安靜的背景下錄得的10,000小時數據。若是你這麼作了,人聽起來這個音頻沒什麼問題。可是有一個風險,有可能你的學習算法對這1小時汽車噪音過擬合。特別是,若是這組汽車裏錄的音頻多是你能夠想象的全部汽車噪音背景的集合,若是你只錄了一小時汽車噪音,那你可能只模擬了所有數據空間的一小部分,你可能只從汽車噪音的很小的子集來合成數據。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
而對於人耳來講,這些音頻聽起來沒什麼問題,由於一小時的車輛噪音對人耳來講,聽起來和其餘任意一小時車輛噪音是同樣的。但你有可能從這整個空間很小的一個子集出發合成數據,神經網絡最後可能對你這一小時汽車噪音過擬合。我不知道以較低成本收集10,000小時的汽車噪音是否可行,這樣你就不用一遍又一遍地回放那1小時汽車噪音,你就有10,000個小時永不重複的汽車噪音來疊加到10,000小時安靜背景下錄得的永不重複的語音錄音。這是能夠作的,但不保證能作。可是使用10,000小時永不重複的汽車噪音,而不是1小時重複學習,算法有可能取得更好的性能。人工數據合成的挑戰在於,人耳的話,人耳是沒法分辨這10,000個小時聽起來和那1小時沒什麼區別,因此你最後可能會製造出這個原始數據不多的,在一個小得多的空間子集合成的訓練數據,但你本身沒意識到。

這裏有人工合成數據的另外一個例子,假設你在研發無人駕駛汽車,你可能但願檢測出這樣的車,而後用這樣的框包住它。不少人都討論過的一個思路是,爲何不用計算機合成圖像來模擬成千上萬的車輛呢?事實上,這裏有幾張車輛照片(下圖後兩張圖片),實際上是用計算機合成的,我想這個合成是至關逼真的,我想經過這樣合成圖片,你能夠訓練出一個至關不錯的計算機視覺系統來檢測車子。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

不幸的是,上一張幻燈片介紹的狀況也會在這裏出現,好比這是全部車的集合,若是你只合成這些車中很小的子集,對於人眼來講也許這樣合成圖像沒什麼問題,但你的學習算法可能會對合成的這一個小子集過擬合。特別是不少人都獨立提出了一個想法,一旦你找到一個電腦遊戲,裏面車輛渲染的畫面很逼真,那麼就能夠截圖,獲得數量巨大的汽車圖片數據集。事實證實,若是你仔細觀察一個視頻遊戲,若是這個遊戲只有20輛獨立的車,那麼這遊戲看起來還行。由於你是在遊戲裏開車,你只看到這20輛車,這個模擬看起來至關逼真。但現實世界裏車輛的設計可不僅20種,若是你用着20量獨特的車合成的照片去訓練系統,那麼你的神經網絡極可能對這20輛車過擬合,但人類很難分辨出來。即便這些圖像看起來很逼真,你可能真的只用了全部可能出現的車輛的很小的子集。

因此,總而言之,若是你認爲存在數據不匹配問題,我建議你作錯誤分析,或者看看訓練集,或者看看開發集,試圖找出,試圖瞭解這兩個數據分佈到底有什麼不一樣,而後看看是否有辦法收集更多看起來像開發集的數據做訓練。

咱們談到其中一種辦法是人工數據合成,人工數據合成確實有效。在語音識別中。我已經看到人工數據合成顯著提高了已經很是好的語音識別系統的表現,因此這是可行的。但當你使用人工數據合成時,必定要謹慎,要記住你有可能從全部可能性的空間只選了很小一部分去模擬數據。

因此這就是如何處理數據不匹配問題,接下來,我想和你分享一些想法就是如何從多種類型的數據同時學習。

2.7 遷移學習(Transfer learning)

深度學習中,最強大的理念之一就是,有的時候神經網絡能夠從一個任務中習得知識,並將這些知識應用到另外一個獨立的任務中。因此例如,也許你已經訓練好一個神經網絡,可以識別像貓這樣的對象,而後使用那些知識,或者部分習得的知識去幫助您更好地閱讀x射線掃描圖,這就是所謂的遷移學習。

咱們來看看,假設你已經訓練好一個圖像識別神經網絡,因此你首先用一個神經網絡,並在
對上訓練,其中是圖像,是某些對象,圖像是貓、狗、鳥或其餘東西。若是你把這個神經網絡拿來,而後讓它適應或者說遷移,在不一樣任務中學到的知識,好比放射科診斷,就是說閱讀

射線掃描圖。你能夠作的是把神經網絡最後的輸出層拿走,就把它刪掉,還有進入到最後一層的權重刪掉,而後爲最後一層從新賦予隨機權重,而後讓它在放射診斷數據上訓練。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

具體來講,在第一階段訓練過程當中,當你進行圖像識別任務訓練時,你能夠訓練神經網絡的全部經常使用參數,全部的權重,全部的層,而後你就獲得了一個可以作圖像識別預測的網絡。在訓

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

在這個例子中你作的是,把圖像識別中學到的知識應用或遷移到放射科診斷上來,爲何這樣作有效果呢?有不少低層次特徵,好比說邊緣檢測、曲線檢測、陽性對象檢測(positive objects),從很是大的圖像識別數據庫中習得這些能力可能有助於你的學習算法在放射科診斷中作得更好,算法學到了不少結構信息,圖像形狀的信息,其中一些知識可能會頗有用,因此學會了圖像識別,它就可能學到足夠多的信息,能夠了解不一樣圖像的組成部分是怎樣的,學到線條、點、曲線這些知識,也許對象的一小部分,這些知識有可能幫助你的放射科診斷網絡學習更快一些,或者須要更少的學習數據。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

這裏是另外一個例子,假設你已經訓練出一個語音識別系統,如今
是音頻或音頻片斷輸入,而是聽寫文本,因此你已經訓練了語音識別系統,讓它輸出聽寫文本。如今咱們說你想搭建一個「喚醒詞」或「觸發詞」檢測系統,所謂喚醒詞或觸發詞就是咱們說的一句話,能夠喚醒家裏的語音控制設備,好比你說「Alexa」能夠喚醒一個亞馬遜Echo設備,或用「OK Google」來喚醒Google設備,用"Hey Siri"來喚醒蘋果設備,用"你好百度"喚醒一個百度設備。要作到這點,你可能須要去掉神經網絡的最後一層,而後加入新的輸出節點,但有時你能夠不僅加入一個新節點,或者甚至往你的神經網絡加入幾個新層,而後把喚醒詞檢測問題的標籤

喂進去訓練。再次,這取決於你有多少數據,你可能只須要從新訓練網絡的新層,也許你須要從新訓練神經網絡中更多的層。

那麼遷移學習何時是有意義的呢?遷移學習起做用的場合是,在遷移來源問題中你有不少數據,但遷移目標問題你沒有那麼多數據。例如,假設圖像識別任務中你有1百萬個樣本,因此這裏數據至關多。能夠學習低層次特徵,能夠在神經網絡的前面幾層學到如何識別不少有用的特徵。可是對於放射科任務,也許你只有一百個樣本,因此你的放射學診斷問題數據不多,也許只有100次x

射線掃描,因此你從圖像識別訓練中學到的不少知識能夠遷移,而且真正幫你增強放射科識別任務的性能,即便你的放射科數據不多。
深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

對於語音識別,也許你已經用10,000小時數據訓練過你的語言識別系統,因此你從這10,000小時數據學到了不少人類聲音的特徵,這數據量其實不少了。但對於觸發字檢測,也許你只有1小時數據,因此這數據過小,不能用來擬合不少參數。因此在這種狀況下,預先學到不少人類聲音的特徵人類語言的組成部分等等知識,能夠幫你創建一個很好的喚醒字檢測器,即便你的數據集相對較小。對於喚醒詞任務來講,至少數據集要小得多。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

因此在這兩種狀況下,你從數據量不少的問題遷移到數據量相對小的問題。而後反過來的話,遷移學習可能就沒有意義了。好比,你用100張圖訓練圖像識別系統,而後有100甚至1000張圖用於訓練放射科診斷系統,人們可能會想,爲了提高放射科診斷的性能,假設你真的但願這個放射科診斷系統作得好,那麼用放射科圖像訓練可能比使用貓和狗的圖像更有價值,因此這裏(100甚至1000張圖用於訓練放射科診斷系統)的每一個樣本價值比這裏(100張圖訓練圖像識別系統)要大得多,至少就創建性能良好的放射科系統而言是這樣。因此,若是你的放射科數據更多,那麼你這100張貓貓狗狗或者隨機物體的圖片確定不會有太大幫助,由於來自貓狗識別任務中,每一張圖的價值確定不如一張

射線掃描圖有價值,對於創建良好的放射科診斷系統而言是這樣。

因此,這是其中一個例子,說明遷移學習可能不會有害,但也別期望這麼作能夠帶來有意義的增益。一樣,若是你用10小時數據訓練出一個語音識別系統。而後你實際上有10個小時甚至更多,好比說50個小時喚醒字檢測的數據,你知道遷移學習有可能會有幫助,也可能不會,也許把這10小時數據遷移學習不會有太大壞處,可是你也別期望會獲得有意義的增益。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
因此總結一下,何時遷移學習是有意義的?若是你想從任務
學習並遷移一些知識到任務,那麼當任務和任務都有一樣的輸入時,遷移學習是有意義的。在第一個例子中,和的輸入都是圖像,在第二個例子中,二者輸入都是音頻。當任務的數據比任務多得多時,遷移學習意義更大。全部這些假設的前提都是,你但願提升任務的性能,由於任務每一個數據更有價值,對任務來講一般任務的數據量必須大得多,纔有幫助,由於任務裏單個樣本的價值沒有比任務單個樣本價值大。而後若是你以爲任務的低層次特徵,能夠幫助任務

的學習,那遷移學習更有意義一些。

而在這兩個前面的例子中,也許學習圖像識別教給系統足夠多圖像相關的知識,讓它能夠進行放射科診斷,也許學習語音識別教給系統足夠多人類語言信息,能幫助你開發觸發字或喚醒字檢測器。

因此總結一下,遷移學習最有用的場合是,若是你嘗試優化任務B的性能,一般這個任務數據相對較少,例如,在放射科中你知道很難收集不少
射線掃描圖來搭建一個性能良好的放射科診斷系統,因此在這種狀況下,你可能會找一個相關但不一樣的任務,如圖像識別,其中你可能用1百萬張圖片訓練過了,並從中學到不少低層次特徵,因此那也許能幫助網絡在任務在放射科任務上作得更好,儘管任務沒有這麼多數據。遷移學習何時是有意義的?它確實能夠顯著提升你的學習任務的性能,但我有時候也見過有些場合使用遷移學習時,任務實際上數據量比任務

要少,這種狀況下增益可能很少。

好,這就是遷移學習,你從一個任務中學習,而後嘗試遷移到另外一個不一樣任務中。從多個任務中學習還有另一個版本,就是所謂的多任務學習,當你嘗試從多個任務中並行學習,而不是串行學習,在訓練了一個任務以後試圖遷移到另外一個任務,因此在下一個視頻中,讓咱們來討論多任務學習。

2.8 多任務學習(Multi-task learning)

在遷移學習中,你的步驟是串行的,你從任務
裏學習只是而後遷移到任務

。在多任務學習中,你是同時開始學習的,試圖讓單個神經網絡同時作幾件事情,而後但願這裏每一個任務都能幫到其餘全部任務。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們來看一個例子,假設你在研發無人駕駛車輛,那麼你的無人駕駛車可能須要同時檢測不一樣的物體,好比檢測行人、車輛、停車標誌,還有交通燈各類其餘東西。好比在左邊這個例子中,圖像裏有個停車標誌,而後圖像中有輛車,但沒有行人,也沒有交通燈。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

而這張圖能夠有不少不一樣的標籤,因此不是說每張圖都只是一張行人圖片,汽車圖片、停車標誌圖片或者交通燈圖片。你要知道每張照片是否有行人、或汽車、停車標誌或交通燈,多個物體可能同時出如今一張圖裏。實際上,在上一張幻燈片中,那張圖同時有車和停車標誌,但沒有行人和交通燈,因此你不是隻給圖片一個標籤,而是須要遍歷不一樣類型,而後看看每一個類型,那類物體有沒有出如今圖中。因此我就說在這個場合,一張圖能夠有多個標籤。若是你訓練了一個神經網絡,試圖最小化這個成本函數,你作的就是多任務學習。由於你如今作的是創建單個神經網絡,觀察每張圖,而後解決四個問題,系統試圖告訴你,每張圖裏面有沒有這四個物體。另外你也能夠訓練四個不一樣的神經網絡,而不是訓練一個網絡作四件事情。但神經網絡一些早期特徵,在識別不一樣物體時都會用到,而後你發現,訓練一個神經網絡作四件事情會比訓練四個徹底獨立的神經網絡分別作四件事性能要更好,這就是多任務學習的力量。

另外一個細節,到目前爲止,我是這麼描述算法的,好像每張圖都有所有標籤。事實證實,多任務學習也能夠處理圖像只有部分物體被標記的狀況。因此第一個訓練樣本,咱們說有人,給數據貼標籤的人告訴你裏面有一個行人,沒有車,但他們沒有標記是否有停車標誌,或者是否有交通燈。也許第二個例子中,有行人,有車。可是,當標記人看着那張圖片時,他們沒有加標籤,沒有標記是否有停車標誌,是否有交通燈等等。也許有些樣本都有標記,但也許有些樣本他們只標記了有沒有車,而後還有一些是問號。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

即便是這樣的數據集,你也能夠在上面訓練算法,同時作四個任務,即便一些圖像只有一小部分標籤,其餘是問號或者無論是什麼。而後你訓練算法的方式,即便這裏有些標籤是問號,或者沒有標記,這就是對
從1到4求和,你就只對帶0和1標籤的

值求和,因此當有問號的時候,你就在求和時忽略那個項,這樣只對有標籤的值求和,因而你就能利用這樣的數據集。

那麼多任務學習何時有意義呢?當三件事爲真時,它就是有意義的。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

第一,若是你訓練的一組任務,能夠共用低層次特徵。對於無人駕駛的例子,同時識別交通燈、汽車和行人是有道理的,這些物體有類似的特徵,也許能幫你識別停車標誌,由於這些都是道路上的特徵。

第二,這個準則沒有那麼絕對,因此不必定是對的。但我從不少成功的多任務學習案例中看到,若是每一個任務的數據量很接近,你還記得遷移學習時,你從
任務學到知識而後遷移到任務,因此若是任務有1百萬個樣本,任務只有1000個樣本,那麼你從這1百萬個樣本學到的知識,真的能夠幫你加強對更小數據集任務的訓練。那麼多任務學習又怎麼樣呢?在多任務學習中,你一般有更多任務而不只僅是兩個,因此也許你有,之前咱們有4個任務,但好比說你要完成100個任務,而你要作多任務學習,嘗試同時識別100種不一樣類型的物體。你可能會發現,每一個任務大概有1000個樣本。因此若是你專一增強單個任務的性能,好比咱們專一增強第100個任務的表現,咱們用表示,若是你試圖單獨去作這個最後的任務,你只有1000個樣本去訓練這個任務,這是100項任務之一,而經過在其餘99項任務的訓練,這些加起來能夠一共有99000個樣本,這可能大幅提高算法性能,能夠提供不少知識來加強這個任務的性能。否則對於任務

,只有1000個樣本的訓練集,效果可能會不好。若是有對稱性,這其餘99個任務,也許能提供一些數據或提供一些知識來幫到這100個任務中的每個任務。因此第二點不是絕對正確的準則,但我一般會看的是若是你專一於單項任務,若是想要從多任務學習獲得很大性能提高,那麼其餘任務加起來必需要有比單個任務大得多的數據量。要知足這個條件,其中一種方法是,好比右邊這個例子這樣,或者若是每一個任務中的數據量很相近,但關鍵在於,若是對於單個任務你已經有1000個樣本了,那麼對於全部其餘任務,你最好有超過1000個樣本,這樣其餘任務的知識才能幫你改善這個任務的性能。

最後多任務學習每每在如下場合更有意義,當你能夠訓練一個足夠大的神經網絡,同時作好全部的工做,因此多任務學習的替代方法是爲每一個任務訓練一個單獨的神經網絡。因此不是訓練單個神經網絡同時處理行人、汽車、停車標誌和交通燈檢測。你能夠訓練一個用於行人檢測的神經網絡,一個用於汽車檢測的神經網絡,一個用於停車標誌檢測的神經網絡和一個用於交通訊號燈檢測的神經網絡。那麼研究員Rich Carona幾年前發現的是什麼呢?多任務學習會下降性能的惟一狀況,和訓練單個神經網絡相比性能更低的狀況就是你的神經網絡還不夠大。但若是你能夠訓練一個足夠大的神經網絡,那麼多任務學習確定不會或者不多會下降性能,咱們都但願它能夠提高性能,比單獨訓練神經網絡來單獨完成各個任務性能要更好。

因此這就是多任務學習,在實踐中,多任務學習的使用頻率要低於遷移學習。我看到不少遷移學習的應用,你須要解決一個問題,但你的訓練數據不多,因此你須要找一個數據不少的相關問題來預先學習,並將知識遷移到這個新問題上。但多任務學習比較少見,就是你須要同時處理不少任務,都要作好,你能夠同時訓練全部這些任務,也許計算機視覺是一個例子。在物體檢測中,咱們看到更多使用多任務學習的應用,其中一個神經網絡嘗試檢測一大堆物體,比分別訓練不一樣的神經網絡檢測物體更好。但我說,平均來講,目前遷移學習使用頻率更高,比多任務學習頻率要高,但二者均可以成爲你的強力工具。

因此總結一下,多任務學習能讓你訓練一個神經網絡來執行許多任務,這能夠給你更高的性能,比單獨完成各個任務更高的性能。但要注意,實際上遷移學習比多任務學習使用頻率更高。我看到不少任務都是,若是你想解決一個機器學習問題,但你的數據集相對較小,那麼遷移學習真的能幫到你,就是若是你找到一個相關問題,其中數據量要大得多,你就能以它爲基礎訓練你的神經網絡,而後遷移到這個數據量不多的任務上來。

今天咱們學到了不少和遷移學習有關的問題,還有一些遷移學習和多任務學習的應用。但多任務學習,我以爲使用頻率比遷移學習要少得多,也許其中一個例外是計算機視覺,物體檢測。在那些任務中,人們常常訓練一個神經網絡同時檢測不少不一樣物體,這比訓練單獨的神經網絡來檢測視覺物體要更好。但平均而言,我認爲即便遷移學習和多任務學習工做方式相似。實際上,我看到用遷移學習比多任務學習要更多,我以爲這是由於你很難找到那麼多類似且數據量對等的任務能夠用單一神經網絡訓練。再次,在計算機視覺領域,物體檢測這個例子是最顯著的例外狀況。

因此這就是多任務學習,多任務學習和遷移學習都是你的工具包中的重要工具。最後,我想繼續討論端到端深度學習,因此咱們來看下一個視頻來討論端到端學習。

2.9 什麼是端到端的深度學習?(What is end-to-end deep learning?)

深度學習中最使人振奮的最新動態之一就是端到端深度學習的興起,那麼端到端學習究竟是什麼呢?簡而言之,之前有一些數據處理系統或者學習系統,它們須要多個階段的處理。那麼端到端深度學習就是忽略全部這些不一樣的階段,用單個神經網絡代替它。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

事實證實,端到端深度學習的挑戰之一是,你可能須要大量數據才能讓系統表現良好,好比,你只有3000小時數據去訓練你的語音識別系統,那麼傳統的流水線效果然的很好。但當你擁有很是大的數據集時,好比10,000小時數據或者100,000小時數據,這樣端到端方法忽然開始很厲害了。因此當你的數據集較小的時候,傳統流水線方法其實效果也不錯,一般作得更好。你須要大數據集才能讓端到端方法真正發出耀眼光芒。若是你的數據量適中,那麼也能夠用中間件方法,你可能輸入仍是音頻,而後繞過特徵提取,直接嘗試從神經網絡輸出音位,而後也能夠在其餘階段用,因此這是往端到端學習邁出的一小步,但尚未到那裏。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)
這張圖上是一個研究員作的人臉識別門禁,是百度的林元慶研究員作的。這是一個相機,它會拍下接近門禁的人,若是它認出了那我的,門禁系統就自動打開,讓他經過,因此你不須要刷一個RFID工卡就能進入這個設施。系統部署在愈來愈多的中國辦公室,但願在其餘國家也能夠部署更多,你能夠接近門禁,若是它認出你的臉,它就直接讓你經過,你不須要帶RFID工卡。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

那麼,怎麼搭建這樣的系統呢?你能夠作的第一件事是,看看相機拍到的照片,對吧?我想我畫的不太好,但也許這是相機照片,你知道,有人接近門禁了,因此這多是相機拍到的圖像
。有件事你能夠作,就是嘗試直接學習圖像到人物

身份的函數映射,事實證實這不是最好的方法。其中一個問題是,人能夠從不少不一樣的角度接近門禁,他們可能在綠色位置,可能在藍色位置。有時他們更靠近相機,因此他們看起來更大,有時候他們很是接近相機,那照片中臉就很大了。在實際研製這些門禁系統時,他不是直接將原始照片喂到一個神經網絡,試圖找出一我的的身份。
深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

相反,迄今爲止最好的方法彷佛是一個多步方法,首先,你運行一個軟件來檢測人臉,因此第一個檢測器找的是人臉位置,檢測到人臉,而後放大圖像的那部分,並裁剪圖像,令人臉居中顯示,而後就是這裏紅線框起來的照片,再喂到神經網絡裏,讓網絡去學習,或估計那人的身份。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

研究人員發現,比起一步到位,一步學習,把這個問題分解成兩個更簡單的步驟。首先,是弄清楚臉在哪裏。第二步是看着臉,弄清楚這是誰。這第二種方法讓學習算法,或者說兩個學習算法分別解決兩個更簡單的任務,並在總體上獲得更好的表現。

順便說一句,若是你想知道第二步實際是怎麼工做的,我這裏其實省略了不少。訓練第二步的方式,訓練網絡的方式就是輸入兩張圖片,而後你的網絡作的就是將輸入的兩張圖比較一下,判斷是不是同一我的。好比你記錄了10,000個員工ID,你能夠把紅色框起來的圖像快速比較……也許是所有10,000個員工記錄在案的ID,看看這張紅線內的照片,是否是那10000個員工之一,來判斷是否應該容許其進入這個設施或者進入這個辦公樓。這是一個門禁系統,容許員工進入工做場所的門禁。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

爲何兩步法更好呢?實際上有兩個緣由。一是,你解決的兩個問題,每一個問題實際上要簡單得多。但第二,兩個子任務的訓練數據都不少。具體來講,有不少數據能夠用於人臉識別訓練,對於這裏的任務1來講,任務就是觀察一張圖,找出人臉所在的位置,把人臉圖像框出來,因此有不少數據,有不少標籤數據
,其中是圖片,是表示人臉的位置,你能夠創建一個神經網絡,能夠很好地處理任務1。而後任務2,也有不少數據可用,今天,業界領先的公司擁有,好比說數百萬張人臉照片,因此輸入一張裁剪得很緊湊的照片,好比這張紅色照片,下面這個,今天業界領先的人臉識別團隊有至少數億的圖像,他們能夠用來觀察兩張圖片,並試圖判斷照片里人的身份,肯定是否同一我的,因此任務2還有不少數據。相比之下,若是你想一步到位,這樣的數據對就少得多,其中是門禁系統拍攝的圖像,

是那人的身份,由於你沒有足夠多的數據去解決這個端到端學習問題,但你卻有足夠多的數據來解決子問題1和子問題2。

實際上,把這個分紅兩個子問題,比純粹的端到端深度學習方法,達到更好的表現。不過若是你有足夠多的數據來作端到端學習,也許端到端方法效果更好。但在今天的實踐中,並非最好的方法。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

咱們再來看幾個例子,好比機器翻譯。傳統上,機器翻譯系統也有一個很複雜的流水線,好比英語機翻獲得文本,而後作文本分析,基本上要從文本中提取一些特徵之類的,通過不少步驟,你最後會將英文文本翻譯成法文。由於對於機器翻譯來講的確有不少(英文,法文)的數據對,端到端深度學習在機器翻譯領域很是好用,那是由於在今天能夠收集

對的大數據集,就是英文句子和對應的法語翻譯。因此在這個例子中,端到端深度學習效果很好。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

最後一個例子,好比說你但願觀察一個孩子手部的X光照片,並估計一個孩子的年齡。你知道,當我第一次聽到這個問題的時候,我覺得這是一個很是酷的犯罪現場調查任務,你可能悲劇的發現了一個孩子的骨架,你想弄清楚孩子在生時是怎麼樣的。事實證實,這個問題的典型應用,從X射線圖估計孩子的年齡,是我想太多了,沒有我想象的犯罪現場調查腦洞那麼大,結果這是兒科醫生用來判斷一個孩子的發育是否正常。

處理這個例子的一個非端到端方法,就是照一張圖,而後分割出每一塊骨頭,因此就是分辨出那段骨頭應該在哪裏,那段骨頭在哪裏,那段骨頭在哪裏,等等。而後,知道不一樣骨骼的長度,你能夠去查表,查到兒童手中骨頭的平均長度,而後用它來估計孩子的年齡,因此這種方法實際上很好。

相比之下,若是你直接從圖像去判斷孩子的年齡,那麼你須要大量的數據去直接訓練。據我所知,這種作法今天仍是不行的,由於沒有足夠的數據來用端到端的方式來訓練這個任務。

你能夠想象一下如何將這個問題分解成兩個步驟,第一步是一個比較簡單的問題,也許你不須要那麼多數據,也許你不須要許多X射線圖像來切分骨骼。而任務二,收集兒童手部的骨頭長度的統計數據,你不須要太多數據也能作出至關準確的估計,因此這個多步方法看起來頗有但願,也許比端對端方法更有但願,至少直到你能得到更多端到端學習的數據以前。

因此端到端深度學習系統是可行的,它表現能夠很好,也能夠簡化系統架構,讓你不須要搭建那麼多手工設計的單獨組件,但它也不是靈丹妙藥,並非每次都能成功。在下一個視頻中,我想與你分享一個更系統的描述,何時你應該使用或者不該該使用端到端的深度學習,以及如何組裝這些複雜的機器學習系統。

2.10 是否要使用端到端的深度學習?(Whether to use end-to-end learning?)

假設你正在搭建一個機器學習系統,你要決定是否使用端對端方法,咱們來看看端到端深度學習的一些優缺點,這樣你就能夠根據一些準則,判斷你的應用程序是否有但願使用端到端方法。
深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

這裏是應用端到端學習的一些好處,首先端到端學習真的只是讓數聽說話。因此若是你有足夠多的
數據,那麼無論從到最適合的函數映射是什麼,若是你訓練一個足夠大的神經網絡,但願這個神經網絡能本身搞清楚,而使用純機器學習方法,直接從到

輸入去訓練的神經網絡,可能更可以捕獲數據中的任何統計信息,而不是被迫引入人類的成見。

例如,在語音識別領域,早期的識別系統有這個音位概念,就是基本的聲音單元,如cat單詞的「cat」的Cu-、Ah-和Tu-,我以爲這個音位是人類語言學家生造出來的,我實際上認爲音位實際上是語音學家的幻想,用音位描述語言也還算合理。可是不要強迫你的學習算法以音位爲單位思考,這點有時沒那麼明顯。若是你讓你的學習算法學習它想學習的任意表示方式,而不是強迫你的學習算法使用音位做爲表示方式,那麼其總體表現可能會更好。

端到端深度學習的第二個好處就是這樣,所需手工設計的組件更少,因此這也許可以簡化你的設計工做流程,你不須要花太多時間去手工設計功能,手工設計這些中間表示方式。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

那麼缺點呢?這裏有一些缺點,首先,它可能須要大量的數據。要直接學到這個
到的映射,你可能須要大量數據。咱們在之前的視頻裏看過一個例子,其中你能夠收集大量子任務數據,好比人臉識別,咱們能夠收集不少數據用來分辨圖像中的人臉,當你找到一張臉後,也能夠找獲得不少人臉識別數據。可是對於整個端到端任務,可能只有更少的數據可用。因此這是端到端學習的輸入端,是輸出端,因此你須要不少這樣的

數據,在輸入端和輸出端都有數據,這樣能夠訓練這些系統。這就是爲何咱們稱之爲端到端學習,由於你直接學習出從系統的一端到系統的另外一端。

另外一個缺點是,它排除了可能有用的手工設計組件。機器學習研究人員通常都很鄙視手工設計的東西,但若是你沒有不少數據,你的學習算法就沒辦法從很小的訓練集數據中得到洞察力。因此手工設計組件在這種狀況,多是把人類知識直接注入算法的途徑,這總不是一件壞事。我以爲學習算法有兩個主要的知識來源,一個是數據,另外一個是你手工設計的任何東西,多是組件,功能,或者其餘東西。因此當你有大量數據時,手工設計的東西就不過重要了,可是當你沒有太多的數據時,構造一個精心設計的系統,實際上能夠將人類對這個問題的不少認識直接注入到問題裏,進入算法裏應該挺有幫助的。

因此端到端深度學習的弊端之一是它把可能有用的人工設計的組件排除在外了,精心設計的人工組件可能很是有用,但它們也有可能真的傷害到你的算法表現。例如,強制你的算法以音位爲單位思考,也許讓算法本身找到更好的表示方法更好。因此這是一把雙刃劍,可能有壞處,可能有好處,但每每好處更多,手工設計的組件每每在訓練集更小的時候幫助更大。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

若是你在構建一個新的機器學習系統,而你在嘗試決定是否使用端到端深度學習,我認爲關鍵的問題是,你有足夠的數據可以直接學到從
映射到足夠複雜的函數嗎?我尚未正式定義過這個詞「必要複雜度(complexity needed)」。但直覺上,若是你想從到

的數據學習出一個函數,就是看着這樣的圖像識別出圖像中全部骨頭的位置,那麼也許這像是識別圖中骨頭這樣相對簡單的問題,也許系統不須要那麼多數據來學會處理這個任務。或給出一張人物照片,也許在圖中把人臉找出來不是什麼難事,因此你也許不須要太多數據去找到人臉,或者至少你能夠找到足夠數據去解決這個問題。相對來講,把手的X射線照片直接映射到孩子的年齡,直接去找這種函數,直覺上彷佛是更爲複雜的問題。若是你用純端到端方法,須要不少數據去學習。
深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

視頻最後我講一個更復雜的例子,你可能知道我一直在花時間幫忙主攻無人駕駛技術的公司drive.ai,無人駕駛技術的發展其實讓我至關激動,你怎麼造出一輛本身能行駛的車呢?好,這裏你能夠作一件事,這不是端到端的深度學習方法,你能夠把你車前方的雷達、激光雷達或者其餘傳感器的讀數當作是輸入圖像。可是爲了說明起來簡單,咱們就說拍一張車前方或者周圍的照片,而後駕駛要安全的話,你必須能檢測到附近的車,你也須要檢測到行人,你須要檢測其餘的東西,固然,咱們這裏提供的是高度簡化的例子。

弄清楚其餘車和形如的位置以後,你就須要計劃你本身的路線。因此換句話說,當你看到其餘車子在哪,行人在哪裏,你須要決定如何擺方向盤在接下來的幾秒鐘內引導車子的路徑。若是你決定了要走特定的路徑,也許這是道路的俯視圖,這是你的車,也許你決定了要走那條路線,這是一條路線,那麼你就須要擺動你的方向盤到合適的角度,還要發出合適的加速和制動指令。因此從傳感器或圖像輸入到檢測行人和車輛,深度學習能夠作得很好,但一旦知道其餘車輛和行人的位置或者動向,選擇一條車要走的路,這一般用的不是深度學習,而是用所謂的運動規劃軟件完成的。若是你學過機器人課程,你必定知道運動規劃,而後決定了你的車子要走的路徑以後。還會有一些其餘算法,咱們說這是一個控制算法,能夠產生精確的決策肯定方向盤應該精確地轉多少度,油門或剎車上應該用多少力。

深度學習筆記第三門課 結構化機器學習項目 第二週 機器學習(ML)策略(2)

因此這個例子就代表了,若是你想使用機器學習或者深度學習來學習某些單獨的組件,那麼當你應用監督學習時,你應該仔細選擇要學習的

映射類型,這取決於那些任務你能夠收集數據。相比之下,談論純端到端深度學習方法是很激動人心的,你輸入圖像,直接得出方向盤轉角,可是就目前能收集到的數據而言,還有咱們今天可以用神經網絡學習的數據類型而言,這實際上不是最有但願的方法,或者說這個方法並非團隊想出的最好用的方法。而我認爲這種純粹的端到端深度學習方法,其實前景不如這樣更復雜的多步方法。由於目前能收集到的數據,還有咱們如今訓練神經網絡的能力是有侷限的。

這就是端到端的深度學習,有時候效果拔羣。但你也要注意應該在何時使用端到端深度學習。最後,謝謝你,恭喜你堅持到如今,若是你學完了上週的視頻和本週的視頻,那麼我認爲你已經變得更聰明,更具戰略性,並可以作出更好的優先分配任務的決策,更好地推進你的機器學習項目,也許比不少機器學習工程師,還有和我在硅谷看到的研究人員都強。因此恭喜你學到這裏,我但願你能看看本週的做業,應該能再給你一個機會去實踐這些理念,並確保你掌握它們。

參考資料
[1]

深度學習課程: https://mooc.study.163.com/university/deeplearning_ai
[2]

黃海廣: https://github.com/fengdu78
[3]

github: https://github.com/fengdu78/deeplearning_ai_books

相關文章
相關標籤/搜索