2.8 多任务学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
| 2.7 遷移學習 | 回到目錄 | 2.9 什么是端到端的深度學習 |
多任務學習 (Multi-task Learning)
在遷移學習中,你的步驟是串行的,你從任務 AAA 里學習只是然后遷移到任務 BBB 。在多任務學習中,你是同時開始學習的,試圖讓單個神經網絡同時做幾件事情,然后希望這里每個任務都能幫到其他所有任務。
我們來看一個例子,假設你在研發無人駕駛車輛,那么你的無人駕駛車可能需要同時檢測不同的物體,比如檢測行人、車輛、停車標志,還有交通燈各種其他東西。比如在左邊這個例子中,圖像里有個停車標志,然后圖像中有輛車,但沒有行人,也沒有交通燈。
如果這是輸入圖像 x(i)x^{(i)}x(i) ,那么這里不再是一個標簽 y(i)y^{(i)}y(i) ,而是有4個標簽。在這個例子中,沒有行人,有一輛車,有一個停車標志,沒有交通燈。然后如果你嘗試檢測其他物體,也許 y(i)y^{(i)}y(i) 的維數會更高,現在我們就先用4個吧,所以 y(i)y^{(i)}y(i) 是個4×1向量。如果你從整體來看這個訓練集標簽和以前類似,我們將訓練集的標簽水平堆疊起來,像這樣 y(1)y^{(1)}y(1) 一直到 y(m)y^{(m)}y(m) :
Y=[∣∣∣?∣y(1)y(2)y(3)?y(m)∣∣∣?∣]Y=\left[\begin{matrix} | & | & | & \cdots & | \\ y^{(1)} & y^{(2)} & y^{(3)} & \cdots & y^{(m)} \\ | & | & | & \cdots & | \end{matrix}\right]Y=???∣y(1)∣?∣y(2)∣?∣y(3)∣?????∣y(m)∣????
不過現在 y(i)y^{(i)}y(i) 是4×1向量,所以這些都是豎向的列向量,所以這個矩陣 YYY 現在變成 4 x m 矩陣。而之前,當 yyy 是單實數時,這就是 1 x m 矩陣。
那么你現在可以做的是訓練一個神經網絡,來預測這些 yyy 值,你就得到這樣的神經網絡,輸入 xxx ,現在輸出是一個四維向量 yyy 。請注意,這里輸出我畫了四個節點,所以第一個節點就是我們想預測圖中有沒有行人,然后第二個輸出節點預測的是有沒有車,這里預測有沒有停車標志,這里預測有沒有交通燈,所以這里 y^\hat{y}y^? 是四維的。
要訓練這個神經網絡,你現在需要定義神經網絡的損失函數,對于一個輸出 y^\hat{y}y^? ,是個4維向量,對于整個訓練集的平均損失:
1m∑i=1m∑j=14L(y^j(i),yj(i))\frac1m\sum_{i=1}^m\sum_{j=1}^4L(\hat{y}^{(i)}_j,y^{(i)}_j)m1?i=1∑m?j=1∑4?L(y^?j(i)?,yj(i)?)
∑j=14L(y^j(i),yj(i))\sum_{j=1}^4L(\hat{y}^{(i)}_j,y^{(i)}_j)∑j=14?L(y^?j(i)?,yj(i)?) 這些單個預測的損失,所以這就是對四個分量的求和,行人、車、停車標志、交通燈,而這個標志 LLL 指的是logistic損失,我們就這么寫:
L(y^j(i),yj(i))=?yj(i)log?y^j(i)?(1?yj(i))log?(1?y^j(i))L(\hat{y}^{(i)}_j,y^{(i)}_j)=-y^{(i)}_j\log\hat{y}^{(i)}_j-(1-y^{(i)}_j)\log(1-\hat{y}^{(i)}_j)L(y^?j(i)?,yj(i)?)=?yj(i)?logy^?j(i)??(1?yj(i)?)log(1?y^?j(i)?)
整個訓練集的平均損失和之前分類貓的例子主要區別在于,現在你要對 j=1j=1j=1 到 444 求和,這與softmax回歸的主要區別在于,與softmax回歸不同,softmax將單個標簽分配給單個樣本。
而這張圖可以有很多不同的標簽,所以不是說每張圖都只是一張行人圖片,汽車圖片、停車標志圖片或者交通燈圖片。你要知道每張照片是否有行人、或汽車、停車標志或交通燈,多個物體可能同時出現在一張圖里。實際上,在上一張幻燈片中,那張圖同時有車和停車標志,但沒有行人和交通燈,所以你不是只給圖片一個標簽,而是需要遍歷不同類型,然后看看每個類型,那類物體有沒有出現在圖中。所以我就說在這個場合,一張圖可以有多個標簽。如果你訓練了一個神經網絡,試圖最小化這個成本函數,你做的就是多任務學習。因為你現在做的是建立單個神經網絡,觀察每張圖,然后解決四個問題,系統試圖告訴你,每張圖里面有沒有這四個物體。另外你也可以訓練四個不同的神經網絡,而不是訓練一個網絡做四件事情。但神經網絡一些早期特征,在識別不同物體時都會用到,然后你發現,訓練一個神經網絡做四件事情會比訓練四個完全獨立的神經網絡分別做四件事性能要更好,這就是多任務學習的力量。
另一個細節,到目前為止,我是這么描述算法的,好像每張圖都有全部標簽。事實證明,多任務學習也可以處理圖像只有部分物體被標記的情況。所以第一個訓練樣本,我們說有人,給數據貼標簽的人告訴你里面有一個行人,沒有車,但他們沒有標記是否有停車標志,或者是否有交通燈。也許第二個例子中,有行人,有車。但是,當標記人看著那張圖片時,他們沒有加標簽,沒有標記是否有停車標志,是否有交通燈等等。也許有些樣本都有標記,但也許有些樣本他們只標記了有沒有車,然后還有一些是問號。
即使是這樣的數據集,你也可以在上面訓練算法,同時做四個任務,即使一些圖像只有一小部分標簽,其他是問號或者不管是什么。然后你訓練算法的方式,即使這里有些標簽是問號,或者沒有標記,這就是對 jjj 從1到4求和,你就只對帶0和1標簽的 jjj 值求和,所以當有問號的時候,你就在求和時忽略那個項,這樣只對有標簽的值求和,于是你就能利用這樣的數據集。
那么多任務學習什么時候有意義呢?當三件事為真時,它就是有意義的。
第一,如果你訓練的一組任務,可以共用低層次特征。對于無人駕駛的例子,同時識別交通燈、汽車和行人是有道理的,這些物體有相似的特征,也許能幫你識別停車標志,因為這些都是道路上的特征。
第二,這個準則沒有那么絕對,所以不一定是對的。但我從很多成功的多任務學習案例中看到,如果每個任務的數據量很接近,你還記得遷移學習時,你從 AAA 任務學到知識然后遷移到 BBB 任務,所以如果任務 AAA 有1百萬個樣本,任務 BBB 只有1000個樣本,那么你從這1百萬個樣本學到的知識,真的可以幫你增強對更小數據集任務 BBB 的訓練。那么多任務學習又怎么樣呢?在多任務學習中,你通常有更多任務而不僅僅是兩個,所以也許你有,以前我們有4個任務,但比如說你要完成100個任務,而你要做多任務學習,嘗試同時識別100種不同類型的物體。你可能會發現,每個任務大概有1000個樣本。所以如果你專注加強單個任務的性能,比如我們專注加強第100個任務的表現,我們用 A100A100A100 表示,如果你試圖單獨去做這個最后的任務,你只有1000個樣本去訓練這個任務,這是100項任務之一,而通過在其他99項任務的訓練,這些加起來可以一共有99000個樣本,這可能大幅提升算法性能,可以提供很多知識來增強這個任務的性能。不然對于任務 A100A100A100 ,只有1000個樣本的訓練集,效果可能會很差。如果有對稱性,這其他99個任務,也許能提供一些數據或提供一些知識來幫到這100個任務中的每一個任務。所以第二點不是絕對正確的準則,但我通常會看的是如果你專注于單項任務,如果想要從多任務學習得到很大性能提升,那么其他任務加起來必須要有比單個任務大得多的數據量。要滿足這個條件,其中一種方法是,比如右邊這個例子這樣,或者如果每個任務中的數據量很相近,但關鍵在于,如果對于單個任務你已經有1000個樣本了,那么對于所有其他任務,你最好有超過1000個樣本,這樣其他任務的知識才能幫你改善這個任務的性能。
最后多任務學習往往在以下場合更有意義,當你可以訓練一個足夠大的神經網絡,同時做好所有的工作,所以多任務學習的替代方法是為每個任務訓練一個單獨的神經網絡。所以不是訓練單個神經網絡同時處理行人、汽車、停車標志和交通燈檢測。你可以訓練一個用于行人檢測的神經網絡,一個用于汽車檢測的神經網絡,一個用于停車標志檢測的神經網絡和一個用于交通信號燈檢測的神經網絡。那么研究員Rich Carona幾年前發現的是什么呢?多任務學習會降低性能的唯一情況,和訓練單個神經網絡相比性能更低的情況就是你的神經網絡還不夠大。但如果你可以訓練一個足夠大的神經網絡,那么多任務學習肯定不會或者很少會降低性能,我們都希望它可以提升性能,比單獨訓練神經網絡來單獨完成各個任務性能要更好。
所以這就是多任務學習,在實踐中,多任務學習的使用頻率要低于遷移學習。我看到很多遷移學習的應用,你需要解決一個問題,但你的訓練數據很少,所以你需要找一個數據很多的相關問題來預先學習,并將知識遷移到這個新問題上。但多任務學習比較少見,就是你需要同時處理很多任務,都要做好,你可以同時訓練所有這些任務,也許計算機視覺是一個例子。在物體檢測中,我們看到更多使用多任務學習的應用,其中一個神經網絡嘗試檢測一大堆物體,比分別訓練不同的神經網絡檢測物體更好。但我說,平均來說,目前遷移學習使用頻率更高,比多任務學習頻率要高,但兩者都可以成為你的強力工具。
所以總結一下,多任務學習能讓你訓練一個神經網絡來執行許多任務,這可以給你更高的性能,比單獨完成各個任務更高的性能。但要注意,實際上遷移學習比多任務學習使用頻率更高。我看到很多任務都是,如果你想解決一個機器學習問題,但你的數據集相對較小,那么遷移學習真的能幫到你,就是如果你找到一個相關問題,其中數據量要大得多,你就能以它為基礎訓練你的神經網絡,然后遷移到這個數據量很少的任務上來。
今天我們學到了很多和遷移學習有關的問題,還有一些遷移學習和多任務學習的應用。但多任務學習,我覺得使用頻率比遷移學習要少得多,也許其中一個例外是計算機視覺,物體檢測。在那些任務中,人們經常訓練一個神經網絡同時檢測很多不同物體,這比訓練單獨的神經網絡來檢測視覺物體要更好。但平均而言,我認為即使遷移學習和多任務學習工作方式類似。實際上,我看到用遷移學習比多任務學習要更多,我覺得這是因為你很難找到那么多相似且數據量對等的任務可以用單一神經網絡訓練。再次,在計算機視覺領域,物體檢測這個例子是最顯著的例外情況。
所以這就是多任務學習,多任務學習和遷移學習都是你的工具包中的重要工具。最后,我想繼續討論端到端深度學習,所以我們來看下一個視頻來討論端到端學習。
課程板書
| 2.7 遷移學習 | 回到目錄 | 2.9 什么是端到端的深度學習 |
總結
以上是生活随笔為你收集整理的2.8 多任务学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.7 迁移学习-深度学习第三课《结构化
- 下一篇: 2.9 什么是端到端的深度学习-深度学习