[DeeplearningAI筆記]第三章2.7-2.8多任務學習/遷移學習
覺得有用的話,歡迎一起討論相互學習~
2.7 遷移學習 Transfer Learninig
- 神經網絡可以從一個任務中習得知識,並將這些知識應用到另一個獨立的任務中.例如:你已經訓練好一個能夠識別貓的系統,你利用這些知識或者這些知識的部分去完成更好的 閱讀X射線掃描圖.
- 這就是所謂的-- 遷移學習
how-to
- 假設你已經訓練好一個圖像識別神經網絡,首先用一個神經網絡,在(x,y)對上訓練,其中x是圖像,y是對象的標簽.
- 現在把這個神經網絡拿出來,將其適應(遷移)到不同任務中所學到的知識,比如放射科診斷.
- 把神經網絡最后的輸出層刪除
- 進入到最后一層並將其權重刪除
- 為最后一層重新賦予隨機權重
- 然后將神經網絡放在放射診斷數據上訓練
Tips
- 如果進行遷移學習的數據量比較小,只需要重新訓練最后一兩層權重.但是如果進行遷移學習的數據量較大,建議重新訓練整個神經網絡.
- 預訓練(pre-training): 如果重新訓練所有神經網絡層,那么在圖像識別數據的初期訓練階段,我們稱這個過程為:預訓練
- 微調(fine tuning): 在預訓練后的模型上放入遷移學習的數據進行訓練,這個過程稱為:微調
why
- 遷移學習的好處在於,以放射科圖像檢測的遷移學習為例 在預訓練的過程中,我們學到了一些圖像識別中低層次特征,很多結構信息,圖像形狀的信息,點,線,面的特征.-- 邊緣檢測(detecting edges),曲線檢測(的tecting curves),陽性對象檢測(detecting positive objects) 應用或遷移到放射科診斷上來.從非常大的圖像識別數據庫中習得的這些能力,會有助於你的學習算法在放射科診斷做的更好.
Another Example
- 假設你已經訓練出一個語音識別系統(speech recognition system),現在x是音頻(audio)或者音頻片段輸入(audio snippets),y是聽寫文本(transcript). 我們要使用這個系統"遷移學習"建立一個"喚醒詞"的系統.
- 你可能需要去掉神經網絡的最后一層,然后加入新的輸出節點.但有時也可以不止加入一個新節點,或者甚至往你的神經網絡加入幾個新層.然后把喚醒詞檢測問題的標簽"Y"喂進去訓練.
- 這取決於你的訓練數據的多少,你可能只需要重新訓練網絡的新層,也許你需要重新訓練網絡中更多的層.
when Transfer learning makes sence
- 遷移來源問題你有很多數據,但遷移目標問題你沒有那么多數據.
- 例如:假如在圖像識別任務中你有100W樣本,數據量相當多,你可以學習低層次特征,可以在神經網絡的前幾層學到如何識別很多有用的特征.
- 但是對於"放射科任務",也許你只有100個樣本,所以你可以將圖像識別預測的知識遷移到"放射科識別任務"中,即使你的放射科數據很少.
- 例如:在"語音識別"任務中,也許你已經有1W小時數據,訓練過你的語言識別系統.所以你已經從這1W小時數據中學到了很多人類聲音的特征.
- 但是對於"觸發字檢測",也許你只有1小時數據,所以這數據太小,不能用來擬合很多參數.
- 所以這種情況下,你需要預先學到很多人類聲音的特征,人類語言的組成部分等等知識,可以幫你建立一個很好的喚醒字檢測器(wake word detector).即使你的數據集相對較小.
- 例如:假如在圖像識別任務中你有100W樣本,數據量相當多,你可以學習低層次特征,可以在神經網絡的前幾層學到如何識別很多有用的特征.
summary
- 如果你想從任務A遷移一些知識到任務B,當任務A和任務B都有相同的輸入X時,遷移學習是有意義的.
- 例如在第一個例子中,輸入X都是圖片;在第二個例子中X都是聲音音頻.
- 當任務A的數據比數據B多得多時,遷移學習意義更大.
- 所有這些假設的前提都是,你希望提高任務B的性能.
- 因為任務B的每個數據更有價值,對於任務B來說.通常任務A的數據量必須大得多,才有幫助.
- 如果你覺得任務A的低層次特征,可以幫助任務B的學習,那遷移學習更有意義一些.
2.8 多任務學習 Multi-task learning
- 在遷移學習中,你的步驟是串行的,你從任務A里學到知識然后遷移到任務B中.在多任務學習中,你是同時開始學習的,試圖讓單個神經網絡同時做幾件事情,然后希望這里的每個任務都能幫到其他所有任務.
Simplified autonomous driving Example
- 假設你正在研發無人駕駛車輛,那么你的無人駕駛車可能需要同時檢測不同的物體.(行人,車輛,停車標志,交通燈...)
- 需要識別的物體假設即為上述討論的四個,則最后一層設置4個神經元,一個4維向量,分別表示對"行人,車輛,停車標志,交通燈"的預測.
- 其中多任務學習 Loss function 也有相應的變化.對於多任務學習:
\[Loss(\hat{y}^{(i)}_{(4, 1)})=\frac{1}{m}\sum_{i=1}^{m}\sum_{j=1}^{4}l(\hat{y}^{(i)}_{j},y^{(i)}_{j}) \]
對於此處的loss函數l(交叉熵函數)的具體計算方式,詳情請見:
- 其中與之前例子最大的不同在於需要對檢測的多任務目標進行分別比較並相加\(\sum_{j=1}^{4}\) .
- 這與softmax回歸的主要區別在於,softmax回歸將單個標簽分配給單個樣本,而這張圖可以有很多不同的標簽,所以不是說每張圖都只是一張行人圖片,汽車圖片,停車標志圖片,或者交通燈圖片,多個物體可能同時出現在一張圖里.
- 你需要遍歷所有的物體類型,檢測那類物體有沒有出現在圖中.
- 如果你訓練了一個神經網絡,需要最小化這個成本函數,你做的就是多任務學習
when multi-task learning makes sence
- 你訓練的一組任務可以共用低層次特征.例如對於無人駕駛車的例子,識別的物體都是道路上的標志.
- 每個任務中學習的數據量很相近.
- 假如你要識別100個任務,每個任務大概有1000個樣本,所以如果你專注加強單個任務的性能,你只有1000個樣本去訓練這個任務,這是100項任務之一,但是通過其他99項任務的訓練, 這些加起來一共有99000個樣本,這可能大幅提升算法性能,可以提供很多知識來增強這個任務的性能
- 如果你訓練一個 足夠大的神經網絡,多任務神經網絡和多個不同的單任務神經網絡效果基本一致(即單獨訓練識別行人,單獨識別交通標識牌...的神經網絡).
- 一般來說, 遷移學習比多任務學習運用更多 ,但是在 計算機視覺-物體檢測 中有大量應用到多任務學習,並且比分別訓練不同的神經網絡檢測物體效果更好.