丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給大牛講堂
發(fā)送

0

干貨 | 算法工程師入門(mén)第一期——羅恒講深度學(xué)習(xí)

本文作者: 大牛講堂 編輯:谷磊 2017-07-14 18:46
導(dǎo)語(yǔ):大牛講堂實(shí)用干貨-算法工程師入門(mén)課程,首期將由地平線資深算法研究員羅恒為大家講述深度學(xué)習(xí)簡(jiǎn)介,包括神經(jīng)網(wǎng)絡(luò)的歷史回顧和神經(jīng)網(wǎng)絡(luò)的訓(xùn)練等內(nèi)容。

雷鋒網(wǎng)按:本文為大牛講堂算法工程師入門(mén)課程第一篇。地平線資深算法工程師羅恒、穆黎森、黃李超將分別帶來(lái)深度學(xué)習(xí)、增強(qiáng)學(xué)習(xí)、物體檢測(cè)的相關(guān)課程。本期地平線資深算法研究員羅恒將為大家?guī)?lái)深度學(xué)習(xí)簡(jiǎn)介,包括神經(jīng)網(wǎng)絡(luò)歷史回顧和神經(jīng)網(wǎng)絡(luò)訓(xùn)練等內(nèi)容。

干貨 | 算法工程師入門(mén)第一期——羅恒講深度學(xué)習(xí)

▼ 

整個(gè)神經(jīng)網(wǎng)絡(luò),從歷史上就可以把很多東西搞清楚,比如它是怎么變過(guò)來(lái)的。我認(rèn)為神經(jīng)網(wǎng)絡(luò)其實(shí)是變得越來(lái)越簡(jiǎn)單,越來(lái)越好用的?,F(xiàn)在神經(jīng)網(wǎng)絡(luò)常用的東西已經(jīng)很固定了,你不用再加任何東西就能用。但有些時(shí)候你覺(jué)得這個(gè)東西應(yīng)該work,但它不work,這種情況該怎么辦。所以盡管現(xiàn)在很多東西已經(jīng)純標(biāo)準(zhǔn)化,但了解這些對(duì)于你找問(wèn)題找錯(cuò)誤,還是很重要。所以這次主要講兩個(gè)東西,優(yōu)化和正則化。絕大多數(shù)情況,正則化不是問(wèn)題,我們只關(guān)心優(yōu)化問(wèn)題,往往你發(fā)現(xiàn)需要做正則化的時(shí)候多半是數(shù)據(jù)問(wèn)題。

神經(jīng)網(wǎng)絡(luò)經(jīng)歷了三次研究熱潮。第一次是60年代,感知器出來(lái)后很多人認(rèn)為離人工智能已經(jīng)很近了。但馬上有人寫(xiě)了本書(shū)叫《感知器》,說(shuō)它不能解決異或問(wèn)題,這個(gè)時(shí)候大家一下子又不感興趣了。到80年代,BP算法出來(lái),又開(kāi)始變得火熱起來(lái)。但當(dāng)時(shí)人們認(rèn)為多層神經(jīng)網(wǎng)絡(luò)優(yōu)化困難,又對(duì)它失去了信心。直到很多年后,2006年出來(lái)了Deep Belief Nets。學(xué)術(shù)界又開(kāi)始慢慢對(duì)神經(jīng)網(wǎng)絡(luò)有興趣,等到神經(jīng)網(wǎng)絡(luò)在語(yǔ)音識(shí)別和物體識(shí)別上取得突破后,神經(jīng)網(wǎng)絡(luò)的第三次熱潮又開(kāi)始了,一直持續(xù)到現(xiàn)在。

感知器已經(jīng)有了現(xiàn)代神經(jīng)網(wǎng)絡(luò)的原型,輸入特征與參數(shù)w連接,加權(quán)累加之后進(jìn)入神經(jīng)元,通過(guò)激活函數(shù)輸出。與現(xiàn)在的網(wǎng)絡(luò)的區(qū)別主要有兩點(diǎn),第一是數(shù)據(jù)要經(jīng)過(guò)人工編碼形成特征;第二是網(wǎng)絡(luò)的輸出是離散的二值。前者導(dǎo)致了相當(dāng)一段時(shí)間,人們認(rèn)為什么是好的特征應(yīng)該由專(zhuān)家來(lái)設(shè)計(jì),有了好的特征之后再解決分類(lèi)問(wèn)題,從這個(gè)角度上看,SVM也只是個(gè)特殊的感知器。

關(guān)于第二點(diǎn),輸出的離散的,這個(gè)帶來(lái)一個(gè)問(wèn)題,就是從輸入到輸出不是一個(gè)連續(xù)的光滑的,這個(gè)其實(shí)是限制使用梯度優(yōu)化網(wǎng)絡(luò)的最大障礙。

干貨 | 算法工程師入門(mén)第一期——羅恒講深度學(xué)習(xí)

很快,Minsky和Papert的《感知器》里面證明了上面的感知器不能解決異或等一大類(lèi)問(wèn)題,這本書(shū)因此也造成了神經(jīng)網(wǎng)絡(luò)研究的第一次低潮。有趣的是,其實(shí)也就是在《感知器》里面,作者指出如果在網(wǎng)絡(luò)中能夠增加一些額外的類(lèi)似感知器的單元,那么就能解決那些不能解決的問(wèn)題。

這類(lèi)神經(jīng)元后來(lái)被Hinton稱(chēng)之為隱藏單元(Hidden Units),在傳統(tǒng)的感知器中,輸出神經(jīng)元是可見(jiàn)的,根據(jù)訓(xùn)練數(shù)據(jù),我們知道輸出單元應(yīng)當(dāng)是什么樣的狀態(tài),而隱藏單元的狀態(tài)則不可知。就像之前提到的,如果隱藏單元的輸出是離散的,那么根據(jù)輸入特征,得到對(duì)應(yīng)的輸出就需要考慮隱藏單元的各種可能狀態(tài),那么就是一個(gè)組合優(yōu)化問(wèn)題,求解困難。

80年代,BP算法的成功的主要原因,就是改變激活函數(shù)為光滑連續(xù)的函數(shù)(可導(dǎo)),這樣一來(lái),對(duì)于一個(gè)含有隱藏單元的神經(jīng)網(wǎng)絡(luò),從輸入x到輸入y也是一個(gè)關(guān)于所有連接參數(shù)w的光滑連續(xù)的函數(shù)。那么使用鏈?zhǔn)椒▌t求導(dǎo),我們就可以得到網(wǎng)絡(luò)所有參數(shù)的梯度,也就是說(shuō)我們現(xiàn)在知道按梯度方向調(diào)整參數(shù)w就可以使得給定輸入數(shù)據(jù)x改變網(wǎng)絡(luò)的輸出大小,不斷地修正,就可以使得網(wǎng)絡(luò)的行為去擬合訓(xùn)練數(shù)據(jù)。之后,BP算法大獲成功,神經(jīng)網(wǎng)絡(luò)迎來(lái)了第二次的研究熱潮。

80年代到90年代,大量的研究人員使用BP算法訓(xùn)練神經(jīng)網(wǎng)絡(luò),但是大家發(fā)現(xiàn)優(yōu)化十分困難,最常見(jiàn)的失敗就是無(wú)論怎么調(diào)整參數(shù),訓(xùn)練的loss就是不降。由于神經(jīng)網(wǎng)絡(luò)是優(yōu)化一個(gè)非線性函數(shù),那么意味著理論上存在局部極小點(diǎn),因此,每當(dāng)loss不降,大家都是自然而然地認(rèn)為這是遇到了局部極小點(diǎn),同時(shí)理論上層數(shù)越多的神經(jīng)網(wǎng)絡(luò)非線性越強(qiáng)會(huì)有更多的局部極小,現(xiàn)實(shí)的觀察也發(fā)現(xiàn)更深的網(wǎng)絡(luò)往往結(jié)果更差,從而大量的研究者對(duì)神經(jīng)網(wǎng)絡(luò)失去信心,神經(jīng)網(wǎng)絡(luò)進(jìn)入第二次低潮。90年代末開(kāi)始的SVM相關(guān)研究以及后來(lái)對(duì)凸優(yōu)化的癡迷,也都是在這個(gè)大背景下發(fā)生的。

進(jìn)入2000年之后,Hinton發(fā)現(xiàn)使用一些非監(jiān)督方法對(duì)多層神經(jīng)網(wǎng)絡(luò)做初始化之后再使用BP算法,能夠成功地訓(xùn)練并得到更好的結(jié)果。再后來(lái),發(fā)現(xiàn)直接使用BP算法進(jìn)行監(jiān)督訓(xùn)練就能在很多很多問(wèn)題上得到非常好的結(jié)果。那么為什么90年代的時(shí)候沒(méi)有成功呢?一個(gè)是當(dāng)時(shí)訓(xùn)練數(shù)據(jù)相對(duì)很少,而且當(dāng)時(shí)的機(jī)器訓(xùn)練起來(lái)很慢;另外一個(gè)是當(dāng)時(shí)訓(xùn)練優(yōu)化方法不太先進(jìn),所以有時(shí)在訓(xùn)練的時(shí)候梯度會(huì)出一些問(wèn)題。

干貨 | 算法工程師入門(mén)第一期——羅恒講深度學(xué)習(xí)

上面的圖是一個(gè)四隱藏層的神經(jīng)網(wǎng)絡(luò)訓(xùn)練在MNIST上面(激活函數(shù)是tanh),大家可以看到訓(xùn)練一開(kāi)始,最頂層的神經(jīng)元的激活值迅速減小,那么意味著從這一層往后傳遞的梯度也會(huì)迅速減小,同時(shí)也可以觀察到loss會(huì)基本保持不變(最后一層的激活函數(shù)接近0,那么無(wú)論什么樣的輸入到這一層之后都差不多,自然也就無(wú)法正確分類(lèi)降低loss)。

但是隨著訓(xùn)練的進(jìn)行,頂層的激活又從0開(kāi)始慢慢變大,loss最后又開(kāi)始降。也就是在優(yōu)化的時(shí)候,本來(lái)以為是掉到某一個(gè)坑里(局部極?。瑹o(wú)論把w怎么改變,你的loss都沒(méi)辦法降下來(lái)。但實(shí)際情況是你在一個(gè)很平的高原上,你沿各個(gè)方向走,這個(gè)loss都差不多。現(xiàn)在我們知道使用適當(dāng)?shù)膮?shù)初始化、使用沒(méi)有飽和的激活函數(shù)(如ReLU)、使用Batch Normalization都可以、使用一些自適應(yīng)學(xué)習(xí)率方法(如Adam,RMSProp)都可以緩解上面這種情況,當(dāng)然更重要的一點(diǎn)是使用GPU。

歷史講完了,接下來(lái)講講算法工程師日常工作面臨的問(wèn)題。我有一堆數(shù)據(jù),質(zhì)量差不多,我要拿到這些數(shù)據(jù)去訓(xùn)練一個(gè)模型,讓這個(gè)模型能夠投入使用。至于訓(xùn)練模型,我們現(xiàn)在工具已經(jīng)很完備了,數(shù)據(jù)整理好之后梳理好命令,機(jī)器去跑,拿到一個(gè)結(jié)果,就最好了。但通常呢,會(huì)發(fā)現(xiàn)結(jié)果不好,結(jié)果不好有兩種情況,一種是我剛才說(shuō)的,模型在訓(xùn)練集上表現(xiàn)不好,也就是對(duì)應(yīng)我們要講的第一個(gè)問(wèn)題,優(yōu)化問(wèn)題。也就是你拿到一個(gè)數(shù)據(jù),你第一件事情你不要考慮測(cè)試集,你就考慮訓(xùn)練集,我要讓我這個(gè)模型在訓(xùn)練上能做的足夠好,所以這個(gè)實(shí)際上是一個(gè)優(yōu)化問(wèn)題。通常我們絕大多數(shù)困難都在這個(gè)問(wèn)題。

當(dāng)這個(gè)問(wèn)題解決之后,可能又開(kāi)始第二個(gè)問(wèn)題。就是我在訓(xùn)練集上做的很好,但是在驗(yàn)證集上做的不好,這個(gè)就是overfitting,overfitting有很多種情況,從學(xué)術(shù)上講比如說(shuō)訓(xùn)練數(shù)據(jù)中包含一些噪聲。我們?nèi)粘V挟?dāng)你發(fā)現(xiàn)你的loss很低,但是在你的驗(yàn)證集結(jié)果不好,通常是你的訓(xùn)練集和你的測(cè)試集不一樣。這個(gè)不一樣可能有很多種原因,比如是不同的時(shí)間采集的,采集數(shù)據(jù)的策略發(fā)生了變化等等。這時(shí)首先需要做的是通過(guò)可視化對(duì)數(shù)據(jù)的分布有直覺(jué)上的認(rèn)識(shí),解決數(shù)據(jù)本身的問(wèn)題。最簡(jiǎn)單的一種可視化辦法,比如說(shuō)你是一個(gè)二分類(lèi),你現(xiàn)在數(shù)據(jù)你就把它全部過(guò)一遍,二分類(lèi)只有一個(gè)輸出,每個(gè)訓(xùn)練的數(shù)據(jù)給它分一個(gè)數(shù),你把這個(gè)數(shù)從大到小排一遍,驗(yàn)證集也可以得到一個(gè)數(shù),也從大到小排一遍。

然后你就從大到小隨機(jī)抽一些采樣,就會(huì)發(fā)現(xiàn)你數(shù)據(jù)的問(wèn)題在哪。不斷地做這個(gè)過(guò)程,不斷地改進(jìn)新的數(shù)據(jù)集,這個(gè)將會(huì)是你的最大的收益。也就是改你的數(shù)據(jù)擴(kuò)大你的數(shù)據(jù)集,使你的數(shù)據(jù)覆蓋的種類(lèi)更全,收益可能是幾十個(gè)百分點(diǎn)的,而調(diào)整你的優(yōu)化策略可能只是幾個(gè)百分點(diǎn)的收益,正則化方法可能只是千分位上的收益。

所以,理解神經(jīng)網(wǎng)絡(luò)背后的優(yōu)化過(guò)程,理解你的數(shù)據(jù)才是最重要的。具體的可視化、數(shù)據(jù)采樣的方法往往需要結(jié)合問(wèn)題本身發(fā)揮創(chuàng)造力。當(dāng)訓(xùn)練、驗(yàn)證數(shù)據(jù)大致滿(mǎn)足需求之后,接下來(lái)要做的就是訓(xùn)練網(wǎng)絡(luò),不斷減小訓(xùn)練集上的loss。如今有大量的開(kāi)源工具,對(duì)于一些主流的任務(wù),通??梢苑奖愕恼业竭m合的網(wǎng)絡(luò)結(jié)構(gòu)以及相應(yīng)的超參數(shù)。

大家只要結(jié)合自己的計(jì)算資源上的限制對(duì)這些網(wǎng)絡(luò)做些適當(dāng)?shù)募舨镁涂梢?,這里就不展開(kāi)了。下面介紹一些訓(xùn)練過(guò)程中常見(jiàn)的情況以及如何調(diào)整。訓(xùn)練中常見(jiàn)的困難是loss不降,常見(jiàn)的情況是輸入數(shù)據(jù)從下往上傳輸?shù)臅r(shí)候,某一層的表示完全相同(比如某層的激活函數(shù)為0),這樣學(xué)習(xí)自然就無(wú)法進(jìn)行了。

因此在訓(xùn)練的過(guò)程中查看激活函數(shù)的相關(guān)統(tǒng)計(jì)信息是個(gè)好習(xí)慣。常見(jiàn)的情況,比如到softmax的連接矩陣w迅速變小,這有可能是由于數(shù)據(jù)類(lèi)別分布非常不均衡導(dǎo)致的,這時(shí)候做些采樣以及適當(dāng)改變mini-batch的大小可能會(huì)有緩解。除了考慮數(shù)據(jù)樣本的均衡之外,也可以適當(dāng)?shù)馗淖冞@層連接矩陣的參數(shù)初始化。當(dāng)網(wǎng)絡(luò)中間某層的激活函數(shù)總是輸出0,這種時(shí)候loss的下降也會(huì)停止。

這時(shí)候可以考慮幾個(gè)方面,首先在這個(gè)激活函數(shù)之前是否有Batch Normalization,如果沒(méi)有最好加上試試(對(duì)于現(xiàn)在的前向網(wǎng)絡(luò),最好保證除softmax之外的激活函數(shù)之前都有BN),如果有BN也可以進(jìn)一步檢查eps是否設(shè)的過(guò)大,可以適當(dāng)調(diào)小試試;其次也可以檢查一下是否ReLU造成的,這時(shí)候也可以試著改變這一層的bias和BN的beta的初始化(初始化成某個(gè)正數(shù),比如+1);第三,如果改變了原始的網(wǎng)絡(luò)結(jié)構(gòu),那么也最好避免表示的瓶頸(這一層的隱單元個(gè)數(shù)不要比之前層的隱單元個(gè)數(shù)少得過(guò)多)。

如果是從輸入開(kāi)始的第一層就激活為0,那么就要檢查數(shù)據(jù)的預(yù)處理和相應(yīng)參數(shù)初始化。一種很簡(jiǎn)便的方式,則是讓輸入數(shù)據(jù)先通過(guò)一個(gè)Batch Normalization層,然后再連接后面的w。訓(xùn)練集上的loss能夠正常的下降之后,那么接下來(lái)就需要看驗(yàn)證集上的表現(xiàn)了。如果我們是不計(jì)代價(jià)地獲得驗(yàn)證集的表現(xiàn),那么就像Yann LeCun給的建議一樣,首先應(yīng)當(dāng)通過(guò)不斷地增加網(wǎng)絡(luò)的大小使得出現(xiàn)overfitting(訓(xùn)練集的loss越來(lái)越低,而驗(yàn)證集的loss降低到某個(gè)程度之后不變甚至開(kāi)始變高)。

說(shuō)到這里,插一句。神經(jīng)網(wǎng)絡(luò)是非常靈活強(qiáng)大的模型,也就是說(shuō)只要模型的大小足夠,那么應(yīng)當(dāng)可以完美地?cái)M合訓(xùn)練數(shù)據(jù)。如果當(dāng)你發(fā)現(xiàn)沒(méi)有辦法完美擬合訓(xùn)練集,假如優(yōu)化過(guò)程沒(méi)有問(wèn)題,那么很大的可能性是訓(xùn)練數(shù)據(jù)中存在自相矛盾的數(shù)據(jù),比如同樣一張圖在訓(xùn)練集出現(xiàn)多次,并且每次的label又各自不同。語(yǔ)言模型往往很難完美擬合訓(xùn)練集也是類(lèi)似的原因,就是不同的詞卻有相同的(或極相似的的)上下文。提升驗(yàn)證集的效果最直接效果最好的辦法就是在訓(xùn)練集中增加更多的各式各樣的與驗(yàn)證集類(lèi)的數(shù)據(jù)。

這個(gè)聽(tīng)上去像廢話,這里強(qiáng)調(diào)一下是希望大家時(shí)刻記住條件允許的時(shí)候,這總是應(yīng)該最先考慮的努力方向;其次,依據(jù)關(guān)注的問(wèn)題不同,各式各樣的數(shù)據(jù)增強(qiáng)往往對(duì)結(jié)果也會(huì)帶來(lái)很大的提升。除去上面兩種,那么接下來(lái)可以考慮各種正則化方法。先講兩種比較容易被大家忽視的正則化。

首先,盡可能在每輪的訓(xùn)練中徹底地shuffle訓(xùn)練數(shù)據(jù),這會(huì)帶來(lái)一定的正則化效果(特別是在到處有Batch Normalization的網(wǎng)絡(luò),充分的shuffle可以避免某些數(shù)據(jù)總是出現(xiàn)在同一個(gè)mini-batch),其次,在訓(xùn)練效率和問(wèn)題本身允許的情況下,盡量嘗試更小的mini-batch。小的mini-batch可以使得sgd的過(guò)程中產(chǎn)生很多對(duì)模型推廣有益的噪聲。此外,dropout、weight decay都應(yīng)該嘗試,也可以適當(dāng)?shù)恼{(diào)整他們的參數(shù)。這些的調(diào)整,對(duì)于驗(yàn)證集的結(jié)果提升往往比較有限。

最后,對(duì)于那些離散的長(zhǎng)尾輸入數(shù)據(jù)(比如一些語(yǔ)言相關(guān)的輸入),也可以考慮在輸入層的參數(shù)上加入L1正則化。

-End-

雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知

干貨 | 算法工程師入門(mén)第一期——羅恒講深度學(xué)習(xí)

分享:
相關(guān)文章

地平線機(jī)器人技術(shù)

嵌入式人工智能全球領(lǐng)導(dǎo)者
當(dāng)月熱門(mén)文章
最新文章
請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶(hù)安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)