0
本文作者: AI研習(xí)社-譯站 | 2018-05-07 11:33 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題NanoNets : How to use Deep Learning when you have Limited Data,作者Sarthak Jain。
翻譯 | 葉青 洪振亞 整理 | 吳璇
我覺得人工智能就像是去建造一艘火箭飛船。你需要一個巨大的引擎和許多燃料。如果你有了一個大引擎,但燃料不夠,那么肯定不能把火箭送上軌道;如果你有一個小引擎,但燃料充足,那么說不定根本就無法成功起飛。所以,構(gòu)建火箭船,你必須要一個巨大的引擎和許多燃料。
深度學(xué)習(xí)(創(chuàng)建人工智能的關(guān)鍵流程之一)也是同樣的道理,火箭引擎就是深度學(xué)習(xí)模型,而燃料就是海量數(shù)據(jù),這樣我們的算法才能應(yīng)用上。——吳恩達(dá)
使用深度學(xué)習(xí)解決問題的一個常見障礙是訓(xùn)練模型所需的數(shù)據(jù)量。對大數(shù)據(jù)的需求是因?yàn)槟P椭杏写罅繀?shù)需要學(xué)習(xí)。
以下是幾個例子展示了最近一些模型所需要的參數(shù)數(shù)量:
深度學(xué)習(xí)模型的詳細(xì)信息
神經(jīng)網(wǎng)絡(luò)又名深度學(xué)習(xí),是可以堆疊起來的層狀結(jié)構(gòu)(想想樂高)
深度學(xué)習(xí)只不過是大型神經(jīng)網(wǎng)絡(luò),它們可以被認(rèn)為是流程圖,數(shù)據(jù)從一邊進(jìn)來,推理或知識從另一邊出來。
你可以拆分神經(jīng)網(wǎng)絡(luò),把它拆開,從任何你喜歡的地方取出推理。你可能沒有得到任何有意義的東西,但你依然可以這么做,例如Google DeepDream。
模型大小 ∝ 數(shù)據(jù)大小 ∝ 問題復(fù)雜度
在所需的數(shù)據(jù)量和模型的大小之間有一個有趣的近乎線性的關(guān)系。 基本的推理是,你的模型應(yīng)該足夠大,以便捕捉數(shù)據(jù)中的關(guān)系(例如圖像中的紋理和形狀,文本中的語法和語音中的音素)以及問題的具體細(xì)節(jié)(例如類別數(shù)量)。模型早期的層捕捉輸入的不同部分之間的高級關(guān)系(如邊緣和模式)。后面的層捕捉有助于做出最終決策的信息,通常能夠幫助在想要的輸出間進(jìn)行區(qū)分。因此,如果問題的復(fù)雜性很高(如圖像分類),參數(shù)數(shù)量和所需數(shù)據(jù)體量也非常大。
AlexNet在每一步能夠看到什么
遷移學(xué)習(xí)來解圍!
在處理一個您的特定領(lǐng)域的問題時,通常無法找到構(gòu)建這種大小模型所需的數(shù)據(jù)量。 然而,訓(xùn)練一個任務(wù)的模型捕獲數(shù)據(jù)類型中的關(guān)系,并且可以很容易地再用于同一個領(lǐng)域中的不同問題。 這種技術(shù)被稱為遷移學(xué)習(xí)。
轉(zhuǎn)移學(xué)習(xí)就像沒有人試圖保留但卻保存的最好的秘密一樣。 業(yè)內(nèi)人人都知道,但外界沒有人知道。
Google 趨勢機(jī)器學(xué)習(xí) vs 深度學(xué)習(xí) vs 遷移學(xué)習(xí)
參考Awesome?—?Most Cited Deep Learning Papers,看看深度學(xué)習(xí)中的頂級論文: 引用最多的深度學(xué)習(xí)論文,超過50%的論文使用某種形式的轉(zhuǎn)移學(xué)習(xí)或預(yù)訓(xùn)練。 轉(zhuǎn)移學(xué)習(xí)變得越來越適用于資源有限(數(shù)據(jù)和計(jì)算)的人們,但不幸的是,這個想法還沒有得到應(yīng)有的社會化。 最需要它的人還不知道它。
如果深度學(xué)習(xí)是圣杯,數(shù)據(jù)是守門人,轉(zhuǎn)移學(xué)習(xí)是關(guān)鍵。
通過轉(zhuǎn)移學(xué)習(xí),我們可以采用已經(jīng)在大型現(xiàn)成數(shù)據(jù)集上訓(xùn)練好的預(yù)訓(xùn)練模型(在完全不同的任務(wù)上進(jìn)行訓(xùn)練,輸入相同但輸出不同)。 然后嘗試查找輸出可重復(fù)使用特征的圖層。 我們使用該層的輸出作為輸入特征來訓(xùn)練需要更少參數(shù)的小得多的網(wǎng)絡(luò)。 這個較小的網(wǎng)絡(luò)已經(jīng)從預(yù)訓(xùn)練模型了解了數(shù)據(jù)中的模式,現(xiàn)在只需要了解它與你特定問題的關(guān)系。 貓咪檢測模型可以被重利用于梵高作品重現(xiàn)的模型就是這樣訓(xùn)練的。
使用轉(zhuǎn)移學(xué)習(xí)的另一個主要優(yōu)勢是模型的泛化效果很好。 較大的模型傾向于過度擬合數(shù)據(jù)(即對數(shù)據(jù)進(jìn)行建模而不是對潛在的現(xiàn)象建模),并且在對未見數(shù)據(jù)進(jìn)行測試時效果不佳。 由于轉(zhuǎn)移學(xué)習(xí)允許模型看到不同類型的數(shù)據(jù),因此它更好地學(xué)習(xí)了世界的基本規(guī)則。
把過擬合看做是記憶而不是學(xué)習(xí)?!?James Faghmous
由于遷移學(xué)習(xí)導(dǎo)致的數(shù)據(jù)減少
假設(shè)想結(jié)束藍(lán)黑禮服vs白金禮服的爭論。你開始收集驗(yàn)證的藍(lán)黑禮服和白金禮服的圖像。如果想自己建立一個像上文提到的那樣精確的模型(有140百萬個參數(shù))。為了訓(xùn)練這個模型,你需要找到120萬張圖像,這是一個不可能完成的任務(wù)。 所以可以試試遷移學(xué)習(xí)。
計(jì)算一下使用遷移學(xué)習(xí)解決該問題所需要的參數(shù)數(shù)量:
參數(shù)數(shù)量 = [輸入大小 + 1] * [輸出大小 + 1]
= [2048+1]*[1+1]~ 4098 個參數(shù)
我們看到參數(shù)數(shù)量從1.4×10?減少到4×103,這是5個數(shù)量級。 所以我們要收集不到一百個連衣裙的圖像,這樣應(yīng)該還好。??!
如果你不耐煩,等不及要找出衣服的實(shí)際顏色,向下滾動,看看如何建立自己的禮服模型。
· · ·
轉(zhuǎn)移學(xué)習(xí)的分步指南——使用與情感分析相關(guān)的實(shí)例
在這個實(shí)例中我們有72個電影評論
1、62個沒有分配情緒,這些將被用于預(yù)先模型
2、8個分配了情緒,它們將被用于訓(xùn)練模型
3、2個分配了情緒,它們將被用于測試模型
由于我們只有8個有標(biāo)記的句子(那些有感情相關(guān)的句子),我們首先直接訓(xùn)練模型來預(yù)測上下文。 如果我們只用8個句子訓(xùn)練一個模型,它會有50%的準(zhǔn)確率(50%如同用拋硬幣進(jìn)行決策)。
為了解決這個問題,我們將使用轉(zhuǎn)移學(xué)習(xí),首先在62個句子上訓(xùn)練一個模型。 然后,我們使用第一個模型的一部分,并在其基礎(chǔ)上訓(xùn)練情感分類器。 使用8個句子進(jìn)行訓(xùn)練,并在剩下的2個句子上進(jìn)行測試時,模型會產(chǎn)生100%的準(zhǔn)確率。
步驟一
我們將訓(xùn)練一個對詞語之間的關(guān)系進(jìn)行建模的網(wǎng)絡(luò)。將句子中的一個詞語傳遞進(jìn)去,并嘗試預(yù)測該詞語出現(xiàn)在同一個句子中。在下列的代碼中嵌入的矩陣大小為vocabulary x embedding_size,其中存儲了代表每個詞語的向量(這里的大小為“4”)。
Github地址: https://gist.github.com/sjain07/98266a854d19e01608fa13d1ae9962e3#file-pretraining_model-py
步驟二
我們會對這個圖標(biāo)進(jìn)行訓(xùn)練,讓相同上下文中出現(xiàn)的詞語可以獲得類似的向量表征。我們會對這些句子進(jìn)行預(yù)處理,移除所有停止詞并標(biāo)記他們。隨后一次傳遞一個詞語, 盡量縮短該詞語向量與周邊詞語之間的距離,并擴(kuò)大與上下文不包含的隨機(jī)詞語之間的距離。
Github地址:https://gist.github.com/sjain07/3e9ef53a462a9fc065511aeecdfc22fd#file-training_the_pretrained_model-py
步驟三
隨后我們會試著預(yù)測句子索要表達(dá)的情緒。目前已經(jīng)有10個(8個訓(xùn)練用,2個測試用)句子帶有正面和負(fù)面的標(biāo)簽。由于上一步得到的模型已經(jīng)包含從所有詞語中習(xí)得的向量,并且這些向量的數(shù)值屬性可以代表詞語的上下文,借此可進(jìn)一步簡化情緒的預(yù)測。
此時我們并不直接使用句子,而是將句子的向量設(shè)置為所含全部詞語的平均值(這一任務(wù)實(shí)際上是通過類似LSTM的技術(shù)實(shí)現(xiàn)的)。句子向量將作為輸入傳遞到網(wǎng)絡(luò)中,輸出結(jié)果為內(nèi)容為正面或負(fù)面的分?jǐn)?shù)。我們用到了一個隱藏的中間層,并通過帶有標(biāo)簽的句子對模型進(jìn)行訓(xùn)練。如你所見,雖然每次只是用了10個樣本,但這個模型實(shí)現(xiàn)了100%的準(zhǔn)確度。
Github地址:https://gist.github.com/sjain07/a45ef4ff088e01abbcc89e91b030b380#file-training_the_sentiment_model-py
雖然這只是個示例,但可以發(fā)現(xiàn)在遷移學(xué)習(xí)技術(shù)的幫助下,精確度從50%飛速提升至100%。若要查看完整范例和代碼請?jiān)L問下列地址:
https://gist.github.com/prats226/9fffe8ba08e378e3d027610921c51a78
遷移學(xué)習(xí)的一些真實(shí)案例
圖像識別:圖像增強(qiáng)、風(fēng)格轉(zhuǎn)移、對象檢測、皮膚癌檢測。
文字識別:Zero Shot翻譯、情緒分類。
遷移學(xué)習(xí)實(shí)現(xiàn)過程中的難點(diǎn)
雖然可以用更少量的數(shù)據(jù)訓(xùn)練模型,但該技術(shù)的運(yùn)用有著更高的技能要求。只需要看看上述例子中硬編碼參數(shù)的數(shù)量,并設(shè)想一下要在模型訓(xùn)練完成前不斷調(diào)整這些參數(shù),遷移學(xué)習(xí)技術(shù)使用的難度之大可想而知。
1、遷移學(xué)習(xí)技術(shù)目前面臨的問題包括:
2、找到預(yù)訓(xùn)練所需的大規(guī)模數(shù)據(jù)集
3、決定用來預(yù)訓(xùn)練的模型
4、兩種模型中任何一種無法按照預(yù)期工作都將比較難以調(diào)試
5、不確定為了訓(xùn)練模型還需要額外準(zhǔn)備多少數(shù)據(jù)
6、使用預(yù)訓(xùn)練模型時難以決定在哪里停止
7、在預(yù)訓(xùn)練模型的基礎(chǔ)上,確定模型所需層和參數(shù)的數(shù)量
8、托管并提供組合后的模型
9、當(dāng)出現(xiàn)更多數(shù)據(jù)或更好的技術(shù)后,對預(yù)訓(xùn)練模型進(jìn)行更新
數(shù)據(jù)科學(xué)家難覓。找到能發(fā)現(xiàn)數(shù)據(jù)科學(xué)家的人其實(shí)一樣困難 --Krzysztof Zawadzki
讓遷移學(xué)習(xí)變得更簡單
親身經(jīng)歷過這些問題后,我們開始著手通過構(gòu)建支持遷移學(xué)習(xí)技術(shù)的云端深度學(xué)習(xí)服務(wù),并嘗試通過這種簡單易用的服務(wù)解決這些問題。該服務(wù)中包含一系列預(yù)訓(xùn)練的模型,我們已針對數(shù)百萬個參數(shù)進(jìn)行過訓(xùn)練。你只需要上傳自己的數(shù)據(jù)(或在網(wǎng)絡(luò)上搜索數(shù)據(jù)),該服務(wù)即可針對你的具體任務(wù)選擇最適合的模型,在現(xiàn)有預(yù)訓(xùn)練模型的基礎(chǔ)上建立新的NanoNet,將你的數(shù)據(jù)輸入到NanoNet中進(jìn)行處理。
NanoNets的遷移學(xué)習(xí)技術(shù)(該架構(gòu)僅為基本呈現(xiàn))
構(gòu)建你的首個NanoNet(圖像分類)
1、在這里選擇你要處理的分類。
2、 一鍵點(diǎn)擊開始搜索網(wǎng)絡(luò)并構(gòu)建模型(你也可以上傳自己的圖片)。
3、 解決藍(lán)金裙子的爭議(模型就緒后,我們會通過簡單易用的Web界面讓你上傳測試圖片,同時還提供不依賴特定語言的API)。
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。