點擊上方「AI有道」,選擇「星標公眾號」
重磅乾貨,第一時間送達!
來源 | 論智(ID:jqr_AI)
該使用多少層隱藏層?使用隱藏層的目的是什麼?增加隱藏層/神經元的數目總能給出更好的結果嗎?人工神經網絡(ANN)初學者常常提出這些問題。如果需要解決的問題很複雜,這些問題的答案可能也會比較複雜。希望讀完這篇文章後,你至少可以知道如何回答這些問題。
在計算機科學中,借鑑了生物神經網絡的ANN用一組網絡層表示。這些網絡層可以分為三類:輸入層、隱藏層、輸出層。
輸入層和輸出層的層數、大小是最容易確定的。每個網絡都有一個輸入層,一個輸出層。輸入層的神經元數目等於將要處理的數據的變量數。輸出層的神經元數目等於每個輸入對應的輸出數。不過,確定隱藏層的層數和大小卻是一項挑戰。
下面是在分類問題中確定隱藏層的層數,以及每個隱藏層的神經元數目的一些原則:
下面我們將舉例說明這一確定隱藏層層數、大小的簡單方法。
讓我們先來看一個簡單的分類問題。每個樣本有兩個輸入和一個表示分類標籤的輸出,和XOR問題很像。
首先需要回答的問題,是否需要隱藏層。關於這個問題,有一條一般規則:
在神經網絡中,若且唯若數據必須以非線性的方式分割時,才需要隱藏層。
回到我們的例子。看起來一條直線搞不定,因此,我們需要使用隱藏層。在這樣的情形下,也許我們仍然可以不用隱藏層,但會影響到分類精確度。所以,最好使用隱藏層。
已知需要隱藏層,那麼接下來就需要回答兩個重要問題:
需要多少層?
每層需要多少神經元?
按照我們之前提到的流程,首先需要畫出分割的邊界。如下圖所示,可能的邊界不止一種。我們在之後的討論中將以下圖右部的方案為例。
根據之前的原則,接下來是使用一組線段表示這一邊界。
使用一組線段表示邊界的想法來自於神經網絡的基礎構件——單層感知器。單層感知器是一個線性分類器,根據下式創建分界線:
y = w1x1 + w2x2 + ⋯ + wixi + b
其中xi是第i項輸入,wi是權重,b是偏置,y是輸出。因為每增加一個隱藏單元都會增加權重數,所以一般建議使用能夠完成任務的最少數量的隱藏單元。隱藏神經元使用量超出需要會增加複雜度。
回到我們的例子上來,人工神經網絡基於多個感知器構建,這就相當於網絡由多條直線組成。
因此我們使用一組線段替換邊界,以分界曲線變向處作為線段的起點,在這一點上放置方向不同的兩條線段。
如下圖所示,我們只需要兩條線段(分界曲線變向處以空心圓圈表示)。也就是兩個單層感知器網絡,每個感知器產生一條線段。
只需兩條線段就可以表示邊界,因此第一個隱藏層將有兩個隱藏神經元。
到目前為止,我們有包含兩個隱藏神經元的單隱藏層。每個隱藏神經元可以看成由一條線段表示的一個線性分類器。每個分類器(即隱藏神經元)都有一個輸出,總共有兩個輸出。但我們將要創建的是基於單個輸出表示分類標籤的一個分類器,因此,兩個隱藏神經元的輸出將被合併為單個輸出。換句話說,這兩條線段將由另一個神經元連接起來,如下圖所示。
很幸運,我們並不需要額外添加一個包含單個神經元的隱藏層。輸出層的神經元正好可以起到這個作用,合併之前提到的兩個輸出(連接兩條線段),這樣整個網絡就只有一個輸出。
整個網絡架構如下圖所示:
我們再來看一個分類問題的例子。和上面一個例子相似,這個例子也有兩個分類,每個樣本對應兩個輸入和一個輸出。區別在於邊界比之前的更複雜。
遵照之前的原則,第一步是畫出邊界(如下圖左半部分所示),接著是將邊界分成一組線段,我們將使用ANN的感知器建模每條線段。在畫出線段之前,首先標出邊界的變向處(下圖右半部分中的空心圓圈)。
問題在於需要幾條線段?頂部和底部的變向處各需要兩條線段,這樣總共是4條線段。而當中的變向處可以和上下兩個變向處共用線段。所以我們需要4條線段,如下圖所示。
這意味著第一個隱藏層將包含4個神經元。換句話說,由單層感知器構成的4個分類器,每個分類器各生成一個輸出,共計4個輸出。接下來需要將這些分類器連接起來,使得整個網絡生成單個輸出。換句話說,通過另外的隱藏層將這些線段連接起來,以得到單條曲線。
網絡的具體布局取決於模型設計者。一種可能的網絡架構是創建包含兩個隱藏神經元的第二隱藏層。其中第一個隱藏神經元連接前兩條線段,最後一個隱藏神經元連接後兩條線段,如下圖所示。
到目前為止,我們有兩條曲線,也就是兩個輸出。接下來我們連接這兩條曲線,以得到整個網絡的單個輸出。在這一情形下,輸出層的神經元可以完成最終的連接,而無需增加一個新的隱藏層。最後我們得到了如下曲線:
這就完成了網絡的設計,整個網絡架構如下圖所示:
【推薦閱讀】
乾貨 | 公眾號歷史文章精選(附資源)
我的深度學習入門路線
我的機器學習入門路線圖