2.7 迁移学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
| 2.6 定位數據不匹配 | 回到目錄 | 2.8 多任務學習 |
遷移學習 (Transfer Learning)
深度學習中,最強大的理念之一就是,有的時候神經網絡可以從一個任務中習得知識,并將這些知識應用到另一個獨立的任務中。所以例如,也許你已經訓練好一個神經網絡,能夠識別像貓這樣的對象,然后使用那些知識,或者部分習得的知識去幫助您更好地閱讀x射線掃描圖,這就是所謂的遷移學習。
我們來看看,假設你已經訓練好一個圖像識別神經網絡,所以你首先用一個神經網絡,并在 (x,y)(x,y)(x,y) 對上訓練,其中 xxx 是圖像, yyy 是某些對象,圖像是貓、狗、鳥或其他東西。如果你把這個神經網絡拿來,然后讓它適應或者說遷移,在不同任務中學到的知識,比如放射科診斷,就是說閱讀 XXX 射線掃描圖。你可以做的是把神經網絡最后的輸出層拿走,就把它刪掉,還有進入到最后一層的權重刪掉,然后為最后一層重新賦予隨機權重,然后讓它在放射診斷數據上訓練。
具體來說,在第一階段訓練過程中,當你進行圖像識別任務訓練時,你可以訓練神經網絡的所有常用參數,所有的權重,所有的層,然后你就得到了一個能夠做圖像識別預測的網絡。在訓練了這個神經網絡后,要實現遷移學習,你現在要做的是,把數據集換成新的 (x,y)(x,y)(x,y) 對,現在這些變成放射科圖像,而 yyy 是你想要預測的診斷,你要做的是初始化最后一層的權重,讓我們稱之為 w[L]w^{[L]}w[L] 和 b[L]b^{[L]}b[L] 隨機初始化。
現在,我們在這個新數據集上重新訓練網絡,在新的放射科數據集上訓練網絡。要用放射科數據集重新訓練神經網絡有幾種做法。你可能,如果你的放射科數據集很小,你可能只需要重新訓練最后一層的權重,就是 w[L]w^{[L]}w[L] 和 b[L]b^{[L]}b[L] 并保持其他參數不變。如果你有足夠多的數據,你可以重新訓練神經網絡中剩下的所有層。經驗規則是,如果你有一個小數據集,就只訓練輸出層前的最后一層,或者也許是最后一兩層。但是如果你有很多數據,那么也許你可以重新訓練網絡中的所有參數。如果你重新訓練神經網絡中的所有參數,那么這個在圖像識別數據的初期訓練階段,有時稱為預訓練(pre-training),因為你在用圖像識別數據去預先初始化,或者預訓練神經網絡的權重。然后,如果你以后更新所有權重,然后在放射科數據上訓練,有時這個過程叫微調(fine tuning)。如果你在深度學習文獻中看到預訓練和微調,你就知道它們說的是這個意思,預訓練和微調的權重來源于遷移學習。
在這個例子中你做的是,把圖像識別中學到的知識應用或遷移到放射科診斷上來,為什么這樣做有效果呢?有很多低層次特征,比如說邊緣檢測、曲線檢測、陽性對象檢測(positive objects),從非常大的圖像識別數據庫中習得這些能力可能有助于你的學習算法在放射科診斷中做得更好,算法學到了很多結構信息,圖像形狀的信息,其中一些知識可能會很有用,所以學會了圖像識別,它就可能學到足夠多的信息,可以了解不同圖像的組成部分是怎樣的,學到線條、點、曲線這些知識,也許對象的一小部分,這些知識有可能幫助你的放射科診斷網絡學習更快一些,或者需要更少的學習數據。
這里是另一個例子,假設你已經訓練出一個語音識別系統,現在 xxx 是音頻或音頻片段輸入,而 yyy 是聽寫文本,所以你已經訓練了語音識別系統,讓它輸出聽寫文本。現在我們說你想搭建一個“喚醒詞”或“觸發詞”檢測系統,所謂喚醒詞或觸發詞就是我們說的一句話,可以喚醒家里的語音控制設備,比如你說“Alexa”可以喚醒一個亞馬遜Echo設備,或用“OK Google”來喚醒Google設備,用"Hey Siri"來喚醒蘋果設備,用"你好百度"喚醒一個百度設備。要做到這點,你可能需要去掉神經網絡的最后一層,然后加入新的輸出節點,但有時你可以不只加入一個新節點,或者甚至往你的神經網絡加入幾個新層,然后把喚醒詞檢測問題的標簽 yyy 喂進去訓練。再次,這取決于你有多少數據,你可能只需要重新訓練網絡的新層,也許你需要重新訓練神經網絡中更多的層。
那么遷移學習什么時候是有意義的呢?遷移學習起作用的場合是,在遷移來源問題中你有很多數據,但遷移目標問題你沒有那么多數據。例如,假設圖像識別任務中你有1百萬個樣本,所以這里數據相當多。可以學習低層次特征,可以在神經網絡的前面幾層學到如何識別很多有用的特征。但是對于放射科任務,也許你只有一百個樣本,所以你的放射學診斷問題數據很少,也許只有100次 XXX 射線掃描,所以你從圖像識別訓練中學到的很多知識可以遷移,并且真正幫你加強放射科識別任務的性能,即使你的放射科數據很少。
對于語音識別,也許你已經用10,000小時數據訓練過你的語言識別系統,所以你從這10,000小時數據學到了很多人類聲音的特征,這數據量其實很多了。但對于觸發字檢測,也許你只有1小時數據,所以這數據太小,不能用來擬合很多參數。所以在這種情況下,預先學到很多人類聲音的特征人類語言的組成部分等等知識,可以幫你建立一個很好的喚醒字檢測器,即使你的數據集相對較小。對于喚醒詞任務來說,至少數據集要小得多。
所以在這兩種情況下,你從數據量很多的問題遷移到數據量相對小的問題。然后反過來的話,遷移學習可能就沒有意義了。比如,你用100張圖訓練圖像識別系統,然后有100甚至1000張圖用于訓練放射科診斷系統,人們可能會想,為了提升放射科診斷的性能,假設你真的希望這個放射科診斷系統做得好,那么用放射科圖像訓練可能比使用貓和狗的圖像更有價值,所以這里(100甚至1000張圖用于訓練放射科診斷系統)的每個樣本價值比這里(100張圖訓練圖像識別系統)要大得多,至少就建立性能良好的放射科系統而言是這樣。所以,如果你的放射科數據更多,那么你這100張貓貓狗狗或者隨機物體的圖片肯定不會有太大幫助,因為來自貓狗識別任務中,每一張圖的價值肯定不如一張 XXX 射線掃描圖有價值,對于建立良好的放射科診斷系統而言是這樣。
所以,這是其中一個例子,說明遷移學習可能不會有害,但也別指望這么做可以帶來有意義的增益。同樣,如果你用10小時數據訓練出一個語音識別系統。然后你實際上有10個小時甚至更多,比如說50個小時喚醒字檢測的數據,你知道遷移學習有可能會有幫助,也可能不會,也許把這10小時數據遷移學習不會有太大壞處,但是你也別指望會得到有意義的增益。
所以總結一下,什么時候遷移學習是有意義的?如果你想從任務 AAA 學習并遷移一些知識到任務 BBB ,那么當任務 AAA 和任務 BBB 都有同樣的輸入 xxx 時,遷移學習是有意義的。在第一個例子中, AAA 和 BBB 的輸入都是圖像,在第二個例子中,兩者輸入都是音頻。當任務 AAA 的數據比任務 BBB 多得多時,遷移學習意義更大。所有這些假設的前提都是,你希望提高任務 BBB 的性能,因為任務 BBB 每個數據更有價值,對任務 BBB 來說通常任務 AAA 的數據量必須大得多,才有幫助,因為任務 AAA 里單個樣本的價值沒有比任務 BBB 單個樣本價值大。然后如果你覺得任務 AAA 的低層次特征,可以幫助任務 BBB 的學習,那遷移學習更有意義一些。
而在這兩個前面的例子中,也許學習圖像識別教給系統足夠多圖像相關的知識,讓它可以進行放射科診斷,也許學習語音識別教給系統足夠多人類語言信息,能幫助你開發觸發字或喚醒字檢測器。
所以總結一下,遷移學習最有用的場合是,如果你嘗試優化任務B的性能,通常這個任務數據相對較少,例如,在放射科中你知道很難收集很多 XXX 射線掃描圖來搭建一個性能良好的放射科診斷系統,所以在這種情況下,你可能會找一個相關但不同的任務,如圖像識別,其中你可能用1百萬張圖片訓練過了,并從中學到很多低層次特征,所以那也許能幫助網絡在任務 BBB 在放射科任務上做得更好,盡管任務 BBB 沒有這么多數據。遷移學習什么時候是有意義的?它確實可以顯著提高你的學習任務的性能,但我有時候也見過有些場合使用遷移學習時,任務 AAA 實際上數據量比任務 BBB 要少,這種情況下增益可能不多。
好,這就是遷移學習,你從一個任務中學習,然后嘗試遷移到另一個不同任務中。從多個任務中學習還有另外一個版本,就是所謂的多任務學習,當你嘗試從多個任務中并行學習,而不是串行學習,在訓練了一個任務之后試圖遷移到另一個任務,所以在下一個視頻中,讓我們來討論多任務學習。
課程板書
| 2.6 定位數據不匹配 | 回到目錄 | 2.8 多任務學習 |
總結
以上是生活随笔為你收集整理的2.7 迁移学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.6 处理数据不匹配问题-深度学习第三
- 下一篇: 2.8 多任务学习-深度学习第三课《结构