如何確定神經網絡的層數和隱藏層神經元數量 - 台部落

文章推薦指數: 80 %
投票人數:10人

圖源:吳恩達-深度學習. 輸入層和 ... 如何確定隱藏層的層數是一個至關重要的問題。

... 隱藏層的層數與神經網絡的效果/用途,可以用如下表格概括:. 請輸入正確的登錄賬號或密碼 註冊 忘記密碼 首頁 未分類 正文 如何確定神經網絡的層數和隱藏層神經元數量 原創 龍之天族 2021-04-2513:55 轉載自 https://zhuanlan.zhihu.com/p/100419971   如何確定神經網絡的層數和隱藏層神經元數量 一、導語 BP神經網絡主要由輸入層、隱藏層、輸出層構成,輸入和輸出層的節點數是固定的,不論是迴歸還是分類任務,選擇合適的層數以及隱藏層節點數,在很大程度上都會影響神經網絡的性能。

圖源:吳恩達-深度學習   輸入層和輸出層的節點數量很容易得到。

輸入層的神經元數量等於待處理數據中輸入變量的數量,輸出層的神經元的數量等於與每個輸入關聯的輸出的數量。

但是真正的困難之處在於確定合適的隱藏層及其神經元的數量。

二、隱藏層的層數 如何確定隱藏層的層數是一個至關重要的問題。

首先需要注意一點: 在神經網絡中,當且僅當數據非線性分離時才需要隱藏層! Sinceasinglesufficientlylargehiddenlayerisadequateforapproximationofmostfunctions,whywouldanyoneeverusemore?Onereasonhangsonthewords“sufficientlylarge”.Althoughasinglehiddenlayerisoptimalforsomefunctions,thereareothersforwhichasingle-hidden-layer-solutionisveryinefficientcomparedtosolutionswithmorelayers.——NeuralSmithing:SupervisedLearninginFeedforwardArtificialNeuralNetworks,1999   因此,對於一般簡單的數據集,一兩層隱藏層通常就足夠了。

但對於涉及時間序列或計算機視覺的複雜數據集,則需要額外增加層數。

單層神經網絡只能用於表示線性分離函數,也就是非常簡單的問題,比如分類問題中的兩個類可以用一條直線整齊地分開。

Specifically,theuniversalapproximationtheoremstatesthatafeedforwardnetworkwithalinearoutputlayerandatleastonehiddenlayerwithany“squashing”activationfunction(suchasthelogisticsigmoidactivationfunction)canapproximateanyBorelmeasurablefunctionfromonefinite-dimensionalspacetoanotherwithanydesirednon-zeroamountoferror,providedthatthenetworkisgivenenoughhiddenunits.——Deeplearning,2016 概括來說就是多個隱藏層可以用於擬合非線性函數。

隱藏層的層數與神經網絡的效果/用途,可以用如下表格概括: 圖源: 簡要概括一下—— 沒有隱藏層:僅能夠表示線性可分函數或決策 隱藏層數=1:可以擬合任何“包含從一個有限空間到另一個有限空間的連續映射”的函數 隱藏層數=2:搭配適當的激活函數可以表示任意精度的任意決策邊界,並且可以擬合任何精度的任何平滑映射 隱藏層數>2:多出來的隱藏層可以學習複雜的描述(某種自動特徵工程) Empirically,greaterdepthdoesseemtoresultinbettergeneralizationforawidevarietyoftasks.Thissuggeststhatusingdeeparchitecturesdoesindeedexpressausefulprioroverthespaceoffunctionsthemodellearns.——Deeplearning,2016 層數越深,理論上擬合函數的能力增強,效果按理說會更好,但是實際上更深的層數可能會帶來過擬合的問題,同時也會增加訓練難度,使模型難以收斂。

因此我的經驗是,在使用BP神經網絡時,最好可以參照已有的表現優異的模型,如果實在沒有,則根據上面的表格,從一兩層開始嘗試,儘量不要使用太多的層數。

在CV、NLP等特殊領域,可以使用CNN、RNN、attention等特殊模型,不能不考慮實際而直接無腦堆砌多層神經網絡。

嘗試遷移和微調已有的預訓練模型,能取得事半功倍的效果。

圖源:beginners-ask-how-many-hidden-layers-neurons-to-use-in-artificial-neural-networks   確定隱藏的神經元層的數量只是問題的一小部分。

還需要確定這些隱藏層中的每一層包含多少個神經元。

下面將介紹這個過程。

三、隱藏層中的神經元數量 在隱藏層中使用太少的神經元將導致欠擬合(underfitting)。

相反,使用過多的神經元同樣會導致一些問題。

首先,隱藏層中的神經元過多可能會導致過擬合(overfitting)。

當神經網絡具有過多的節點(過多的信息處理能力)時,訓練集中包含的有限信息量不足以訓練隱藏層中的所有神經元,因此就會導致過擬合。

即使訓練數據包含的信息量足夠,隱藏層中過多的神經元會增加訓練時間,從而難以達到預期的效果。

顯然,選擇一個合適的隱藏層神經元數量是至關重要的。

圖源:吳恩達-深度學習 通常,對所有隱藏層使用相同數量的神經元就足夠了。

對於某些數據集,擁有較大的第一層並在其後跟隨較小的層將導致更好的性能,因爲第一層可以學習很多低階的特徵,這些較低層的特徵可以饋入後續層中,提取出較高階特徵。

需要注意的是,與在每一層中添加更多的神經元相比,添加層層數將獲得更大的性能提升。

因此,不要在一個隱藏層中加入過多的神經元。

對於如何確定神經元數量,有很多經驗之談。

stackoverflow上有大神給出了經驗公式以供參考: 其中:  是輸入層神經元個數;是輸出層神經元個數;是訓練集的樣本數;α是可以自取的任意值變量,通常範圍可取2-10。

  還有另一種方法可供參考,神經元數量通常可以由一下幾個原則大致確定: 隱藏神經元的數量應在輸入層的大小和輸出層的大小之間。

隱藏神經元的數量應爲輸入層大小的2/3加上輸出層大小的2/3。

隱藏神經元的數量應小於輸入層大小的兩倍。

總而言之,隱藏層神經元是最佳數量需要自己通過不斷試驗獲得,建議從一個較小數值比如1到5層和1到100個神經元開始,如果欠擬合然後慢慢添加更多的層和神經元,如果過擬合就減小層數和神經元。

此外,在實際過程中還可以考慮引入BatchNormalization,Dropout,正則化等降低過擬合的方法。

參考資料: LeCun,Yann,YoshuaBengio,andGeoffreyHinton."Deeplearning."nature521.7553(2015):436-444. HeatonResearch:TheNumberofHiddenLayers AhmedGad,BeginnersAsk“HowManyHiddenLayers/NeuronstoUseinArtificialNeuralNetworks?” JasonBrownlee,HowtoConfiguretheNumberofLayersandNodesinaNeuralNetwork LavanyaShukla,DesigningYourNeuralNetworks 發表評論 登录 所有評論 還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布. 相關文章 centosftp安裝 一、安裝 本實驗的環境爲centos7.6 yuminstallvsftpd ftp分匿名模式和非匿名模式,匿名模式使用anonymous用戶進行上傳和下載,非匿名模式就是需要指定linux用戶名和密碼。

二、配置參數文件 以下兩種模式 小豹子加油 2022-07-2314:34:06 centossftp安裝 一、安裝 本實驗的環境爲centos7.6 查看sftp運行需要安裝的rpm包,一般來說,這些包都是默認安裝的,如果沒有就自己安裝下 rpm-qa|grepssh openssh-server-7.4p1-16.el7.x86_64 小豹子加油 2022-07-2314:34:06 java後臺校驗格式 packagecom.hengxin.qianee.utils; importjava.net.InetAddress; publicclassRegexUtils{ /** *用戶名是否符合規 weiguoyuan 2022-07-2314:30:46 代碼優雅 1.功能複用,寫成公共方法。

2.mybatis不應該用select*  -//mybatis.or weiguoyuan 2022-07-2314:30:46 JSTL將double值保留小數點後兩位 1切面是個類 2 weiguoyuan 2022-07-2314:30:36 mybatis注意問題



請為這篇文章評分?