摘要:帖子原文標(biāo)題為即數(shù)據(jù)不多時(shí),就別用深度學(xué)習(xí)了,喜歡看熱鬧的,不妨搜一下。我們首先要做的事情就是構(gòu)建一個(gè)使用數(shù)據(jù)集,并且可用的深度學(xué)習(xí)模型。許多人認(rèn)為深度學(xué)習(xí)是一個(gè)巨大的黑箱。
撕逼大戰(zhàn),從某種角度,標(biāo)志著一個(gè)產(chǎn)業(yè)的火熱。
最近,大火的深度學(xué)習(xí),也開始撕起來(lái)了。
前幾日,有一篇帖子在“Simply Stats”很火,作者Jeff Leek在博文中犀利地將深度學(xué)習(xí)拉下神壇,他談到了深度學(xué)習(xí)現(xiàn)在如何狂熱,人們正試圖用這個(gè)技術(shù)解決每一個(gè)問(wèn)題。但是呢,只有極少數(shù)情況下,你才能拿到足夠的數(shù)據(jù),這樣看來(lái),深度學(xué)習(xí)也就沒(méi)那么大用處了。
帖子原文標(biāo)題為“Don’t use deep learning your data isn’t that big.”(即數(shù)據(jù)不多時(shí),就別用深度學(xué)習(xí)了),喜歡看熱鬧的,不妨搜一下。
帖子一出,人們就炸開了。
這里面就有牛人就看不慣了,直接懟起來(lái)!
哈佛大學(xué)生物醫(yī)藥信息學(xué)的專業(yè)的博士后專門寫了篇文章來(lái)反駁:You can probably use deep learning even if your data isn"t that big.(即便數(shù)據(jù)不夠,也能用深度學(xué)習(xí))
誰(shuí)說(shuō)數(shù)據(jù)少就不能用深度學(xué)習(xí)了,那是你根本沒(méi)搞懂好嗎?
(嗯,深度學(xué)習(xí)默默表示,這鍋俺不背)
來(lái)我們先來(lái)看一下正反方的觀點(diǎn):
正方:
原貼觀點(diǎn):倘若你的樣本數(shù)量少于100個(gè),較好不要使用深度學(xué)習(xí),因?yàn)槟P蜁?huì)過(guò)擬合,這樣的話,得到的結(jié)果將會(huì)很差。
反方:
模型表現(xiàn)很差并不是由過(guò)擬合引起的。沒(méi)能收斂,或者難以訓(xùn)練很可能才是罪魁禍?zhǔn)住D阏揭虼说贸鲞@樣的結(jié)論,是因?yàn)槟銓?shí)驗(yàn)本身的問(wèn)題。方法用對(duì)了,即使只有100-1000個(gè)數(shù)據(jù),仍然可以使用深度學(xué)習(xí)技術(shù),得到好的結(jié)果。
(到底誰(shuí)在扯淡?這場(chǎng)爭(zhēng)論有沒(méi)有意義?誰(shuí)的實(shí)驗(yàn)更有道理?歡迎各位牛人在留言區(qū)拍磚)
以下,AI100專程對(duì)反方的觀點(diǎn)及研究進(jìn)行了全文編譯,略長(zhǎng),但,很有意思。準(zhǔn)備好圍觀了嗎?出發(fā)!
以下對(duì)反方內(nèi)容的全文編譯:
老實(shí)講,原文中的部分觀點(diǎn),我也算是認(rèn)同,不過(guò),有一些事情需要在這篇文章中進(jìn)行探討。
Jeff做了一個(gè)關(guān)于辨識(shí)手寫數(shù)字0和1的實(shí)驗(yàn),他的數(shù)據(jù)源是來(lái)自大名鼎鼎的MNIST數(shù)據(jù)集。
此次實(shí)驗(yàn),他采用了兩種方法:
一種方法采用的是神經(jīng)網(wǎng)絡(luò)模型,共5層,其中激活函數(shù)是雙曲正切函數(shù);
另一種方法使用的是李加索變量選擇方法,這種方法思想就是挑選10個(gè)邊際p值最小的像素來(lái)進(jìn)行(用這些值做回歸就可以了)。
實(shí)驗(yàn)結(jié)果表明,在只有少量的樣本的情況下,李加索方法的表現(xiàn)要優(yōu)于神經(jīng)網(wǎng)絡(luò)。
下圖是性能表現(xiàn):
很驚奇對(duì)不對(duì)?
的確!倘若你的樣本數(shù)量少于100個(gè),較好不要使用深度學(xué)習(xí),因?yàn)槟P蜁?huì)過(guò)擬合,這樣的話,得到的結(jié)果將會(huì)很差。
我認(rèn)為在這里需要仔細(xì)探討一下。深度學(xué)習(xí)模型很復(fù)雜,有很多的訓(xùn)練技巧。我覺得模型表現(xiàn)很差并不是由過(guò)擬合引起的,沒(méi)能收斂,或者難以訓(xùn)練很可能才是罪魁禍?zhǔn)住?/p>
Deep Learning VS Leekasso Redux
我們首先要做的事情就是構(gòu)建一個(gè)使用MNIST數(shù)據(jù)集,并且可用的深度學(xué)習(xí)模型。一般來(lái)說(shuō)我們所使用的就是多層感知機(jī)與卷積神經(jīng)網(wǎng)絡(luò)。倘若原帖思想是正確的話,那么當(dāng)我們使用少量樣本來(lái)訓(xùn)練我們的模型的話,那么我們的模型將會(huì)過(guò)擬合。
我們構(gòu)建了一個(gè)簡(jiǎn)單的多層感知機(jī),使用的激活函數(shù)是RELU。于此同時(shí),我們還構(gòu)建了一類似VGG的卷積神經(jīng)網(wǎng)絡(luò)。將這兩個(gè)神經(jīng)網(wǎng)絡(luò)模型的表現(xiàn)同李加索(Leekasso)模型進(jìn)行對(duì)比。你可以在這里獲取相關(guān)代碼。非常感謝我的暑期實(shí)習(xí)生Michael Chen。他做了大部分的工作。使用的語(yǔ)言是python,工具是Keras。
代碼獲取地址:
https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py
MLP是標(biāo)準(zhǔn)的模型,如下面代碼所示:
我們的CNN模型的網(wǎng)絡(luò)結(jié)構(gòu),如下面所示(我想很多人對(duì)此都很熟悉)
作為參考,我們的多層感知機(jī)MLP模型大概有120000個(gè)參數(shù),而我們的CNN模型大概有200000個(gè)參數(shù)。根據(jù)原帖中所涉及的假設(shè),當(dāng)我們有這么多參數(shù),而我們的樣本數(shù)量很少的時(shí)候,我們的模型真的是要崩潰了。
我們嘗試盡可能地復(fù)原原始實(shí)驗(yàn)——我們采用5折交叉驗(yàn)證,但是使用標(biāo)準(zhǔn)的MNIST測(cè)試數(shù)據(jù)集做為評(píng)估使用(驗(yàn)證集中0與1樣本的個(gè)數(shù)大概有2000多個(gè))。我們將測(cè)試集分成兩部分。第一部分用來(lái)評(píng)估訓(xùn)練程序的收斂性,第二部分?jǐn)?shù)據(jù)用來(lái)衡量模型預(yù)測(cè)的準(zhǔn)確度。我們并沒(méi)用對(duì)模型進(jìn)行調(diào)參。對(duì)于大多數(shù)參數(shù),我們使用的都是合理的默認(rèn)值。
我們盡我們較大的努力重寫了原貼中的Leekasso和MLP代碼的python版本。你可以在這里獲得源碼。下面就是每個(gè)模型在所抽取的樣本上的準(zhǔn)確率。通過(guò)最下面的放大圖,你能夠很容易的知道哪個(gè)模型表現(xiàn)較好。
是不是很驚奇?這看上去和原帖的分析完全不同!原帖中所分析的MLP,在我們的試驗(yàn)中,依然是在少量數(shù)據(jù)集中表現(xiàn)很差。但是我所設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)在所使用的樣本中,卻有很好的表現(xiàn)。那么這就引出了一個(gè)問(wèn)題……
到底在我們的實(shí)驗(yàn)中發(fā)生了什么?
眾所周知,深度學(xué)習(xí)模型的訓(xùn)練過(guò)程是一個(gè)精細(xì)活,知道如何“照顧”我們的網(wǎng)絡(luò)是一個(gè)很重要的技能。過(guò)多的參數(shù)會(huì)導(dǎo)致某些特定的問(wèn)題(尤其是涉及到SGD),倘若沒(méi)有選擇好的話,那么將會(huì)導(dǎo)致很差的性能,以及誤導(dǎo)性。當(dāng)你在進(jìn)行深度學(xué)習(xí)相關(guān)工作的時(shí)候,你需要謹(jǐn)記下面的話:
模型的細(xì)節(jié)很重要,你需要當(dāng)心黑箱調(diào)用那些任何看起來(lái)都像是deeplearning()的東西。
下面是我對(duì)原帖中問(wèn)題的一些猜想:
激勵(lì)函數(shù)很重要,使用tanh作為激勵(lì)函數(shù)的神經(jīng)網(wǎng)絡(luò)很難訓(xùn)練。這就是為什么當(dāng)我們使用Relu函數(shù)作為我們的激活函數(shù),會(huì)有很大進(jìn)步的原因了。
確保隨機(jī)梯度下降能夠收斂。在原始實(shí)驗(yàn)對(duì)照中,作者僅僅訓(xùn)練了20輪,這樣的話,可能是訓(xùn)練的次數(shù)不夠。僅僅有10個(gè)樣本,僅僅訓(xùn)練了20輪,那么結(jié)果是我們僅僅進(jìn)行了200次的梯度更新。然而要想完整的訓(xùn)練一遍我們所有的數(shù)據(jù),我們需要6000次的梯度更新。進(jìn)行上百輪、上千輪訓(xùn)練是很正常的。我們大概會(huì)有1000000梯度更新。假若你僅僅打算進(jìn)行200次的梯度更新,那么你可能需要很大的學(xué)習(xí)速率,否則的話,你的模型不太可能會(huì)收斂。h2o.deeplearning()默認(rèn)的學(xué)習(xí)速率是0.005。假若你僅僅是更新幾次的話,這個(gè)學(xué)習(xí)速率就太小了。我們使用訓(xùn)練200輪的模型,我們會(huì)看到在前50輪,模型在樣本上的準(zhǔn)確率會(huì)有很大的波動(dòng)。所以,我覺得模型沒(méi)有收斂在很大程度上能夠解釋原貼中所觀察到的差異。
需要一直檢查參數(shù)的默認(rèn)值。Keras是一個(gè)很好的工具。因?yàn)镵eras會(huì)將參數(shù)設(shè)置成它覺得代表當(dāng)前訓(xùn)練的較好的默認(rèn)值。但是,你仍然需要確保你所選擇的參數(shù)的值匹配你的問(wèn)題。
不同的框架會(huì)導(dǎo)致不同的結(jié)果。我曾嘗試回到原始的R代碼,以期望得到最后的結(jié)果。然而,我無(wú)法從h2o.deeplearning()函數(shù)中得到好的結(jié)果。我覺得原因可能涉及到優(yōu)化過(guò)程。它所使用的可能是Elastic Averaging SGD,這種方法會(huì)將計(jì)算安排到多個(gè)節(jié)點(diǎn)上,這樣就會(huì)加速訓(xùn)練速度。我不清楚在僅有少量數(shù)據(jù)的情況下,這種方法是否會(huì)失效。我只是有這個(gè)猜測(cè)而已。對(duì)于h2o我并沒(méi)有太多的使用經(jīng)驗(yàn),其他人也許知道原因。
幸運(yùn)的是,Rstudio的好人們剛剛發(fā)布了針對(duì)于Keras的R的接口。因此我可以在R的基礎(chǔ)上,創(chuàng)建我的python代碼了。我們之前使用的MLP類似于這個(gè)樣子,現(xiàn)在我們用R語(yǔ)言將其實(shí)現(xiàn)。
我將這個(gè)代碼改成了Jeff的R代碼,并重新生成了原始的圖形。我同樣稍微修改了下Leekasso的代碼。我發(fā)現(xiàn)原先的代碼使用的是lm() (線性回歸),我認(rèn)為不是很好。所以我改成了glm()(邏輯回歸)。新的圖形如下圖所示:
深度學(xué)習(xí)勝利了!類似的現(xiàn)象可能表明python與R版本的Leekasso算法不同之處。Python版本的邏輯回歸使用的是liblinear來(lái)實(shí)現(xiàn),我覺得這樣做的話,會(huì)比R默認(rèn)的實(shí)現(xiàn)方式更加的健壯,有更強(qiáng)的魯棒性。因?yàn)長(zhǎng)eekasso選擇的變量是高度共線的,這樣做也許會(huì)更好。
這個(gè)問(wèn)題意義非凡:我重新運(yùn)行了Leekasso,但是僅使用較高的預(yù)測(cè)值,最終的結(jié)果和完整的Leekasso的結(jié)果一致。事實(shí)上,我認(rèn)為我可以做出一個(gè)不需要數(shù)據(jù)的分類器,這個(gè)分類器會(huì)有很高的準(zhǔn)確率。我們僅僅需要選擇中心的像素,假若它是黑色的話,我們就可以認(rèn)為它是1,否則的話就預(yù)測(cè)是0。正如David Robinson所指出的:
David同樣認(rèn)為對(duì)于大部分的數(shù)字對(duì)兒,我們只需使用一個(gè)像素就能分開。因此,那個(gè)帖子反映的問(wèn)題看上去并不能反應(yīng)數(shù)據(jù)很少的情形。我們對(duì)他得出結(jié)論較好有所保留。
為什么深度學(xué)習(xí)會(huì)產(chǎn)生誤解?
最后,我想在重新回顧一下Jeff在他原帖中的觀點(diǎn),尤其是下面的陳述:
? ? ? ??
問(wèn)題是,現(xiàn)在僅僅有很少的領(lǐng)域可獲得數(shù)據(jù),并使用深度學(xué)習(xí)技術(shù)進(jìn)行處理……但是,我認(rèn)為深度學(xué)習(xí)對(duì)于簡(jiǎn)單模型的優(yōu)勢(shì)在于深度學(xué)習(xí)可處理大量的數(shù)據(jù)以及大量的參數(shù)。
? ? ? ??
我并不是贊同這一段,尤其是最后一部分的觀點(diǎn)。許多人認(rèn)為深度學(xué)習(xí)是一個(gè)巨大的黑箱。這個(gè)黑箱有海量的參數(shù),只要你能夠提供足夠多的數(shù)據(jù)(這里足夠多所代表的數(shù)據(jù)量在一百萬(wàn)和葛立恒數(shù)之間),你就能學(xué)習(xí)到任何的函數(shù)。很明顯,神經(jīng)網(wǎng)絡(luò)極其的靈活,它的靈活性是神經(jīng)網(wǎng)絡(luò)之所以取得成功的部分原因。但是,這并不是的原因,對(duì)不對(duì)?
? ? ? ??
畢竟,統(tǒng)計(jì)學(xué)與機(jī)器學(xué)習(xí)對(duì)超級(jí)靈活模型的研究已經(jīng)有70多年了。我并不認(rèn)為神經(jīng)網(wǎng)絡(luò)相較于其他擁有同樣復(fù)雜度的算法,會(huì)擁有更好的靈活性。
以下是我認(rèn)為為什么神經(jīng)網(wǎng)絡(luò)會(huì)取得成功的一些原因:
1.任何措施都是為了取得偏差與方差的平衡:
需要說(shuō)清楚的是,我認(rèn)為Jeff實(shí)際上想要討論的模型復(fù)雜度與偏差/方差的平衡。假若你沒(méi)有足夠多的數(shù)據(jù),那么使用簡(jiǎn)單的模型相比于復(fù)雜模型來(lái)說(shuō)可能會(huì)更好(簡(jiǎn)單模型意味著高偏差/低方差,復(fù)雜模型意味著低偏差/高方差)。我認(rèn)為在大部分情況下,這是一個(gè)很好的客觀建議。然而……
2.神經(jīng)網(wǎng)絡(luò)有很多的方法來(lái)避免過(guò)擬合:
神經(jīng)網(wǎng)絡(luò)有很多的參數(shù)。在Jeff看來(lái),倘若我們沒(méi)有足夠多的數(shù)據(jù)來(lái)估計(jì)這些參數(shù)的話,這就會(huì)導(dǎo)致高方差。人們很清楚這個(gè)問(wèn)題,并研究出了很多可降低方差的技術(shù)。像dropout與隨機(jī)梯度下結(jié)合,就會(huì)起到bagging算法的作用。我們只不過(guò)使用網(wǎng)絡(luò)參數(shù)來(lái)代替輸入變量。降低方差的技術(shù),比如說(shuō)dropout,專屬于訓(xùn)練過(guò)程,在某種程度上來(lái)說(shuō),其他模型很難使用。這樣的話,即使你沒(méi)有海量的數(shù)據(jù),你依然可以訓(xùn)練巨大的模型(就像是我們的MLP,擁有120000個(gè)參數(shù))。
3.深度學(xué)習(xí)能夠輕易地將具體問(wèn)題的限制條件輸入到我們的模型當(dāng)中,這樣很容易降低偏差:
這是我認(rèn)為最重要的部分。然而,我們卻經(jīng)常將這一點(diǎn)忽略掉。神經(jīng)網(wǎng)絡(luò)具有模塊化功能,它可以包含強(qiáng)大的約束條件(或者說(shuō)是先驗(yàn)),這樣就能夠在很大程度上降低模型的方差。較好的例子就是卷積神經(jīng)網(wǎng)絡(luò)。在一個(gè)CNN中,我們將圖像的特征經(jīng)過(guò)編碼,然后輸入到模型當(dāng)中去。例如,我們使用一個(gè)3X3的卷積,我們這樣做實(shí)際上就是在告訴我們的網(wǎng)絡(luò)局部關(guān)聯(lián)的小的像素集合會(huì)包含有用的信息。此外,我們可以將經(jīng)過(guò)平移與旋轉(zhuǎn)的但是不變的圖像,通過(guò)編碼來(lái)輸入到我們的模型當(dāng)中。這都有助于我們降低模型對(duì)圖片特征的偏差。并能夠大幅度降低方差并提高模型的預(yù)測(cè)能力。
4.使用深度學(xué)習(xí)并不需要如google一般的海量數(shù)據(jù):
使用上面所提及的方法,即使你是普通人,僅僅擁有100-1000個(gè)數(shù)據(jù),你仍然可以使用深度學(xué)習(xí)技術(shù),并從中受益。通過(guò)使用這些技術(shù),你不僅可以降低方差,同時(shí)也不會(huì)降低神經(jīng)網(wǎng)絡(luò)的靈活性。你甚至可以通過(guò)遷移學(xué)習(xí)的方法,來(lái)在其他任務(wù)上來(lái)構(gòu)建網(wǎng)絡(luò)。
? ? ? ??
總之,我認(rèn)為上面的所列舉的理由已經(jīng)能夠很好地解釋為什么深度學(xué)習(xí)在實(shí)際中會(huì)有效。它之所以有效,并不僅僅是因?yàn)樗鼡碛写罅康膮?shù)以及海量的數(shù)據(jù)。最后,我想說(shuō)的是本文并沒(méi)有說(shuō)Jeff的觀點(diǎn)是錯(cuò)誤的,本文僅僅是從不同的角度來(lái)解讀他的觀點(diǎn)。希望這篇文章對(duì)你有用。
原文地址
https://simplystatistics.org/2017/05/31/deeplearning-vs-leekasso/
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/4545.html
摘要:后現(xiàn)代的已經(jīng)到了暮年,該退出瀏覽器的舞臺(tái)了嗎體積過(guò)大很多人詬病體積很大,占用資源很多,但是讓我們來(lái)看一下最新的的大小。因?yàn)檫@就是個(gè)人寫代碼能力的問(wèn)題了。。。。隨著時(shí)代的發(fā)展,的市場(chǎng)占有率是越來(lái)越少,以后會(huì)不會(huì)完全被拋棄,這我不知道。 作者:陳大魚頭 github: KRISACHAN 發(fā)展歷程 write less, do more -- John Resig ? 在2005年8...
摘要:春招前端實(shí)習(xí)面試記錄從就開始漸漸的進(jìn)行復(fù)習(xí),月末開始面試,到現(xiàn)在四月中旬基本宣告結(jié)束。上海愛樂(lè)奇一面盒模型除之外的面向?qū)ο笳Z(yǔ)言繼承因?yàn)槭且曨l面試,只記得這么多,只感覺考察的面很廣,前端后端移動(dòng)端都問(wèn)了,某方面也有深度。 春招前端實(shí)習(xí)面試記錄(2019.3 ~ 2019.5) 從2019.1就開始漸漸的進(jìn)行復(fù)習(xí),2月末開始面試,到現(xiàn)在四月中旬基本宣告結(jié)束。在3月和4月經(jīng)歷了無(wú)數(shù)次失敗,沮...
摘要:借助,我們通過(guò)非常簡(jiǎn)單的問(wèn)答形式,方便地初始化一個(gè)工程,完全不需要擔(dān)心繁復(fù)的配置等等。簡(jiǎn)單來(lái)說(shuō),就是不僅僅能初始化工程,理論上能夠初始化一切工程,包括,等等等等,只要你有一份能夠運(yùn)行的模板,就能夠通過(guò)進(jìn)行工程的初始化。 相信對(duì)于大部分使用過(guò)VueJS的同學(xué)來(lái)說(shuō),vue-cli是他們非常熟悉的一個(gè)工具。借助vue-cli,我們通過(guò)非常簡(jiǎn)單的問(wèn)答形式,方便地初始化一個(gè)vue工程,完全不需要...
閱讀 2729·2021-10-11 10:58
閱讀 1324·2021-09-29 09:34
閱讀 1746·2021-09-26 09:46
閱讀 3991·2021-09-22 15:31
閱讀 859·2019-08-30 15:54
閱讀 1596·2019-08-30 13:20
閱讀 1375·2019-08-30 13:13
閱讀 1680·2019-08-26 13:52