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