掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
最近,Jeff Leek 在 Simply Stats 上發(fā)表了一篇題為「如果你的數(shù)據(jù)量不夠大就不要使用深度學(xué)習(xí)」(Don't use deep learning your data isn't that big)的文章(鏈接見文末),認(rèn)為只有獲得了谷歌、Facebook 這樣規(guī)模的數(shù)據(jù)才有資格做深度學(xué)習(xí)。對于這點(diǎn) Andrew L. Beam(本文作者)并不反對,他認(rèn)為這使我們清楚地意識到深度學(xué)習(xí)并不是一種***的靈藥;但是,雖然 Beam 同意其核心觀點(diǎn),但是其還有很多不明確或不清晰的地方,并且 Beam 認(rèn)為只要小心地訓(xùn)練模型,就能在小數(shù)據(jù)設(shè)置中使用深度學(xué)習(xí)。機(jī)器之心對該文進(jìn)行了編譯,原文鏈接請見文末。

創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都咖啡廳設(shè)計(jì)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
Jeff Leek 采用兩種方法基于 MNIST 數(shù)據(jù)集對手寫字體進(jìn)行分類。他對比了五層神經(jīng)網(wǎng)絡(luò)(激活函數(shù)使用的是 hyperbolic tangent)的系統(tǒng)和 Leekasso,Leekasso 僅僅使用了帶最小邊際 p-value 的 10 塊像素。他驚訝地表明,在使用少量樣本時(shí),Leekasso 要比神經(jīng)網(wǎng)絡(luò)性能更加出色。
難道如果你的樣本量小于 100,就因?yàn)槟P蜁?huì)過擬合并且會(huì)得出較差的性能而不能使用深度學(xué)習(xí)?可能情況就是如此,深度學(xué)習(xí)模型十分復(fù)雜,并且有許多訓(xùn)練的技巧,我總感覺缺乏模型收斂性/復(fù)雜度訓(xùn)練也許才是性能較差的原因,而不是過擬合。
深度學(xué)習(xí) VS. Leekasso Redux
首先***件事就是建立一個(gè)使用該數(shù)據(jù)集的深度學(xué)習(xí)模型,也就是現(xiàn)代版的多層感知機(jī)(MLP)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)。如果 Leek 的文章是正確的話,那么當(dāng)只有少量樣本時(shí),這些模型應(yīng)該會(huì)產(chǎn)生嚴(yán)重的過擬合。
我們構(gòu)建了一個(gè)激活函數(shù)為 RELU 的簡單 MLP 和一個(gè)像 VGG 那樣的卷積模型,然后我們再比較它們和 Leekasso 性能的差異。
所有的代碼都可下載:https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py
多層感知機(jī)模型是非常標(biāo)準(zhǔn)的:
CNN 模型也和以前的十分相似:
作為參考,MLP 大約有 12 萬個(gè)參數(shù),而 CNN 大約有 20 萬個(gè)參數(shù)。根據(jù)原文的假設(shè),當(dāng)我們有這么多的參數(shù)和少量樣本時(shí),模型好像真的會(huì)出錯(cuò)。
我們盡可能地靠近原始分析,我們使用了 5 層交叉驗(yàn)證(5-fold cross validation),但使用了標(biāo)準(zhǔn) MNIST 測試集進(jìn)行評估(大約有 2000 張測試樣本)。我們將測試集分為兩部分,上半部分用于評估訓(xùn)練過程的收斂,而下半部分用于測量樣本預(yù)測的準(zhǔn)確度。我們甚至沒有調(diào)整這些模型,對于大多數(shù)超參數(shù),僅僅只是使用合理的默認(rèn)值。
我們盡可能地重新構(gòu)建了原文中 Leekasso 和 MLP 的 Python 版本。代碼可以在此處下載:
https://github.com/beamandrew/deep_learning_works/blob/master/mnist.py
以下是每個(gè)模型的樣本精度:
這兩個(gè)模型的精度和原來的分析有很大的不同,原始分析中對小樣本使用 MLP 仍然有很差的效果,但我們的神經(jīng)網(wǎng)絡(luò)在各種樣本大小的情況下都可以達(dá)到非常***的精度。
為什么會(huì)這樣?
眾所周知,深度學(xué)習(xí)模型的訓(xùn)練往往對細(xì)節(jié)要求極高,而知道如何「調(diào)參」是一件非常重要的技能。許多超參數(shù)的調(diào)整是非常具體的問題(特別是關(guān)于 SGD 的超參數(shù)),而錯(cuò)誤地調(diào)參會(huì)導(dǎo)致整個(gè)模型的性能大幅度下降。如果你在構(gòu)建深度學(xué)習(xí)模型,那么就一定要記?。耗P偷募?xì)節(jié)是十分重要的,你需要當(dāng)心任何看起來像深度學(xué)習(xí)那樣的黑箱模型。
下面是我對原文模型出現(xiàn)問題的猜測:
幸好,RStudio 那些人太好了,他們剛剛發(fā)布了 Keras 的 R 接口:https://rstudio.github.io/keras/,這樣我就可以完全用 R 語言重建我的 Python 代碼了。我們之前使用 MLP 用 R 實(shí)現(xiàn)了就是這樣:
我將這個(gè)放進(jìn)了 Jeff 的 R 代碼中,并重新生成了原來的圖表。我對 Leekasso 進(jìn)行了一點(diǎn)修改。原來的代碼使用了 lm()(即線性回歸),我覺得很奇怪,所以我切換成了 glm()(即 logistic 回歸)。新的圖表如下所示:
深度學(xué)習(xí)真是厲害了!一個(gè)類似的現(xiàn)象可能能夠解釋 Leekasso 的 Python 和 R 版本之間的不同。Python 版本的 logistic 回歸使用了 liblinear 作為其解算器,我認(rèn)為這比 R 默認(rèn)的解算器更加可靠一點(diǎn)。這可能會(huì)有影響,因?yàn)?Leekasso 選擇的變量是高度共線性的(collinear)。
這個(gè)問題太簡單了,以致于不能說明什么有意義的東西。我重新運(yùn)行了 Leekasso,但僅使用了***的預(yù)測器,其結(jié)果幾乎完全等同于全 Leekasso。實(shí)際上,我確定我可以做出一個(gè)不使用數(shù)據(jù)的且具有高準(zhǔn)確度的分類器。只需要取其中心像素,如果是黑色,則預(yù)測 1,否則就預(yù)測 0,正如 David Robinson 指出的那樣:
David 還指出,大多數(shù)數(shù)字對(pairs of numbers)都可以由單個(gè)像素進(jìn)行分類。所以,這個(gè)問題很可能不能給我們帶來任何關(guān)于「真實(shí)」小數(shù)據(jù)場景的見解,我們應(yīng)當(dāng)對其結(jié)論保持適當(dāng)?shù)膽岩伞?/p>
關(guān)于深度學(xué)習(xí)為什么有效的誤解
最終,我想要重新回到 Jeff 在文中所提出的觀點(diǎn),尤其是這個(gè)聲明:
| 問題在于:實(shí)際上僅有少數(shù)幾個(gè)企業(yè)有足夠數(shù)據(jù)去做深度學(xué)習(xí),[…] 但是我經(jīng)常思考的是,在更簡單的模型上使用深度學(xué)習(xí)的主要優(yōu)勢是如果你有大量數(shù)據(jù)就可以擬合大量的參數(shù)。 |
這篇文章,尤其是***一部分,在我看來并不完整。很多人似乎把深度學(xué)習(xí)看成一個(gè)巨大的黑箱,有大量可以學(xué)習(xí)任何函數(shù)的參數(shù),只要你有足夠的數(shù)據(jù)。神經(jīng)網(wǎng)絡(luò)當(dāng)然是極其靈活的,這種靈活性正是其成功原因的一部分,但不是全部,不是嗎?
畢竟,這種超級靈活的模型在機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)中有著 70 多年的發(fā)展歷史。我并不認(rèn)為神經(jīng)網(wǎng)絡(luò)是先驗(yàn)(priori)的,我也不認(rèn)為比同等復(fù)雜度的其他算法更靈活。
下面是我對其成功所作的原因總結(jié):
總結(jié)一下,我認(rèn)為上述原因很好地解釋了為什么深度學(xué)習(xí)在實(shí)踐中奏效,打破了深度學(xué)習(xí)需要大量參數(shù)和數(shù)據(jù)的假設(shè)。***,本文并不是想說 Jeff 的觀點(diǎn)錯(cuò)了,而是旨在提供一個(gè)不同的新視角,為讀者帶來啟發(fā)。
原文:http://beamandrew.github.io/deeplearning/2017/06/04/deep_learning_works.html
【本文是專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】
戳這里,看該作者更多好文

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流