深度學習中:」多層的好處是可以用較少的參數表示複雜的函數「這句話該怎麼理解?

深度學習通過增加隱含層的層數提高了特徵學習的能力,為什麼多層的效果會好呢?我看到過一種說法:」多層的好處是可以用較少的參數表示複雜的函數「這句話該怎麼理解?


我談一下我的看法:

從複雜度來考慮,deep network 和 「shallow network」 相比層數更多,相對每層所需要(注意,是所需要的,不是我們 design 的,這裡有不少方法可以檢驗)unit 個數會少一些。但是從訓練的角度看,如果整體一起訓練 deep network (以用 MCMC 訓練為例),出現的困難主要在於收斂時間長而且有陷入局部極小的可能 (關於 MCMC sampling 的缺陷可以參見 Max Welling 等人做 Herding 的討論)。

所以提高層數從而提高學習能力,主要從兩點來說:

一個是提高了 feature representation 的能力,也就是說利用更簡單的形式表示更多的可能性。一個簡單的例子就是考慮真假邏輯的表示,兩層的結構(一階邏輯)就可以表示一張真值表。

第二就是把整體訓練改成了逐層訓練,這樣的做法是吸收了 "shallow network" 相對容易訓練的好處。我們現在提出了另一種訓練模式(當然這裡就不透露了年內會發表),並且分別討論了它運用在整體訓練和逐層訓練上的效果,這裡可以說的是整體訓練在底層可能比較順利(因為抽象程度離原數據不遠),但是在中上層收斂會逐漸變慢。逐層訓練的好處就是讓它隨時都處於一個「靠近底層的抽象」的狀態,非線性的影響會小不少。

總體而言,決定 network 訓練效果的,一個是數據預處理的抽象程度,另一個是網路非線性的影響。Deep network 的好處是它自己幫我們做好了數據預處理(而且是非人工設計的),但是對於一個我們已經根據經驗正確設計好的數據預處理,它相對 "shallow network" 的優勢就不明顯了。不過大部分時間的難點就在於如何找到正確的數據預處理,所以這也是 deep network 發展出 representation learning 的由來之一。

最近在 arxiv 上有篇論文 argue 到底我們需不需要深層網路,可以參考一下。

Do Deep Nets Really Need to be Deep?

當然在實踐中,只要有足夠的計算資源和訓練數據,"shallow network" 的效果也不會差到哪裡去。


神經元的數量,決定了神經網路非線性的程度。

(為何NN需要非線性函數可以參考這個提問:神經網路激勵函數的作用是什麼?有沒有形象的解釋)

過多參數使得計算量增加很多。同時容易過度擬合。

多層確實可以減少參數的數量,與此同時不減少神經元的數量。參看下圖:

但是多層也有壞處,比如太多層優化起來很困難,在BP的時候會出現導數消失/爆炸的情況(vanishing/exploding gradients)。這也是導致像RNN (recurrent neural network)這樣深層,表達力很強的網路很多年都沒有很好的成果。另外一個原因是當時的計算機計算能力太差。現在出現了更好的優化方法,比如每一層逐層BP,最後再微調;再比如一些二階的優化演算法等等。加上計算機計算能力加強,所以深層網路又重新回到了人們的視野。


省力不省距離


說的直白點就是加層可以提取公共子表達式,減少函數中表達式的數目,所以參數少


直覺上可以這樣理解多層神經網路:深層的神經元識別的是更為抽象的信息。由於有了更為抽象的神經元來表示信息,所需要的參數就少,就好比人類的學習過程,經過不斷的總結歸納,需要死記硬背的東西就少了。


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning |