国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

提高深度學(xué)習(xí)性能的四種方式

JessYanCoding / 3915人閱讀

摘要:可以參見(jiàn)以下相關(guān)閱讀創(chuàng)造更多數(shù)據(jù)上一小節(jié)說(shuō)到了有了更多數(shù)據(jù),深度學(xué)習(xí)算法通常會(huì)變的更好。

導(dǎo)語(yǔ)

我經(jīng)常被問(wèn)到諸如如何從深度學(xué)習(xí)模型中得到更好的效果的問(wèn)題,類(lèi)似的問(wèn)題還有:

我如何提升準(zhǔn)確度

如果我的神經(jīng)網(wǎng)絡(luò)模型性能不佳,我能夠做什么?

對(duì)于這些問(wèn)題,我經(jīng)常這樣回答,“我并不知道確切的答案,但是我有很多思路”,接著我會(huì)列出了我所能想到的所有或許能夠給性能帶來(lái)提升的思路。

為避免一次次羅列出這樣一個(gè)簡(jiǎn)單的列表,我決定把所有想法詳細(xì)寫(xiě)在這篇博客里。

這些思路應(yīng)該是通用的,不僅能在深度學(xué)習(xí)領(lǐng)域幫助你,還能適用于任何機(jī)器學(xué)習(xí)算法。

這篇博文略長(zhǎng),你可以將其加入書(shū)簽(之后再看)。

如何提升深度學(xué)習(xí)性能?

照片來(lái)源:Pedro Ribeiro Sim?es?

提升算法性能思路

這個(gè)列表里提到的思路并完全,但是一個(gè)好的開(kāi)始。?

我的目的是給出很多可以嘗試的思路,希望其中的一或兩個(gè)你之前沒(méi)有想到。你經(jīng)常只需要一個(gè)好的想法就能得到性能提升。

如果你能從其中一個(gè)思路中得到結(jié)果,請(qǐng)?jiān)谠u(píng)論區(qū)告訴我。我很高興能得知這些好消息。

如果你有更多的想法,或者是所列思路的拓展,也請(qǐng)告訴我,我和其他讀者都將受益!有時(shí)候僅僅是一個(gè)想法或許就能使他人得到突破。

我將此博文分為四個(gè)部分:?

1. 通過(guò)數(shù)據(jù)提升性能?

2. 通過(guò)算法提升性能?

3. 通過(guò)算法調(diào)參提升性能?

4. 通過(guò)嵌套模型提升性能

通常來(lái)講,隨著列表自上而下,性能的提升也將變小。例如,對(duì)問(wèn)題進(jìn)行新的架構(gòu)或者獲取更多的數(shù)據(jù),通常比調(diào)整最優(yōu)算法的參數(shù)能帶來(lái)更好的效果。雖然并不總是這樣,但是通常來(lái)講是的。

我已經(jīng)把相應(yīng)的鏈接加入了博客的教程中,相應(yīng)網(wǎng)站的問(wèn)題中,以及經(jīng)典的Neural Net FAQ中。

部分思路只適用于人工神經(jīng)網(wǎng)絡(luò),但是大部分是通用的。通用到足夠你用來(lái)配合其他技術(shù)來(lái)碰撞出提升模型性能的方法。

OK,現(xiàn)在讓我們開(kāi)始吧。

1. 通過(guò)數(shù)據(jù)提升性能

對(duì)你的訓(xùn)練數(shù)據(jù)和問(wèn)題定義進(jìn)行適當(dāng)改變,你能得到很大的性能提升。或許是較大的性能提升。

以下是我將要提到的思路:

獲取更多數(shù)據(jù)

創(chuàng)造更多數(shù)據(jù)

重放縮你的數(shù)據(jù)

轉(zhuǎn)換你的數(shù)據(jù)

特征選取

重架構(gòu)你的問(wèn)題

1) 獲取更多數(shù)據(jù)

你能獲取更多訓(xùn)練數(shù)據(jù)嗎??

你的模型的質(zhì)量通常受到你的訓(xùn)練數(shù)據(jù)質(zhì)量的限制。為了得到較好的模型,你首先應(yīng)該想辦法獲得較好的數(shù)據(jù)。你也想盡可能多的獲得那些較好的數(shù)據(jù)。

有更多的數(shù)據(jù),深度學(xué)習(xí)和其他現(xiàn)代的非線(xiàn)性機(jī)器學(xué)習(xí)技術(shù)有更全的學(xué)習(xí)源,能學(xué)得更好,深度學(xué)習(xí)尤為如此。這也是機(jī)器學(xué)習(xí)對(duì)大家充滿(mǎn)吸引力的很大一個(gè)原因(世界到處都是數(shù)據(jù))。如下圖所示:

為什么選擇深度學(xué)習(xí)??

圖片由Andrew Ng提供,版權(quán)所有?

更多的數(shù)據(jù)并不是總是有用,但是確實(shí)有幫助。于我而言,如果可以,我會(huì)選擇獲取更多的數(shù)據(jù)。

可以參見(jiàn)以下相關(guān)閱讀:?

Datasets Over Algorithms(www.edge.org/response-detail/26587)

2) 創(chuàng)造更多數(shù)據(jù)

上一小節(jié)說(shuō)到了有了更多數(shù)據(jù),深度學(xué)習(xí)算法通常會(huì)變的更好。有些時(shí)候你可能無(wú)法合理地獲取更多數(shù)據(jù),那你可以試試創(chuàng)造更多數(shù)據(jù)。

如果你的數(shù)據(jù)是數(shù)值型向量,可以隨機(jī)構(gòu)造已有向量的修改版本。

如果你的數(shù)據(jù)是圖片,可以隨機(jī)構(gòu)造已有圖片的修改版本(平移、截取、旋轉(zhuǎn)等)。

如果你的數(shù)據(jù)是文本,類(lèi)似的操作……

這通常被稱(chēng)作數(shù)據(jù)擴(kuò)增(data augmentation)或者數(shù)據(jù)生成(data generation)。

你可以利用一個(gè)生成模型。你也可以用一些簡(jiǎn)單的技巧。例如,針對(duì)圖片數(shù)據(jù),你可以通過(guò)隨機(jī)地平移或旋轉(zhuǎn)已有圖片獲取性能的提升。如果新數(shù)據(jù)中包含了這種轉(zhuǎn)換,則提升了模型的泛化能力。

這也與增加噪聲是相關(guān)的,我們習(xí)慣稱(chēng)之為增加擾動(dòng)。它起到了與正則化方法類(lèi)似的作用,即抑制訓(xùn)練數(shù)據(jù)的過(guò)擬合。

以下是相關(guān)閱讀:

Image Augmentation for Deep Learning With Keras(http://machinelearningmastery.com/image-augmentation-deep-learning-keras/)

What is jitter? (Training with noise)(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_jitter)

3) 重縮放(rescale)你的數(shù)據(jù)

這是一個(gè)快速獲得性能提升的方法。?

當(dāng)應(yīng)用神經(jīng)網(wǎng)絡(luò)時(shí),一個(gè)傳統(tǒng)的經(jīng)驗(yàn)法則是:重縮放(rescale)你的數(shù)據(jù)至激活函數(shù)的邊界。

如果你在使用sigmoid激活函數(shù),重縮放你的數(shù)據(jù)到0和1的區(qū)間里。如果你在使用雙曲正切(tanh)激活函數(shù),重縮放數(shù)據(jù)到-1和1的區(qū)間里。

這種方法可以被應(yīng)用到輸入數(shù)據(jù)(x)和輸出數(shù)據(jù)(y)。例如,如果你在輸出層使用sigmoid函數(shù)去預(yù)測(cè)二元分類(lèi)的結(jié)果,應(yīng)當(dāng)標(biāo)準(zhǔn)化y值,使之成為二元的。如果你在使用softmax函數(shù),你依舊可以通過(guò)標(biāo)準(zhǔn)化y值來(lái)獲益。

這依舊是一個(gè)好的經(jīng)驗(yàn)法則,但是我想更深入一點(diǎn)。我建議你可以參考下述方法來(lái)創(chuàng)造一些訓(xùn)練數(shù)據(jù)的不同的版本:

歸一化到0和1的區(qū)間。

重放縮到-1和1的區(qū)間

標(biāo)準(zhǔn)化(譯者注:標(biāo)準(zhǔn)化數(shù)據(jù)使之成為零均值,單位標(biāo)準(zhǔn)差)

然后對(duì)每一種方法,評(píng)估你的模型的性能,選取較好的進(jìn)行使用。如果你改變了你的激活函數(shù),重復(fù)這一過(guò)程。

在神經(jīng)網(wǎng)絡(luò)中,大的數(shù)值累積效應(yīng)(疊加疊乘)并不是好事,除上述方法之外,還有其他的方法來(lái)控制你的神經(jīng)網(wǎng)絡(luò)中數(shù)據(jù)的數(shù)值大小,譬如歸一化激活函數(shù)和權(quán)重,我們會(huì)在以后討論這些技術(shù)。

以下為相關(guān)閱讀:

Should I standardize the input variables (column vectors)?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_std)

How To Prepare Your Data For Machine Learning in Python with Scikit-Learn(http://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/)

4) 數(shù)據(jù)變換

這里的數(shù)據(jù)變換與上述的重縮放方法類(lèi)似,但需要更多工作。?

你必須非常熟悉你的數(shù)據(jù)。通過(guò)可視化來(lái)考察離群點(diǎn)。

猜測(cè)每一列數(shù)據(jù)的單變量分布。

列數(shù)據(jù)看起來(lái)像偏斜的高斯分布嗎?考慮用Box-Cox變換調(diào)整偏態(tài)。

列數(shù)據(jù)看起來(lái)像指數(shù)分布嗎?考慮用對(duì)數(shù)變換。

列數(shù)據(jù)看起來(lái)有一些特征,但是它們被一些明顯的東西遮蓋了,嘗試取平方或者開(kāi)平方根來(lái)轉(zhuǎn)換數(shù)據(jù)

你能離散化一個(gè)特征或者以某種方式組合特征,來(lái)更好地突出一些特征嗎?

依靠你的直覺(jué),嘗試以下方法。

你能利用類(lèi)似PCA的投影方法來(lái)預(yù)處理數(shù)據(jù)嗎?

你能綜合多維特征至一個(gè)單一數(shù)值(特征)嗎?

你能用一個(gè)新的布爾標(biāo)簽去發(fā)現(xiàn)問(wèn)題中存在一些有趣的方面嗎?

你能用其他方法探索出目前場(chǎng)景下的其他特殊結(jié)構(gòu)嗎?

神經(jīng)網(wǎng)層擅長(zhǎng)特征學(xué)習(xí)(feature engineering)。它(自己)可以做到這件事。但是如果你能更好的發(fā)現(xiàn)問(wèn)題到網(wǎng)絡(luò)中的結(jié)構(gòu),神經(jīng)網(wǎng)層會(huì)學(xué)習(xí)地更快。你可以對(duì)你的數(shù)據(jù)就不同的轉(zhuǎn)換方式進(jìn)行抽樣調(diào)查,或者嘗試特定的性質(zhì),來(lái)看哪些有用,哪些沒(méi)用。

以下是相關(guān)閱讀:

How to Define Your Machine Learning Problem(http://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)

Discover Feature Engineering, How to Engineer Features and How to Get Good at It(http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/)

How To Prepare Your Data For Machine Learning in Python with Scikit-Learn(http://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/)

5) 特征選擇

一般說(shuō)來(lái),神經(jīng)網(wǎng)絡(luò)對(duì)不相關(guān)的特征是具有魯棒的(校對(duì)注:即不相關(guān)的特征不會(huì)很大影響神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和效果)。它們會(huì)用近似于0的權(quán)重來(lái)弱化那些沒(méi)有預(yù)測(cè)能力的特征的貢獻(xiàn)。

盡管如此,這些無(wú)關(guān)的數(shù)據(jù)特征,在訓(xùn)練周期依舊要耗費(fèi)大量的資源。所以你能去除數(shù)據(jù)里的一些特征嗎?

有許多特征選擇的方法和特征重要性的方法,這些方法能夠給你提供思路,哪些特征該保留,哪些特征該剔除。最簡(jiǎn)單的方式就是對(duì)比所有特征和部分特征的效果。?

同樣的,如果你有時(shí)間,我建議在同一個(gè)網(wǎng)絡(luò)中嘗試選擇不同的視角來(lái)看待你的問(wèn)題,評(píng)估它們,來(lái)看看分別有怎樣的性能。

或許你利用更少的特征就能達(dá)到同等甚至更好的性能。而且,這將使模型變得更快!

或許所有的特征選擇方法都剔除了同樣的特征子集。很好,這些方法在沒(méi)用的特征上達(dá)成了一致。

或許篩選過(guò)后的特征子集,能帶給特征工程的新思路。

以下是相關(guān)閱讀:

An Introduction to Feature Selection(http://machinelearningmastery.com/an-introduction-to-feature-selection/)

Feature Selection For Machine Learning in Python(http://machinelearningmastery.com/feature-selection-machine-learning-python/)

6) 重新架構(gòu)你的問(wèn)題

有時(shí)候要試試從你當(dāng)前定義的問(wèn)題中跳出來(lái),想想你所收集到的觀(guān)察值是定義你問(wèn)題的方式嗎?或許存在其他方法?;蛟S其他構(gòu)建問(wèn)題的方式能夠更好地揭示待學(xué)習(xí)問(wèn)題的結(jié)構(gòu)。

我真的很喜歡這個(gè)嘗試,因?yàn)樗仁鼓愦蜷_(kāi)自己的思路。這確實(shí)很難,尤其是當(dāng)你已經(jīng)對(duì)當(dāng)前的方法投入了大量的時(shí)間和金錢(qián)時(shí)。

但是咱們這么想想,即使你列出了3-5個(gè)可供替代的建構(gòu)方案,而且最終還是放棄了它們,但這至少說(shuō)明你對(duì)當(dāng)前的方案更加自信了。

看看能夠在一個(gè)時(shí)間窗(時(shí)間周期)內(nèi)對(duì)已有的特征/數(shù)據(jù)做一個(gè)合并。

或許你的分類(lèi)問(wèn)題可以成為一個(gè)回歸問(wèn)題(有時(shí)候是回歸到分類(lèi))。

或許你的二元輸出可以變成softmax輸出?

或許你可以轉(zhuǎn)而對(duì)子問(wèn)題進(jìn)行建模。

仔細(xì)思考你的問(wèn)題,較好在你選定工具之前就考慮用不同方法構(gòu)建你的問(wèn)題,因?yàn)榇藭r(shí)你對(duì)解決方案并沒(méi)有花費(fèi)太多的投入。除此之外,如果你在某個(gè)問(wèn)題上卡住了,這樣一個(gè)簡(jiǎn)單的嘗試能釋放更多新的想法。

而且,這并不代表你之前的工作白干了,關(guān)于這點(diǎn)你可以看看后續(xù)的模型嵌套部分。

以下為相關(guān)閱讀:

How to Define Your Machine Learning Problem(http://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)

2. 通過(guò)算法提升性能

機(jī)器學(xué)習(xí)當(dāng)然是用算法解決問(wèn)題。

所有的理論和數(shù)學(xué)都是描繪了應(yīng)用不同的方法從數(shù)據(jù)中學(xué)習(xí)一個(gè)決策過(guò)程(如果我們這里只討論預(yù)測(cè)模型)。

你已經(jīng)選擇了深度學(xué)習(xí)來(lái)解釋你的問(wèn)題。但是這真的是較好的選擇嗎?在這一節(jié)中,我們會(huì)在深入到如何較大地發(fā)掘你所選擇的深度學(xué)習(xí)方法之前,接觸一些算法選擇上的思路。

下面是一個(gè)簡(jiǎn)要列表:

對(duì)算法進(jìn)行抽樣調(diào)查

借鑒已有文獻(xiàn)

重采樣方法

下面我解釋下上面提到的幾個(gè)方法。

1) 對(duì)算法進(jìn)行抽樣調(diào)查

其實(shí)你事先無(wú)法知道,針對(duì)你的問(wèn)題哪個(gè)算法是最優(yōu)的。如果你知道,你可能就不需要機(jī)器學(xué)習(xí)了。那有沒(méi)有什么數(shù)據(jù)(辦法)可以證明你選擇的方法是正確的?

讓我們來(lái)解決這個(gè)難題。當(dāng)從所有可能的問(wèn)題中平均來(lái)看各算法的性能時(shí),沒(méi)有哪個(gè)算法能夠永遠(yuǎn)勝過(guò)其他算法。所有的算法都是平等的,下面是在no free lunch theorem中的一個(gè)總結(jié)。

或許你選擇的算法不是針對(duì)你的問(wèn)題最優(yōu)的那個(gè)?

我們不是在嘗試解決所有問(wèn)題,算法世界中有很多新熱的方法,可是它們可能并不是針對(duì)你數(shù)據(jù)集的最優(yōu)算法。

我的建議是收集(證據(jù))數(shù)據(jù)指標(biāo)。接受更好的算法或許存在這一觀(guān)點(diǎn),并且給予其他算法在解決你的問(wèn)題上“公平競(jìng)爭(zhēng)”的機(jī)會(huì)。

抽樣調(diào)查一系列可行的方法,來(lái)看看哪些還不錯(cuò),哪些不理想。

首先嘗試評(píng)估一些線(xiàn)性方法,例如邏輯回歸(logistic regression)和線(xiàn)性判別分析(linear discriminate analysis)。

評(píng)估一些樹(shù)類(lèi)模型,例如CART, 隨機(jī)森林(Random Forest)和Gradient Boosting。

評(píng)估一些實(shí)例方法,例如支持向量機(jī)(SVM)和K-近鄰(kNN)。

評(píng)估一些其他的神經(jīng)網(wǎng)絡(luò)方法,例如LVQ, MLP, CNN, LSTM, hybrids等

選取性能較好的算法,然后通過(guò)進(jìn)一步的調(diào)參和數(shù)據(jù)準(zhǔn)備來(lái)提升。尤其注意對(duì)比一下深度學(xué)習(xí)和其他常規(guī)機(jī)器學(xué)習(xí)方法,對(duì)上述結(jié)果進(jìn)行排名,比較他們的優(yōu)劣。

很多時(shí)候你會(huì)發(fā)現(xiàn)在你的問(wèn)題上可以不用深度學(xué)習(xí),而是使用一些更簡(jiǎn)單,訓(xùn)練速度更快,甚至是更容易理解的算法。

以下為相關(guān)閱讀:

A Data-Driven Approach to Machine Learning(http://machinelearningmastery.com/a-data-driven-approach-to-machine-learning/)

Why you should be Spot-Checking Algorithms on your Machine Learning Problems(http://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/)

Spot-Check Classification Machine Learning Algorithms in Python with scikit-learn(http://machinelearningmastery.com/spot-check-classification-machine-learning-algorithms-python-scikit-learn/)

2) 借鑒已有文獻(xiàn)

方法選擇的一個(gè)捷徑是借鑒已有的文獻(xiàn)資料??赡苡腥艘呀?jīng)研究過(guò)與你的問(wèn)題相關(guān)的問(wèn)題,你可以看看他們用的什么方法。

你可以閱讀論文,書(shū)籍,博客,問(wèn)答網(wǎng)站,教程,以及任何能在谷歌搜索到的東西。

寫(xiě)下所有的想法,然后用你的方式把他們研究一遍。

這不是復(fù)制別人的研究,而是啟發(fā)你想出新的想法,一些你從沒(méi)想到但是卻有可能帶來(lái)性能提升的想法。

發(fā)表的研究通常都是非常贊的。世界上有非常多聰明的人,寫(xiě)了很多有趣的東西。你應(yīng)當(dāng)好好挖掘這個(gè)“圖書(shū)館”,找到你想要的東西。

以下為相關(guān)閱讀:

How to Research a Machine Learning Algorithm(http://machinelearningmastery.com/how-to-research-a-machine-learning-algorithm/)

Google Scholar(http://scholar.google.com/)

3) 重采樣方法

你必須知道你的模型效果如何。你對(duì)模型性能的估計(jì)可靠嗎?

深度學(xué)習(xí)模型在訓(xùn)練階段非常緩慢。這通常意味著,我們無(wú)法用一些常用的方法,例如k層交叉驗(yàn)證,去估計(jì)模型的性能。

或許你在使用一個(gè)簡(jiǎn)單的訓(xùn)練集/測(cè)試集分割,這是常規(guī)套路。如果是這樣,你需要確保這種分割針對(duì)你的問(wèn)題具有代表性。單變量統(tǒng)計(jì)和可視化是一個(gè)好的開(kāi)始。

或許你能利用硬件來(lái)加速估計(jì)的過(guò)程。例如,如果你有集群或者AWS云端服務(wù)(Amazon Web Services)賬號(hào),你可以并行地訓(xùn)練n個(gè)模型,然后獲取結(jié)果的均值和標(biāo)準(zhǔn)差來(lái)得到更魯棒的估計(jì)。

或許你可以利用hold-out驗(yàn)證方法來(lái)了解模型在訓(xùn)練后的性能(這在早停法(early stopping)中很有用,后面會(huì)講到)。

或許你可以先隱藏一個(gè)完全沒(méi)用過(guò)的驗(yàn)證集,等到你已經(jīng)完成模型選擇之后再使用它。

而有時(shí)候另外的方式,或許你能夠讓數(shù)據(jù)集變得更小,以及使用更強(qiáng)的重采樣方法。

有些情況下你會(huì)發(fā)現(xiàn)在訓(xùn)練集的一部分樣本上訓(xùn)練得到的模型的性能,和在整個(gè)數(shù)據(jù)集上訓(xùn)練得到的模型的性能有很強(qiáng)的相關(guān)性。也許你可以先在小數(shù)據(jù)集上完成模型選擇和參數(shù)調(diào)優(yōu),然后再將最終的方法擴(kuò)展到全部數(shù)據(jù)集上。

或許你可以用某些方式限制數(shù)據(jù)集,只取一部分樣本,然后用它進(jìn)行全部的建模過(guò)程。

以下為相關(guān)閱讀:

Evaluate the Performance Of Deep Learning Models in Keras(http://machinelearningmastery.com/evaluate-performance-deep-learning-models-keras/)

Evaluate the Performance of Machine Learning Algorithms in Python using Resampling(http://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/)

3. 通過(guò)算法調(diào)參提升性能

這通常是工作的關(guān)鍵所在。你經(jīng)常可以通過(guò)抽樣調(diào)查快速地發(fā)現(xiàn)一個(gè)或兩個(gè)性能優(yōu)秀的算法。但是如果想得到最優(yōu)的算法可能需要幾天,幾周,甚至幾個(gè)月。

為了獲得更優(yōu)的模型,以下是對(duì)神經(jīng)網(wǎng)絡(luò)算法進(jìn)行參數(shù)調(diào)優(yōu)的幾點(diǎn)思路:

診斷(Diagnostics)

權(quán)重初始化(Weight Initialization)

學(xué)習(xí)速率(Learning Rate)

激活函數(shù)

網(wǎng)絡(luò)拓?fù)洌∟etwork Topology)

批次和周期(Batches and Epochs)

正則化

優(yōu)化和損失

早停法

你可能需要訓(xùn)練一個(gè)給定“參數(shù)配置”的神經(jīng)網(wǎng)絡(luò)模型很多次(3-10次甚至更多),才能得到一個(gè)估計(jì)性能不錯(cuò)的參數(shù)配置。這一點(diǎn)幾乎適用于這一節(jié)中你能夠調(diào)參的所有方面。

關(guān)于超參數(shù)優(yōu)化請(qǐng)參閱博文:

How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras(http://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/)

1) 診斷

如果你能知道為什么你的模型性能不再提高了,你就能獲得擁有更好性能的模型。?

你的模型是過(guò)擬合還是欠擬合?永遠(yuǎn)牢記這個(gè)問(wèn)題。永遠(yuǎn)。?

模型總是會(huì)遇到過(guò)擬合或者欠擬合,只是程度不同罷了。一個(gè)快速了解模型學(xué)習(xí)行為的方法是,在每個(gè)周期,評(píng)估模型在訓(xùn)練集和驗(yàn)證集上的表現(xiàn),并作出圖表。

如果訓(xùn)練集上的模型總是優(yōu)于驗(yàn)證集上的模型,你可能遇到了過(guò)擬合,你可以使用諸如正則化的方法。

如果訓(xùn)練集和驗(yàn)證集上的模型都很差,你可能遇到了欠擬合,你可以提升網(wǎng)絡(luò)的容量,以及訓(xùn)練更多或者更久。

如果有一個(gè)拐點(diǎn)存在,在那之后訓(xùn)練集上的模型開(kāi)始優(yōu)于驗(yàn)證集上的模型,你可能需要使用早停法。

經(jīng)常畫(huà)一畫(huà)這些圖表,學(xué)習(xí)它們來(lái)了解不同的方法,你能夠提升模型的性能。這些圖表可能是你能創(chuàng)造的最有價(jià)值的(模型狀態(tài))診斷信息。

另一個(gè)有用的診斷是網(wǎng)絡(luò)模型判定對(duì)和判定錯(cuò)的觀(guān)察值。

對(duì)于難以訓(xùn)練的樣本,或許你需要更多的數(shù)據(jù)。

或許你應(yīng)該剔除訓(xùn)練集中易于建模的多余的樣本。

也許可以嘗試對(duì)訓(xùn)練集劃分不同的區(qū)域,在特定區(qū)域中用更專(zhuān)長(zhǎng)的模型。

以下為相關(guān)閱讀:

Display Deep Learning Model Training History in Keras(http://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/)

Overfitting and Underfitting With Machine Learning Algorithms(http://machinelearningmastery.com/overfitting-and-underfitting-with-machine-learning-algorithms/)

2) 權(quán)重初始化

經(jīng)驗(yàn)法則通常是:用小的隨機(jī)數(shù)進(jìn)行初始化。

在實(shí)踐中,這可能依舊效果不錯(cuò),但是對(duì)于你的網(wǎng)絡(luò)來(lái)說(shuō)是較佳的嗎?對(duì)于不同的激活函數(shù)也有一些啟發(fā)式的初始化方法,但是在實(shí)踐應(yīng)用中并沒(méi)有太多不同。

固定你的網(wǎng)絡(luò),然后嘗試多種初始化方式。

記住,權(quán)重是你的模型真正的參數(shù),你需要找到他們。有很多組權(quán)重都能有不錯(cuò)的性能表現(xiàn),但我們要盡量找到較好的。

嘗試所有不同的初始化方法,考察是否有一種方法在其他情況不變的情況下(效果)更優(yōu)。

嘗試用無(wú)監(jiān)督的方法,例如自動(dòng)編碼(autoencoder),來(lái)進(jìn)行預(yù)先學(xué)習(xí)。

嘗試使用一個(gè)已經(jīng)存在的模型,只是針對(duì)你的問(wèn)題重新訓(xùn)練輸入層和輸出層(遷移學(xué)習(xí)(transfer learning))

需要提醒的一點(diǎn)是,改變權(quán)重初始化方法和激活函數(shù),甚至優(yōu)化函數(shù)/損失函數(shù)緊密相關(guān)。

以下為相關(guān)閱讀:

Initialization of deep networks(http://deepdish.io/2015/02/24/network-initialization/)

3) 學(xué)習(xí)率

調(diào)整學(xué)習(xí)率很多時(shí)候也是行之有效的時(shí)段。

以下是可供探索的一些想法:

實(shí)驗(yàn)很大和很小的學(xué)習(xí)率

格點(diǎn)搜索文獻(xiàn)里常見(jiàn)的學(xué)習(xí)速率值,考察你能學(xué)習(xí)多深的網(wǎng)絡(luò)。

嘗試隨周期遞減的學(xué)習(xí)率

嘗試經(jīng)過(guò)固定周期數(shù)后按比例減小的學(xué)習(xí)率。

嘗試增加一個(gè)動(dòng)量項(xiàng)(momentum term),然后對(duì)學(xué)習(xí)速率和動(dòng)量同時(shí)進(jìn)行格點(diǎn)搜索。

越大的網(wǎng)絡(luò)需要越多的訓(xùn)練,反之亦然。如果你添加了太多的神經(jīng)元和層數(shù),適當(dāng)提升你的學(xué)習(xí)速率。同時(shí)學(xué)習(xí)率需要和訓(xùn)練周期,batch size大小以及優(yōu)化方法聯(lián)系在一起考慮。

以下為相關(guān)閱讀:

Using Learning Rate Schedules for Deep Learning Models in Python with Keras(http://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/)

What learning rate should be used for backprop?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_learn_rate)

4) 激活函數(shù)

你或許應(yīng)該使用修正激活函數(shù)(rectifier activation functions)。他們也許能提供更好的性能。

在這之前,最早的激活函數(shù)是sigmoid和tanh,之后是softmax, 線(xiàn)性激活函數(shù),或者輸出層上的sigmoid函數(shù)。我不建議嘗試更多的激活函數(shù),除非你知道你自己在干什么。

嘗試全部三種激活函數(shù),并且重縮放你的數(shù)據(jù)以滿(mǎn)足激活函數(shù)的邊界。

顯然,你想要為輸出的形式選擇正確的傳遞函數(shù),但是可以考慮一下探索不同表示。例如,把在二元分類(lèi)問(wèn)題上使用的sigmoid函數(shù)切換到回歸問(wèn)題上使用的線(xiàn)性函數(shù),然后后置處理你的輸出。這可能需要改變損失函數(shù)使之更合適。詳情參閱數(shù)據(jù)轉(zhuǎn)換那一節(jié)。

以下為相關(guān)閱讀:

Why use activation functions?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_act)

5) 網(wǎng)絡(luò)拓?fù)?/p>

網(wǎng)絡(luò)結(jié)構(gòu)的改變能帶來(lái)好處。

你需要多少層以及多少個(gè)神經(jīng)元?抱歉沒(méi)有人知道。不要問(wèn)這種問(wèn)題...

那怎么找到適用你的問(wèn)題的配置呢?去實(shí)驗(yàn)吧。

嘗試一個(gè)隱藏層和許多神經(jīng)元(廣度模型)。

嘗試一個(gè)深的網(wǎng)絡(luò),但是每層只有很少的神經(jīng)元(深度模型)。

嘗試上述兩種方法的組合。

借鑒研究問(wèn)題與你的類(lèi)似的論文里面的結(jié)構(gòu)。

嘗試拓?fù)淠J剑ㄉ瘸觯╢an out)然后扇入(fan in))和書(shū)籍論文里的經(jīng)驗(yàn)法則(下有鏈接)

選擇總是很困難的。通常說(shuō)來(lái)越大的網(wǎng)絡(luò)有越強(qiáng)的代表能力,或許你需要它。越多的層數(shù)可以提供更強(qiáng)的從數(shù)據(jù)中學(xué)到的抽象特征的能力?;蛟S需要它。

深層的神經(jīng)網(wǎng)絡(luò)需要更多的訓(xùn)練,無(wú)論是訓(xùn)練周期還是學(xué)習(xí)率,都應(yīng)該相應(yīng)地進(jìn)行調(diào)整。

以下為相關(guān)閱讀:?

這些鏈接會(huì)給你很多啟發(fā)該嘗試哪些事情,至少對(duì)我來(lái)說(shuō)是的。

How many hidden layers should I use?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hl)

How many hidden units should I use?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hu)

6) Batches和周期

batch size大小會(huì)決定最后的梯度,以及更新權(quán)重的頻度。一個(gè)周期(epoch)指的是神經(jīng)網(wǎng)絡(luò)看一遍全部訓(xùn)練數(shù)據(jù)的過(guò)程。

你是否已經(jīng)試驗(yàn)了不同的批次batch size和周期數(shù)??

之前,我們已經(jīng)討論了學(xué)習(xí)率,網(wǎng)絡(luò)大小和周期之間的關(guān)系。

在很深的網(wǎng)絡(luò)結(jié)構(gòu)里你會(huì)經(jīng)??吹剑盒〉腷atch size配以大的訓(xùn)練周期。

下面這些或許能有助于你的問(wèn)題,也或許不能。你要在自己的數(shù)據(jù)上嘗試和觀(guān)察。

嘗試選取與訓(xùn)練數(shù)據(jù)同大小的batch size,但注意一下內(nèi)存(批次學(xué)習(xí)(batch learning))

嘗試選取1作為batch size(在線(xiàn)學(xué)習(xí)(online learning))

嘗試用格點(diǎn)搜索不同的小的batch size(8,16,32,…)

分別嘗試訓(xùn)練少量周期和大量周期。

考慮一個(gè)接近無(wú)窮的周期值(持續(xù)訓(xùn)練),去記錄到目前為止能得到的較佳的模型。

一些網(wǎng)絡(luò)結(jié)構(gòu)對(duì)batch size更敏感。我知道多層感知器(Multilayer Perceptrons)通常對(duì)batch size是魯棒的,而LSTM和CNNs比較敏感,但是這只是一個(gè)說(shuō)法(僅供參考)。

以下為相關(guān)閱讀:

What are batch, incremental, on-line … learning?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_styles)

Intuitively, how does mini-batch size affect the performance of (stochastic) gradient descent?(https://www.quora.com/Intuitively-how-does-mini-batch-size-affect-the-performance-of-stochastic-gradient-descent)

7) 正則化

正則化是一個(gè)避免模型在訓(xùn)練集上過(guò)擬合的好方法。

神經(jīng)網(wǎng)絡(luò)里最熱的正則化技術(shù)是dropout方法,你是否試過(guò)?dropout方法在訓(xùn)練階段隨機(jī)地跳過(guò)一些神經(jīng)元,驅(qū)動(dòng)這一層其他的神經(jīng)元去捕捉松弛。簡(jiǎn)單而有效。你可以從dropout方法開(kāi)始。

格點(diǎn)搜索不同的丟失比例。

分別在輸入,隱藏層和輸出層中試驗(yàn)dropout方法

dropout方法也有一些拓展,比如你也可以嘗試drop connect方法。

也可以嘗試其他更傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)正則化方法,例如:

權(quán)重衰減(Weight decay)去懲罰大的權(quán)重

激活約束(Activation constraint)去懲罰大的激活值

你也可以試驗(yàn)懲罰不同的方面,或者使用不同種類(lèi)的懲罰/正則化(L1, L2, 或者二者同時(shí))

以下是相關(guān)閱讀:

Dropout Regularization in Deep Learning Models With Keras(http://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/)

What is Weight Decay?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_decay)

8) 優(yōu)化和損失

最常見(jiàn)是應(yīng)用隨機(jī)梯度下降法(stochastic gradient descent),但是現(xiàn)在有非常多的優(yōu)化器。你試驗(yàn)過(guò)不同的優(yōu)化(方法)過(guò)程嗎??

隨機(jī)梯度下降法是默認(rèn)的選擇。先好好利用它,配以不同的學(xué)習(xí)率和動(dòng)量。

許多更高級(jí)的優(yōu)化方法有更多的參數(shù),更復(fù)雜,也有更快的收斂速度。 好與壞,是不是需要用,取決于你的問(wèn)題。

為了更好的利用好一個(gè)給定的(優(yōu)化)方法,你真的需要弄明白每個(gè)參數(shù)的意義,然后針對(duì)你的問(wèn)題通過(guò)格點(diǎn)搜索不同的的取值。困難,消耗時(shí)間,但是值得。

我發(fā)現(xiàn)了一些更新更流行的方法,它們可以收斂的更快,并且針對(duì)一個(gè)給定網(wǎng)絡(luò)的容量提供了一個(gè)快速了解的方式,例如:

ADAM

RMSprop

你還可以探索其他優(yōu)化算法,例如,更傳統(tǒng)的(Levenberg-Marquardt)和不那么傳統(tǒng)的(genetic algorithms)。其他方法能夠?yàn)殡S機(jī)梯度下降法和其他類(lèi)似方法提供好的出發(fā)點(diǎn)去改進(jìn)。

要被優(yōu)化的損失函數(shù)與你要解決的問(wèn)題高度相關(guān)。然而,你通常還是有一些余地(可以做一些微調(diào),例如回歸問(wèn)題中的均方誤(MSE)和平均誤差(MAE)等),有時(shí)候變換損失函數(shù)還有可能獲得小的性能提升,這取決于你輸出數(shù)據(jù)的規(guī)模和使用的激活函數(shù)。

以下是相關(guān)閱讀:

An overview of gradient descent optimization algorithms(http://sebastianruder.com/optimizing-gradient-descent/)

What are conjugate gradients, Levenberg-Marquardt, etc.?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_numanal)

On Optimization Methods for Deep Learning, 2011 PDF(http://ai.stanford.edu/~ang/papers/icml11-OptimizationForDeepLearning.pdf)

9) Early Stopping/早停法

一旦訓(xùn)練過(guò)程中出現(xiàn)(驗(yàn)證集)性能開(kāi)始下降,你可以停止訓(xùn)練與學(xué)習(xí)。這可以節(jié)省很多時(shí)間,而且甚至可以讓你使用更詳盡的重采樣方法來(lái)評(píng)估你的模型的性能。

早停法是一種用來(lái)避免模型在訓(xùn)練數(shù)據(jù)上的過(guò)擬合的正則化方式,它需要你監(jiān)測(cè)模型在訓(xùn)練集以及驗(yàn)證集上每一輪的效果。一旦驗(yàn)證集上的模型性能開(kāi)始下降,訓(xùn)練就可以停止。

如果某個(gè)條件滿(mǎn)足(衡量準(zhǔn)確率的損失),你還可以設(shè)置檢查點(diǎn)(Checkpointing)來(lái)儲(chǔ)存模型,使得模型能夠繼續(xù)學(xué)習(xí)。檢查點(diǎn)使你能夠早停而非真正的停止訓(xùn)練,因此在最后,你將有一些模型可供選擇。

以下是相關(guān)閱讀:

How to Check-Point Deep Learning Models in Keras(http://machinelearningmastery.com/check-point-deep-learning-models-keras/)

What is early stopping?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_stop)

4. 通過(guò)嵌套模型提升性能

你可以組合多個(gè)模型的預(yù)測(cè)能力。剛才提到了算法調(diào)參可以提高最后的性能,調(diào)參之后這是下一個(gè)可以提升的大領(lǐng)域。

事實(shí)上,你可以經(jīng)常通過(guò)組合多個(gè)“足夠好的”模型來(lái)得到優(yōu)秀的預(yù)測(cè)能力,而不是通過(guò)組合多個(gè)高度調(diào)參的(脆弱的)模型。

你可以考慮以下三個(gè)方面的嵌套方式:

組合模型

組合視角

堆疊(Stacking)

1) 組合模型

有時(shí)候我們干脆不做模型選擇,而是直接組合它們。

如果你有多個(gè)不同的深度學(xué)習(xí)模型,在你的研究問(wèn)題上每一個(gè)都表現(xiàn)的還不錯(cuò),你可以通過(guò)取它們預(yù)測(cè)的平均值來(lái)進(jìn)行組合。

模型差異越大,最終效果越好。例如,你可以應(yīng)用非常不同的網(wǎng)絡(luò)拓?fù)浠蛘卟煌募夹g(shù)。

如果每個(gè)模型都效果不錯(cuò)但是不同的方法/方式,嵌套后的預(yù)測(cè)能力將更加魯棒。

每一次你訓(xùn)練網(wǎng)絡(luò),你初始化不同的權(quán)重,然后它會(huì)收斂到不同的最終權(quán)重。你可以多次重復(fù)這一過(guò)程去得到很多網(wǎng)絡(luò),然后把這些網(wǎng)絡(luò)的預(yù)測(cè)值組合在一起。

它們的預(yù)測(cè)將會(huì)高度相關(guān),但是在那些難以預(yù)測(cè)的特征上,它會(huì)給你一個(gè)意外的小提升。

以下是相關(guān)閱讀:

Ensemble Machine Learning Algorithms in Python with scikit-learn(http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/)

How to Improve Machine Learning Results(http://machinelearningmastery.com/how-to-improve-machine-learning-results/)

2) 組合視角

同上述類(lèi)似,但是從不同視角重構(gòu)你的問(wèn)題,訓(xùn)練你的模型。

同樣,目標(biāo)得到的是效果不錯(cuò)但是不同的模型(例如,不相關(guān)的預(yù)測(cè))。得到不同的模型的方法,你可以依賴(lài)我們?cè)跀?shù)據(jù)那一小節(jié)中羅列的那些非常不同的放縮和轉(zhuǎn)換方法。

你用來(lái)訓(xùn)練模型的轉(zhuǎn)換方法越不同,你構(gòu)建問(wèn)題的方式越不同,你的結(jié)果被提升的程度就越高。

簡(jiǎn)單使用預(yù)測(cè)的均值將會(huì)是一個(gè)好的開(kāi)始。

3) stacking/堆疊

你還可以學(xué)習(xí)如何較佳地組合多個(gè)模型的預(yù)測(cè)。這稱(chēng)作堆疊泛化(stacked generalization),或者簡(jiǎn)短來(lái)說(shuō)就叫堆疊。

通常上,你使用簡(jiǎn)單線(xiàn)性回歸方法就可以得到比取預(yù)測(cè)平均更好的結(jié)果,像正則化的回歸(regularized regression),就會(huì)學(xué)習(xí)如何給不同的預(yù)測(cè)模型賦權(quán)重?;€(xiàn)模型是通過(guò)取子模型的預(yù)測(cè)均值得到的,但是應(yīng)用學(xué)習(xí)了權(quán)重的模型會(huì)提升性能。

Stacked Generalization (Stacking)(http://machine-learning.martinsewell.com/ensembles/stacking/)

其余的可參考資源

別的地方有很多很好的資源,但是幾乎沒(méi)有能將所有想法串聯(lián)在一起的。如果你想深入研究,我列出了如下資源和相應(yīng)的博客,你能發(fā)現(xiàn)很多有趣的東西。

Neural Network FAQ(ftp://ftp.sas.com/pub/neural/FAQ.html)

How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras(http://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/)

Must Know Tips/Tricks in Deep Neural Networks(http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html)

How to increase validation accuracy with deep neural net?(http://stackoverflow.com/questions/37020754/how-to-increase-validation-accuracy-with-deep-neural-net)

后 記

這是一篇很長(zhǎng)的博客,我們講述了很多內(nèi)容。你并不需要去做所有事,也許這里面的某一點(diǎn)就足以給你好的想法去提升性能。簡(jiǎn)單說(shuō)來(lái)大概包括下面這些:

選取一個(gè)方向?

數(shù)據(jù)

算法

調(diào)參

嵌套模型

在某一方向里選取一種方法

在選取的方法中選取一件事情去嘗試

比較結(jié)果,如果性能有提升,則保留

不斷重復(fù)

歡迎加入本站公開(kāi)興趣群

商業(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://m.specialneedsforspecialkids.com/yun/4422.html

相關(guān)文章

  • 深度學(xué)習(xí)三大硬件+四大學(xué)習(xí)庫(kù)基準(zhǔn)測(cè)試對(duì)比,指標(biāo)全面呈現(xiàn)

    摘要:基準(zhǔn)測(cè)試我們比較了和三款,使用的深度學(xué)習(xí)庫(kù)是和,深度學(xué)習(xí)網(wǎng)絡(luò)是和。深度學(xué)習(xí)庫(kù)基準(zhǔn)測(cè)試同樣,所有基準(zhǔn)測(cè)試都使用位系統(tǒng),每個(gè)結(jié)果是次迭代計(jì)算的平均時(shí)間。 購(gòu)買(mǎi)用于運(yùn)行深度學(xué)習(xí)算法的硬件時(shí),我們常常找不到任何有用的基準(zhǔn),的選擇是買(mǎi)一個(gè)GPU然后用它來(lái)測(cè)試?,F(xiàn)在市面上性能較好的GPU幾乎都來(lái)自英偉達(dá),但其中也有很多選擇:是買(mǎi)一個(gè)新出的TITAN X Pascal還是便宜些的TITAN X Maxwe...

    YacaToy 評(píng)論0 收藏0
  • 縱覽輕量化卷積神經(jīng)網(wǎng)絡(luò):SqueezeNet、MobileNe

    摘要:目錄一引言二輕量化模型三網(wǎng)絡(luò)對(duì)比一引言自年以來(lái),卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)稱(chēng)在圖像分類(lèi)圖像分割目標(biāo)檢測(cè)等領(lǐng)域獲得廣泛應(yīng)用。創(chuàng)新點(diǎn)利用和這兩個(gè)操作來(lái)設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)模型以減少模型使用的參數(shù)數(shù)量。 本文就近年提出的四個(gè)輕量化模型進(jìn)行學(xué)習(xí)和對(duì)比,四個(gè)模型分別是:SqueezeNet、MobileNet、ShuffleNet、Xception。目錄一、引言?二、輕量化模型?? ? 2.1 SqueezeNet?...

    yhaolpz 評(píng)論0 收藏0
  • 四大深度學(xué)習(xí)框架+四類(lèi)GPU+七種神經(jīng)網(wǎng)絡(luò):交叉性能評(píng)測(cè)

    摘要:最近,等人對(duì)于英偉達(dá)的四種在四種不同深度學(xué)習(xí)框架下的性能進(jìn)行了評(píng)測(cè)。本次評(píng)測(cè)共使用了種用于圖像識(shí)別的深度學(xué)習(xí)模型。深度學(xué)習(xí)框架和不同網(wǎng)絡(luò)之間的對(duì)比我們使用七種不同框架對(duì)四種不同進(jìn)行,包括推理正向和訓(xùn)練正向和反向。一直是深度學(xué)習(xí)方面最暢銷(xiāo)的。 最近,Pedro Gusm?o 等人對(duì)于英偉達(dá)的四種 GPU 在四種不同深度學(xué)習(xí)框架下的性能進(jìn)行了評(píng)測(cè)。本次評(píng)測(cè)共使用了 7 種用于圖像識(shí)別的深度學(xué)習(xí)模...

    jk_v1 評(píng)論0 收藏0
  • 阿里云前端周刊 - 第 26 期

    摘要:小米直達(dá)服務(wù)探秘,如何保證移動(dòng)體驗(yàn)小米直達(dá)服務(wù)是小米推出的混合開(kāi)發(fā)框架,它可以實(shí)現(xiàn)秒開(kāi),同時(shí)可以在瀏覽器短信微信等地方打開(kāi)。本文即是小米直達(dá)服務(wù)體驗(yàn)保障方面的實(shí)踐分享,討論了目前移動(dòng)體驗(yàn)的瓶頸小米直達(dá)服務(wù)的機(jī)制與核心關(guān)鍵等內(nèi)容。 推薦 1. Node.js 8.5.0 發(fā)布 https://nodejs.org/en/blog/re... 已經(jīng)發(fā)布的 Node.js 8.5.0 版本中...

    beanlam 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問(wèn)題集錦關(guān)于,工作和學(xué)習(xí)過(guò)程中遇到過(guò)許多問(wèn)題,也解答過(guò)許多別人的問(wèn)題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱(chēng)為惰性加載,即在長(zhǎng)網(wǎng)頁(yè)中延遲加載圖像。用戶(hù)滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<