Krizhevsky等人是怎麼想到在CNN里用Dropout和ReLu的?

當然拿到結果以後我們倒回去看,可以為ReLu和Dropout做出各種解釋來說明它們為什麼work, 但是我更好奇的是,當初他是怎麼想到要用這個東東而不是別的?

傳統的來說,自然的選擇應該是sigmoid,tanh, RBF這些不是嗎?

為什麼會有人一拍腦袋想出個ReLu?

為什麼又有人會一拍腦袋想出要dropout?

他們運氣好到拍腦袋想到修改一個模塊的主意就正好可以work嗎?

還是說嘗試了各種可能的方案?如果是這樣,那工作量太大了,因為拍腦袋可以想出無數種nonlinear transfer function的形式或者對數據篩選的方式。

當然David Lowe說他發明SIFT的時候也是把各種方案都嘗試了一遍,但我還是寧願相信Krizhevsky是有某種方向而不是純粹的暴力嘗試


發現問題最近突然火了,多了一些所謂的神經科學解釋,所以來扯一發。不知道這兩個方法到底是怎麼想到的,但其中之一的ReLU肯定不是和神經科學有關係的(Dropout就更沒關係了)。有的關係是後來搞計算神經科學的人強行套上去的,而不是剛開始那群做ML的人想出來的(其實我一開始也以為是這麼回事,最後發現其實比較扯淡)。

首先,ReLU不是Krizhevsky想出來的,Dropout自然也不是他想出來的,甚至他都不是第一個用這兩個想法到CNN的。他只是應用這兩種方法並且發現非常好用而已。

最早給CNN用ReLU的應該是AlexNet引用的這篇文章:"V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th
International Conference on Machine Learning, 2010",這篇文章似乎是最早把ReLU用到RBM上(應該也算CNN)的。

作者首先亮出RBM的binary state: p(h_j=1)  =  frac{1}{1+exp(-b_j - sum _i v_iw_ij))} ,類比sigmoid激活函數,然後把它分成 N 個小binary units再加一起,自己就變成了binomial unit,以表達更多信息。

然後作者抱怨到binomial units其實很坑爹,雖然每個小binary units的 p都一樣,但是最後當 x (這裡是 x=vw^{T}+b )變大的時候, p 變小,然後方差(Np(1-p) )消失不見。實際上如果把上面p的公式代入可以發現,作者的抱怨正是DL里的gradient vanish problem。最後作者祭出大招,用了一個我沒看懂的方法(希望評論有人可以解釋一下為什麼這麼做),把一個binary unit分成無數個小binary units,每個小units有同樣的weight w 和bias b ,但是每個小units有不同的bias offset,而且每次都以1位單位遞減,最後近似出了一個ReLU函數:

sumlimits_{i=1}^{N} sigma(x - i +0.5)approx log(1 + e^{x}) ,其中 x=vw^{T}+b

紅圈是上面的期望值(貌似應該是方差,但是paper里給是的期望)合,藍線是 log(1+e^{x}) ,綠線是 max(0, x+N(0,sigma(x))) (Gaussian noise corrupted的ReLU),發現十分一致。此時方差 sigma(x) 就不會因為 x 增大而變小,也就是根據作者的話,不會引入更大的噪音。作者後面用了用,發現也非常好用,而且還提到 (Jarrett et al., 2009) 試了各種各樣的rectified nonlinearities(包括 max(0,x) ,也就是ReLU),同樣也發現很好用(雖然我沒在原文找到這個rectifier,沒仔細讀)。

然而這跟神經科學有什麼關係呢?沒有任何關係。只是之後三位大佬(Xavier Glorot, Antoine Bordes and Yoshua Bengio)發現有大新聞可以弄,於是瘋狂研究了一下ReLU,給出了各種現在人盡皆知的ReLU為什麼那麼好用的原因,在2011年發表了《 Deep Sparse Rectifier Neural Networks 》(寫的其實非常好,感興趣的同學推薦一讀)。

由於文章一作Xavier Glorot不僅研究ML,還研究計算神經科學,所以這篇文章的「Background」一整個subsection都是神經科學的內容,比如提到真實大腦神經元激活的稀疏性(Sparsity)以及leaky integrate-and-fire的解釋。然而實際上,正如Krizhevsky等人是怎麼想到在CNN里用Dropout和ReLu的? - Ruyuan Zhang的回答里提到的一樣,這個解釋非常牽強。因為0以下為0,0以上為sigmoid的函數實際上更適合作為真實神經元的激活函數(見下圖,出處即上述文章)。然而這種函數更難優化,而且0以上部分和普通sigmoid毫無任何區別,所以在DL里完全是畫蛇添足。實際上,神經網路的激活函數只是為了引入非線性(否則就變成諸如Linear Associator的純線性變換),理論上任何非線性函數都可以使用,而ReLU恰好就是這個擁有各種優勢的非線性函數。至於跟神經科學的關係,那都是之後的人套上去的。

所以,就目前神經科學的發展水平,能啟發ML的上世紀六七十年代基本都啟發完了,現在實際上是ML在啟發神經科學。一旦ANN有什麼新發現,就可以在神經科學上做實驗,說不定能弄個大新聞。


你以為他們是拍了下腦袋就想出來的演算法,實際上他們一天拍一個idea,拍了好幾年才拍出來個有效的。


說說個人看法吧,前面有人從神經生物學的角度來解釋電流輸入強度和神經元反應的關係。其實目前的看法,無論是膜電位電流輸入,或者是視覺刺激輸入所引發的對比度反應方程(contrast response function),比較一致的發現是隨著輸入的增大,神經元反應會漸進的飽和,所以大部分情況是compressive nonlinearity。要按照認知神經科學的發現,sigmoid和tanh應該更準確才對。但是RELU在優化過程中就是比前兩者好用,我反而覺得這是神經網路的設計和腦科學發現不相符合的一個點,當時在看Alexnet的paper就注意到了。

聰明的idea就好比小學做數學題的解法一樣,想到了就想到了,想不到就是沒辦法。但是想到一點靈感,後面是多少的經驗和汗水的積累。我覺得想到這個是為了優化,而不是神經科學的解釋。

再說dropout,其實noise對神經網路overfiting的作用之前已經有人說明了。Dropout是一個很極端的noise情況,隨機關停了一些神經元。本身大腦裡面神經元就有很多噪音,這些噪音一直被認為是不好的,因為讓信號傳遞有損失。但是我看了Alexnet之後發現,原來還有個更normative的解釋是,大腦裡面的噪音可能是讓我們的大腦對於學習不overfitting,真尼瑪不明覺厲。不知道哪個牛人能做實驗證明這一點。這算不算這些計算機科學家對腦科學的啟示呢?


別整天給什麼神經學研究貼金了,壓根一點關係都沒有。


他是搞電子的,懂二極體的原理。

現在連反向漏電都有了。leak relu

今後還會有三極體,場效應管,差分放大器。呵呵。

非線性電路。振蕩器-> 遞歸神經網路。

最後 還是要加上門電路,nin。


業餘選手來答一個。先說結論:ReLU是神經元Integrate-and-Fire(IF)模型的一個近似,它的輸出正比於一個給定的時間間隔中IF neuron的spikes數。

我們知道,當神經元的membrane potential上升到一個閾值的時候,就會有一個spike。

這個電勢的變化主要是因為Na+和K+在跑來跑去,這個神經元細胞膜的電特性,就像一個電容器一樣。

上面這個是Hodgkin and Huxley Model,把這個模型做下簡化,可以得到神經元的Leaky Integrate-and-Fire Model。

模擬起來電勢是這樣變化的(橫坐標為毫秒):

注入電流越高,電勢上升越快,產生spikes的頻率就越高;但是如果電流太小,電勢是到不了閾值的,就不會有spike。畫個激活函數的圖,就像這樣:

LIF neuron忽略掉leakage項就是IF neuron,再去掉神經元的refractory period,就近似成ReLU了。(業餘選手,求大神輕噴。。)


我說句特別招罵的話,其實這種idea90%是拍腦門,但是人人都拍,人家拍響了,這叫什麼,這叫insight。另外人家執行力超強,影響力特大,一做成了馬上能起來。

之前看word2vec火的遍地都是,你說sgns怎麼想出來的,有什麼語言學證據,反正人家懟出來NB了大家快速轉快速用,不一直這樣么呵呵呵


這種問題,只有大神來結合自己的經歷講講,誰知道大神們腦子裡都是怎麼蹦出idea的。但是我相信一定是做了很多嘗試,才找出一個靠譜的activation方法。而在嘗試中,當然不是暴力嘗試,應該也是有借鑒一些優化方法中常用的trick,然後再站在Hinton幾十年研究的積累上的逐漸演化等等。。有些方法的提出,在像我這樣的初學者看來,好像是一個跳躍出現的,而在提出方法的researcher看來,這個是一個漸進的過程。比如最近的BatchNormalization和PReLU,其實就是在原有的基礎上邁了一小步,但是就得到了不錯的效果。


大方嚮應該是有的。

ReLu來自於對人腦神經細胞工作時的稀疏性的研究,在 Lennie,P.(2003).Thecostofcorticalcomputation.Cur-rentBiology,13,493–497. 這篇里提出人腦神經元有95%-99%是閑置的,更少工作的神經元意味著更小的計算複雜度,更不容易過擬合,而且我猜測稀疏性可能也符合流形假設(只是個人猜測沒有驗證)。於是ReLu被提出來了,通過一個線性函數使大部分神經元不激活,從而強制加入稀疏性,然後實驗驗證發現效果很好。

dropout是隨機關閉一些鏈接,這個應該也是為了防止過擬合,而且神經網路求解其實是一個啟發搜索過程(語出Yoshua Bengio),隨機關閉一些鏈接增大了搜索空間,就更有可能獲得一個好的效果。然後試驗發現效果很好。

深度學習的研究就是一點理論猜測和trick的結合。


既不是原作者也沒有從最底層系統研究過CNN,本行是運籌學、組合優化以及概率圖模型。

這裡僅簡單談談Dropout的一點insight~

0,防止過擬合

統計推斷以及概率圖模型中的馬爾可夫隨機場(MRF)模型中,都有正則項(regularization term),為的就是防止過擬合。

統計學中經典的L1 Lasso模型如下:

其中beta_j是參數,為了防止過擬合,有了第二項的L1絕對值,目的就是使得某些不是那麼重要的權重beta可以變為0(無效參數),不然的話就會付出*lambda的懲罰。

註:上式為數學規劃(Math Programming)中二次規劃(Quadratic Programming)模型。

那麼CNN中如何實現這個正則項呢防止過擬合呢?

當然不是立馬就聯想到dropout了--但是dropout的作用使得某些參數beta在一次訓練中隨機地變成0(直接dropout掉整個神經元,圖中叉叉),是不是就有點上面的Lasso的意思呢?

然後跑N次隨機dropout掉部分神經元的網路,最後再取平均。

為什麼要跑N次呢?

  • 因為這裡不像Lasso那樣,目標函數的優化方程會自主「學習」哪個beta = 0(即學習dropout掉哪個權重)。
  • 無法自主學習drop掉哪個,這裡只能採取「隨機採樣」的策略(不知準不準確) -- 多搞幾次隨機,取個平均,然後每次網路「學習」的是當下網路沒有被dropout掉神經元的權重。
  • 這樣的效果,也可防止某個神經元在某次訓練中過擬合了,例如權重 = 9;但是下一次正常了,權重 = 6,取個平均--有點概率論中期望的意思,因為演算法本身不是求解全局最優。
  • 最後,還消除了神經元之間相互依附的關係,使得每個神經元更加魯棒(robustic) -- 說不定下一次我的兄弟就被dropout了,我還是靠自己好好訓練自己的權重吧~

1,倆種形式的dropout

這裡提一下,除了上一節中把部分神經元dropout之外,還有另一種dropout形式:

即:神經元保留,但是dropout掉其中一些權重w(圖中虛線)。

但原理仍和上一節類似~

2,減少複雜度

為了防止過擬合,可以採用訓練N次整個網路,再取平均。

但是這樣複雜度就乘以N。

試想訓練一次就要一周時間,N次就要N周了。

3,神經科學解釋?

人腦有860億個神經元,它們每時每刻都在「衰竭」和「新生」,這一秒一個神經元死掉了,但不會導致人體某部分功能的缺失;下一秒新的神經元又誕生了。

或許可以部分解釋為什麼此刻dropout掉一些神經元,下一刻再「補」回來(相當於新生),神經網路依然可以訓練出滿意的結果。

當然,是建立在深度神經網路很「深」的情況下。

以上僅一家之言,大神輕噴。


運籌學、優化理論角度審視人工智慧,敬請關註:

[運籌帷幄]大數據和人工智慧時代下的運籌學

話題--運籌學


因為他老闆剛好是Hinton?

有人問hinton又怎麼想到?

Hinton專業調參幾十年了,水到渠成么。dropout的motivation就是一項早就為人熟知的trick:訓練多個網路,取平均。沒錯就是bagging或者集成學習的思路。可是Hinton想了,卧槽,這個看上去不在我神經網路的框架之內啊,我怎麼能做那些看上去在follow別人工作的事呢?於是眉頭一皺,計上心來,有了,弄成in place的平均——我並不顯式的訓練多個網路,網路只有一個但效果上取平均。於是dropout就給弄出來了。

relu么,hinton其實是想弄到rbm上,因為它剛好有一種函數逼近上的解釋。但實際上後來人們發現直接用在確定性圖模型上也挺好,能起到稀疏激活,加快收斂的效果。

好吧我編不下去了,列為看官輕拍。


ReLU:

為了讓gradient能夠更好地傳遞

Dropout:

之前加noise的工作已經有了一些,在此基礎上想出了屏蔽一些neuron,進行了試驗發現效果簡直好得不要不要。


挨著試唄,拿著結果反推原因,有啥好解釋的。。。


想這種主意的時候應該是釣魚拋線的感覺,有東西連著但釣到魚的把握不大。


我比較關心下一個火起來的函數會是怎麼樣的?這個不可能是終極函數吧


在最優化方法中有遺忘因子與拉格朗日乘子,傳統手段。所以說人家拍腦袋是不合適的,首先有了這種基本數學方法套路的認知,然後去找的具體的實現。


1. ReLU

ReLU是Krizhevsky的老師Hinton提出來的,作者論文中使用了ReLU發現效果很好,比tanh快6倍。至於方向作者也說了,"We are not the first to consider alternatives to traditional neuron models in CNNs. " 主要是考慮替換神經元模型,即替換激活函數。

2. Dropout

Dropout也是Hinton提出,論文作者里也有Krizhevsky,作者考慮的是多個模型預測的結果結合可以提高分類準確率,即ensemble models。但這樣代價太高,怎樣有效的ensemble model呢?Dropout正好能完成這個功能,而且代價比傳統的ensemble model要低的多。作者原話:

"Combining the predictions of many different models is a very successful way to reduce test errors , but it appears to be too expensive for big neural networks that already take several days to train. "

從ReLU和Dropout能夠看出來,作者對DCNN的各個階段都有研究,最後成果組合實驗驗證後得出了AlexNet。AlexNet是長期的積累,而不是突然爆發。

附:

ReLU論文:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.165.6419amp;rep=rep1amp;type=pdf

Dropout論文:https://arxiv.org/pdf/1207.0580.pdf

AlexNet論文翻譯:AlexNet論文翻譯——中文版


其實就是試出來的。

你不去做,永遠不知道他們為什麼要這麼做。只有你做了,你才知道原因。


你們這些噴relu和神經學沒關係的,自己去查一查qian ning的disparity energy model以及simoncelli的mt motion model裡面的非線性處理就是relu,原因很簡單,就是因為神經元只有正的activation。至於那棒子google的人是不是受到了這些東西的啟發,那就不得而知了,但是relu絕對是在卷積神經網路火起來之前就被用在各類類腦視覺處理機制的建模當中了。


dropout咋拍出來的不知道,不過dropout hinton想了很多年才想出來的。

ReLU其實在Yann Lecun 09年的那個論文里就有雛形啦。


剛入門來發一波猜想

Relu:天天想著怎麼樣在公式上加快運算,天天琢磨公式,最後時間加努力,找到啦

dropout:天天想著怎麼增大data,減少features之間的collection,就開始變著法兒的研究輸出,最終運氣加努力,成功啦

理解的還不透徹,求輕噴~(≧▽≦)/~


其實我很困惑,難道這些大神讀神經科學的文獻嗎……?


不僅僅關注結果,還思考大神們提出某個想法的過程,是一件很好的事情,但是誰又知道他們是怎麼想出來的呢。每個人的思維喜歡是不同的嘛


推薦閱讀:

卷積神經網路提取圖像特徵時具有旋轉不變性嗎?
請問各位大大現在的放療計劃系統在做自動化計劃時用的是神經網路嗎?

TAG:機器學習 | 優化 | 最優化 | 深度學習DeepLearning | 卷積神經網路CNN |