兩年前,吳恩達(dá)在 NIPS 2016 的 Tutorial 上曾說“在監(jiān)督學(xué)習(xí)之后,遷移學(xué)習(xí)將引領(lǐng)下一波機(jī)器學(xué)習(xí)技術(shù)商業(yè)化浪潮。”現(xiàn)實(shí)中不斷有新場景的出現(xiàn),遷移學(xué)習(xí)可以幫助我們更好地處理遇到的新場景。遷移學(xué)習(xí)到底有哪些優(yōu)點(diǎn),能夠成為現(xiàn)在機(jī)器學(xué)習(xí)算法的新焦點(diǎn)?本文將通過與深度學(xué)習(xí)進(jìn)行對(duì)比,讓大家在應(yīng)用層面了解遷移學(xué)習(xí)的原理及其優(yōu)勢。
前言
深度學(xué)習(xí)在許多很難用其它方法解決的問題上取得了長足的進(jìn)步。深度學(xué)習(xí)的成功歸功于它與傳統(tǒng)的機(jī)器學(xué)習(xí)的幾個(gè)關(guān)鍵不同點(diǎn),這使得它在處理非結(jié)構(gòu)化數(shù)據(jù)的時(shí)候能夠大放異彩。如今,深度學(xué)習(xí)模型可以玩游戲,檢測癌癥,與人類交談,以及駕駛汽車。
但是,使深度學(xué)習(xí)強(qiáng)大的這幾個(gè)不同點(diǎn)同時(shí)也使得其成本巨大。你可能聽說過深度學(xué)習(xí)的成功需要龐大的數(shù)據(jù)量,昂貴的硬件設(shè)施,甚至更加昂貴的精英工程人才。現(xiàn)在,一些公司開始對(duì)那些可以減少成本的創(chuàng)新想法和技術(shù)特別興奮。比如多任務(wù)學(xué)習(xí)(Multi-task learning),這是一種可以讓機(jī)器學(xué)習(xí)模型一次性從多個(gè)任務(wù)中進(jìn)行學(xué)習(xí)的方法。這種方法的其中一種好處就是,可以減少對(duì)訓(xùn)練數(shù)據(jù)量的需求。
在這篇文章中,我們將會(huì)介紹遷移學(xué)習(xí)(transfer learning),一種可以讓知識(shí)從一個(gè)任務(wù)遷移到另一個(gè)任務(wù)中的機(jī)器學(xué)習(xí)方法。遷移學(xué)習(xí)不需要為你的問題重新開發(fā)一個(gè)完全定制的解決方案,而是允許你從相關(guān)問題中遷移知識(shí),以幫助你更輕松地解決您的自定義問題。通過遷移知識(shí),你可以利用用于獲取這些知識(shí)所需的昂貴資源,包括訓(xùn)練數(shù)據(jù),硬件設(shè)備,研究人員,而這些成本并不需要你來承擔(dān)。下面讓我們看看遷移學(xué)習(xí)何時(shí)以及是怎樣起作用的。
深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)的不同點(diǎn)
遷移學(xué)習(xí)并不是一項(xiàng)新技術(shù),它也不是專門為深度學(xué)習(xí)服務(wù)的,但是鑒于最近在深度學(xué)習(xí)方面取得的進(jìn)展,它很令人興奮。所以首先,我們需要闡明深度學(xué)習(xí)究竟和傳統(tǒng)的機(jī)器學(xué)習(xí)在哪些方面有所不同。
▌深度學(xué)習(xí)進(jìn)行底層抽象
機(jī)器學(xué)習(xí)是機(jī)器自動(dòng)學(xué)習(xí)把預(yù)測值或者標(biāo)簽分配給數(shù)值型輸入(即數(shù)據(jù))的一種方式。這里的難點(diǎn)是,如何確切地確定這個(gè)函數(shù),使得其對(duì)于給定輸入可以生成輸出。不對(duì)函數(shù)添加任何限制條件的話,其可能性(復(fù)雜性)是無窮無盡的。為了簡化這個(gè)任務(wù),根據(jù)我們正在解決的問題的類型,相關(guān)領(lǐng)域的專業(yè)知識(shí),或者簡單的試錯(cuò)方法,我們通常會(huì)在函數(shù)上強(qiáng)加某種類型的結(jié)構(gòu)。一種結(jié)構(gòu)定義了某一類型的機(jī)器學(xué)習(xí)模型。
理論上,有無限種可能的結(jié)構(gòu)可供選擇,但在實(shí)踐中,大多數(shù)機(jī)器學(xué)習(xí)用例可以通過應(yīng)用少數(shù)幾種結(jié)構(gòu)中的其中一種來解決:線性模型,樹的組合分類器,和支持向量機(jī)是其中的核心。數(shù)據(jù)科學(xué)家的工作就是從這一小組可能的結(jié)構(gòu)中選擇正確的結(jié)構(gòu)。這些模型作為黑盒對(duì)象,可以從許多成熟的機(jī)器學(xué)習(xí)庫中獲得,并且只需幾行代碼即可訓(xùn)練。舉個(gè)例子,你可以用 Python 的 scikit-learn 庫像以下這樣訓(xùn)練一個(gè)隨機(jī)森林模型:
或者用 R 來訓(xùn)練一個(gè)線性回歸模型:
與此不同的是,深度學(xué)習(xí)在更加底層運(yùn)行。深度學(xué)習(xí)不是從一小組的模型結(jié)構(gòu)中進(jìn)行選擇,而是允許開發(fā)人員組成任意結(jié)構(gòu)。構(gòu)建塊是一些模塊或者層,可以將其想象成基本的基礎(chǔ)數(shù)據(jù)轉(zhuǎn)換。這意味著當(dāng)我們應(yīng)用深度學(xué)習(xí)時(shí),我們需要打開黑盒子了解數(shù)據(jù)轉(zhuǎn)換,而不是把它當(dāng)做被算法固定的一堆參數(shù)。
這種做法使得我們可以構(gòu)建更加強(qiáng)大的模型,但是同時(shí)它也給整個(gè)模型構(gòu)建過程添加了一種全新的挑戰(zhàn)。盡管深度學(xué)習(xí)社區(qū)已經(jīng)發(fā)表了大量研究,到處都有實(shí)用的深度學(xué)習(xí)指南,或者一些經(jīng)驗(yàn)之談,如何有效地組合這些數(shù)據(jù)轉(zhuǎn)換依然是一個(gè)很困難的過程。
下面我們考慮一個(gè)極其簡單的卷積神經(jīng)網(wǎng)絡(luò)圖像分類器,這里是用一個(gè)流行的深度學(xué)習(xí)庫 PyTorch 來進(jìn)行定義的。
因?yàn)槲覀兪褂玫氖堑讓拥臉?gòu)建塊,我們可以輕松改變模型的某個(gè)單一部件(例如,將F.relu變?yōu)镕.sigmoid)。這樣做可以得到一個(gè)全新的模型架構(gòu),它可能會(huì)產(chǎn)生截然不同的結(jié)果,而且它的可能性,毫不夸張地說,是無止境的。
▌深度學(xué)習(xí)還沒有被充分地理解
即使給定了一個(gè)固定的神經(jīng)網(wǎng)絡(luò)架構(gòu),訓(xùn)練它也是眾所周知的極其困難。首先,深度學(xué)習(xí)的損失函數(shù)通常不是凸函數(shù),這意味著訓(xùn)練并不一定產(chǎn)生最優(yōu)的可能解。第二,深度學(xué)習(xí)現(xiàn)在還是非常新的技術(shù),它的許多組成部分仍未被充分理解。舉個(gè)例子,批標(biāo)準(zhǔn)化(Batch Normalization)最近備受關(guān)注,因?yàn)樗坪鯇⑵浒谀承┠P椭惺侨〉昧己媒Y(jié)果的關(guān)鍵,但是專家無法就其原因達(dá)成一致。研究人員 Ali Rahimi 最近在一場機(jī)器學(xué)習(xí)會(huì)議上甚至把深度學(xué)習(xí)與煉金術(shù)相提并論,引發(fā)了一場論戰(zhàn)。
▌自動(dòng)特征工程
深度學(xué)習(xí)的復(fù)雜性促進(jìn)了一門叫表示學(xué)習(xí)(representation learning)的技術(shù)的發(fā)展,這也是為什么經(jīng)常有人說神經(jīng)網(wǎng)絡(luò)做的是“自動(dòng)特征工程”。簡單來說就是,我們不是讓人類來手動(dòng)從數(shù)據(jù)集中提取有效特征,而是構(gòu)建一個(gè)模型,讓模型可以自己學(xué)習(xí)對(duì)于當(dāng)前任務(wù)來說哪些是需要的和有用的特征。把特征工程的任務(wù)交給模型來處理非常有效,但是代價(jià)是模型需要龐大的數(shù)據(jù)量,也因此需要龐大的計(jì)算能力。
▌你可以做什么?
和其他機(jī)器學(xué)習(xí)方法相比,深度學(xué)習(xí)太過于復(fù)雜,看上去似乎無法將其整合到你的業(yè)務(wù)中。對(duì)于那些資源有限的組織機(jī)構(gòu)來說,這種感覺更加強(qiáng)烈。
對(duì)于那些需要走在前沿的組織機(jī)構(gòu)來說,可能的確需要聘請(qǐng)專家和購買專業(yè)的硬件設(shè)施。但是很多情況下這不是必需的。有方法可以讓你不需要進(jìn)行大量的投資就可以有效地應(yīng)用深度學(xué)習(xí)技術(shù)。這里就是遷移學(xué)習(xí)可以大展拳腳的地方了。
遷移學(xué)習(xí)可以讓知識(shí)從一個(gè)機(jī)器學(xué)習(xí)模型遷移到另一個(gè)模型上。這些模型可能是對(duì)模型結(jié)構(gòu)進(jìn)行了長年研究、用相當(dāng)多數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練、用數(shù)以年計(jì)的計(jì)算時(shí)間對(duì)模型進(jìn)行優(yōu)化而得到的結(jié)果。利用遷移學(xué)習(xí),你不需要承擔(dān)上面說的任何成本就能獲得這項(xiàng)工作的大部分好處!
什么是遷移學(xué)習(xí)
大多數(shù)機(jī)器學(xué)習(xí)任務(wù)始于零知識(shí),意思是它的結(jié)構(gòu)和模型的參數(shù)是從隨機(jī)猜測開始的。當(dāng)我們說模型是從頭開始學(xué)習(xí)的時(shí)候,意思也是如此。
隨機(jī)猜測開始訓(xùn)練的一個(gè)貓檢測模型。通過它見過的許多不同的貓,該模型從中整合出相同的模式,逐漸學(xué)習(xí)到貓是什么。
在這種情況下,該模型學(xué)習(xí)到的所有內(nèi)容都來自于你展示給它的數(shù)據(jù)。但是,這是解決問題的唯一方法嗎?在某些情況下,看上去的確如此。
貓檢測模型在不相關(guān)的應(yīng)用中,例如欺詐檢測,很有可能沒有什么用處。它只知道如何應(yīng)付貓的圖片,而不是信用卡交易。
但是在某些情況下,我們似乎可以在不同任務(wù)之間共享信息。
貓檢測模型在相關(guān)任務(wù)中作用很大,例如貓的臉部定位。該檢測器已經(jīng)知道怎么檢測貓胡子,鼻子,以及眼睛,所有這些對(duì)于定位貓的臉部都很有用處。
這就是遷移學(xué)習(xí)的本質(zhì):采用一種模型,學(xué)習(xí)如何很好地完成某項(xiàng)任務(wù),將其部分或者所有知識(shí)遷移到一個(gè)相關(guān)的任務(wù)。
想想我們自己的學(xué)習(xí)經(jīng)驗(yàn),就會(huì)發(fā)現(xiàn)這其實(shí)很有道理:我們經(jīng)常遷移以往習(xí)得的技能,這樣可以更快地學(xué)習(xí)新的技能。舉個(gè)例子,學(xué)過投擲棒球的人不需要重新學(xué)習(xí)拋東西的機(jī)制就能很好地學(xué)習(xí)到怎么扔一個(gè)足球。這些任務(wù)本質(zhì)上是相通的,能夠處理其中一件任務(wù)的話自然而然可以把學(xué)習(xí)到的能力遷移到另一項(xiàng)任務(wù)。
在機(jī)器學(xué)習(xí)領(lǐng)域,可能過去 5 年最好的例子就是計(jì)算機(jī)視覺領(lǐng)域。現(xiàn)在幾乎沒人會(huì)從頭開始訓(xùn)練一個(gè)圖像模型。相反,我們會(huì)從一個(gè)預(yù)訓(xùn)練好的模型開始,這個(gè)模型已經(jīng)知道怎么區(qū)分一些簡單的對(duì)象,例如貓,狗,還有雨傘。學(xué)習(xí)區(qū)分圖像的模型首先學(xué)習(xí)如何檢測一些通用圖像特征,例如邊緣,形狀,文本,以及臉部。預(yù)訓(xùn)練模型具有以上這些的基本技能(還有更加具體的技能,例如區(qū)分狗和貓的能力)。
此時(shí),預(yù)訓(xùn)練的分類模型可以通過添加層或者在一個(gè)新的數(shù)據(jù)集上重新訓(xùn)練,來繼承那些花費(fèi)巨大而獲得的基本技能,然后將其延伸到新的任務(wù)。這就是遷移學(xué)習(xí)。
這種方法的好處很明顯。
▌遷移學(xué)習(xí)訓(xùn)練數(shù)據(jù)量需求量更小
當(dāng)你在一個(gè)與貓相關(guān)的新任務(wù)中重復(fù)使用你最喜愛的貓檢測模型時(shí),你的模型已經(jīng)擁有了“一百萬只貓的智慧”,這意味著你不需要再使用那么多的貓圖片來訓(xùn)練新任務(wù)了。減少訓(xùn)練數(shù)據(jù)量可以讓你在只有很少數(shù)據(jù),或者要獲得更多數(shù)據(jù)的成本過高或者不可能獲得更多數(shù)據(jù)的情況下也能訓(xùn)練,同時(shí)可以讓你在比較廉價(jià)的硬件設(shè)施上更快地訓(xùn)練模型。
▌遷移學(xué)習(xí)訓(xùn)練模型泛化能力更強(qiáng)
遷移學(xué)習(xí)可以改進(jìn)模型的泛化能力,或者說增強(qiáng)其在非訓(xùn)練數(shù)據(jù)上分類良好的能力。這是因?yàn)樵谟?xùn)練預(yù)訓(xùn)練模型時(shí),是有目的性地讓模型可以學(xué)習(xí)到對(duì)相關(guān)任務(wù)都很有用的通用特征。當(dāng)模型遷移到一個(gè)新任務(wù)時(shí),它將很難過擬合新的訓(xùn)練數(shù)據(jù),因?yàn)樗鼘H從一個(gè)很一般的知識(shí)庫中繼續(xù)學(xué)習(xí)而已。構(gòu)建一個(gè)泛化能力強(qiáng)的模型是機(jī)器學(xué)習(xí)中最難以及最重要的部分之一。
▌遷移學(xué)習(xí)訓(xùn)練過程更加魯棒
從一個(gè)預(yù)訓(xùn)練的模型開始,也可以避免訓(xùn)練一個(gè)帶有數(shù)百萬參數(shù)的復(fù)雜模型,這個(gè)過程非常令人沮喪,非常不穩(wěn)定,而且令人困惑。遷移學(xué)習(xí)可以將可訓(xùn)練參數(shù)的數(shù)量減少多達(dá) 100%,使得訓(xùn)練更穩(wěn)定,而且更容易調(diào)試。
▌遷移學(xué)習(xí)降低深度學(xué)習(xí)的入門門檻
最后,遷移學(xué)習(xí)降低深度學(xué)習(xí)的門檻,因?yàn)槟悴恍枰蔀閷<揖湍塬@得專家級(jí)的結(jié)果。舉例來說,流行的圖像分類模型 Resnet-50,這個(gè)特定的結(jié)構(gòu)是怎么選擇的呢?這是許多深度學(xué)習(xí)專家的多年研究和實(shí)驗(yàn)的結(jié)果。這個(gè)復(fù)雜的結(jié)構(gòu)中包含有 2500 萬個(gè)權(quán)重,如果沒有對(duì)這個(gè)模型中各個(gè)部件的深入了解,從頭優(yōu)化這些權(quán)重可以說是幾乎不可能的任務(wù)。幸運(yùn)的是,有了遷移學(xué)習(xí),你可以重用這個(gè)復(fù)雜的結(jié)構(gòu),以及這些優(yōu)化過的權(quán)重,因此顯著降低了深度學(xué)習(xí)的入門門檻。
多任務(wù)學(xué)習(xí)又是什么?
遷移學(xué)習(xí)是用于訓(xùn)練機(jī)器學(xué)習(xí)模型的知識(shí)共享技術(shù)的其中一種,已被證明是非常有效的。目前,知識(shí)共享技術(shù)中最有趣的兩種就是遷移學(xué)習(xí)和多任務(wù)學(xué)習(xí)。在遷移學(xué)習(xí)中,模型首先在單個(gè)任務(wù)中進(jìn)行訓(xùn)練,然后可以用于相關(guān)任務(wù)的起始點(diǎn)。在學(xué)習(xí)相關(guān)任務(wù)時(shí),原始的被遷移模型會(huì)學(xué)習(xí)如何專門處理新的任務(wù),而不需要擔(dān)心會(huì)不會(huì)影響其在原來任務(wù)上的效果。而在多任務(wù)學(xué)習(xí)中,單個(gè)模型一次性學(xué)習(xí)處理多個(gè)任務(wù),對(duì)模型的性能評(píng)估則取決于它學(xué)習(xí)之后能夠多好地完成這些任務(wù)。后續(xù)我們也會(huì)分析討論更過有關(guān)多任務(wù)學(xué)習(xí)的好處以及其何時(shí)能起作用。
結(jié)論
遷移學(xué)習(xí)是一項(xiàng)知識(shí)共享技術(shù),其可以減少構(gòu)建深度學(xué)習(xí)模型時(shí)對(duì)訓(xùn)練數(shù)據(jù)量,計(jì)算能力,以及工程人才的依賴。由于深度學(xué)習(xí)可以提供與傳統(tǒng)機(jī)器學(xué)習(xí)相比的顯著改進(jìn),遷移學(xué)習(xí)成為一項(xiàng)必不可少的工具。
想知道更多機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)、遷移學(xué)習(xí)這些算法是如何在具體應(yīng)用和業(yè)務(wù)中發(fā)揮作用的,我們會(huì)在 2018 AI開發(fā)者大會(huì)上進(jìn)行更多分享。感興趣的同學(xué)們一定要關(guān)注我們哦!
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
132938 -
遷移學(xué)習(xí)
+關(guān)注
關(guān)注
0文章
74瀏覽量
5575
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論