天天看點

第九章 前向神經網絡(一)

第一節 多層感覺機和布爾函數

問題一:多層感覺機表示異或邏輯時至少需要幾個隐含層(僅考慮二進制輸入)

首先是沒有隐含層,等同于邏輯回歸,設輸入變量為x,y,有 Z = s i g m o d ( A X + B Y + C ) Z=sigmod(AX+BY+C) Z=sigmod(AX+BY+C)顯然z是關于X和Y遞增的,然是根據異或運算的真值表:X同為0時,Y增加,Z也增加,表明Y的系數為正;X同為1時,Y增加,Z減小,表明Y的系數為負,自相沖突,是以不帶隐含層是不行的。

考慮一個隐含層時,需要知道一個重要定理:通用近似定理:一個前饋神經網絡如果具有線性輸出層和至少一層具有任何一種“擠壓”性質的激活函數的隐藏層,當給予網絡足夠數量的隐藏單元時,可以以任意精度近似從一個有限維空間到另一個有限維空間的波萊爾可測函數。是以我們可以認為常用的激活函數和目标函數時通用近似定理适用的子集。

在這裡可以構造一個隐含層的多層感覺機就可以設計異或函數,并且需要三個節點(包括隐含層兩個節點Z1、Z2和輸出層一個Z)

Z1的輸出: H 1 = X + Y − 1 H_1=X+Y-1 H1​=X+Y−1

Z2的輸出: H 2 = − X − Y + 1 H_2=-X-Y+1 H2​=−X−Y+1

然後輸出層Z: Z = − Z 1 − Z 2 + 1 Z=-Z_1-Z_2+1 Z=−Z1​−Z2​+1

其實就是設定 Z 1 Z_1 Z1​的權重都是1,偏置為-1; Z 2 Z_2 Z2​的權重都是-1,偏置為1;輸出層的權重都是-1,偏置為1就行。這樣的真值表就和異或的一樣了。

問題2:如果隻有一個隐層,需要多少隐節點能夠實作包含n元輸入的任意布爾函數?

這個問題需要了解析取範式(DNF),由有限個簡單合取式構成的析取式。學這個是在逆否命題那裡,非q,則p的那種,将命題寫作這種形式。析取是或的意思。

先證明單個隐節點可以表示任意合取範式(滿足合取範式的定義)。通過設定某變量 X i X_i Xi​若出現形式為正,則權重為1,若非,則權重為-1,若沒有出現則權重0.偏置設定為變量總數取負加一。采用ReLu激活函數,當且僅當所有出現的布爾變量均滿足條件時,隐藏單元激活,(輸出1)(均為正,輸出為1,均為非,輸出為1,若有變量沒有出現,則輸入ReLu的不是0就是負數,那麼不滿足合取範式定義,同樣輸出為0,即未激活)然後,令所有隐藏單元到輸出層的參數為1,偏置為0,這樣,當且僅當所有的隐藏單元都未被激活時,才輸出0,否則都是正數,起到了析取的作用。

用卡諾圖表示析取式,這個很有意思,

然後回答問題:最差情況下,需要多少個隐藏節點來表示包含n元輸入的布爾函數?問題轉化為:尋找“最大不可規約的”n元析取範式,等價于最大不可規約的卡諾圖。即間隔填充網格即可。所有n元布爾函數的析取範式最多包含 2(n-1) 個不可規約的合取範式,即對于單隐層的感覺機,需要2(n-1) 個隐節點實作。

問題3:考慮多隐層的情況,實作包含n元輸入的任意布爾函數最少需要多少個網絡節點和網絡層?

這個問題看着賊複雜,一臉懵逼.jpg

先考慮在問題一的中途一個結論:**實作一個異或需要三個節點,一個隐含層的兩個加上輸出層的一個,顯然我們還能記得應該如何給這三個節點配置權重和偏置來實作異或的真值表。

然而解答不難,先不說最少實作,

那麼n元輸入的情況下,前兩個變量用三個節點實作一個異或,下一個變量與前兩個變量的輸出做異或,又需要三個節點,那麼這樣的異或需要 3 ( n − 1 ) 3(n-1) 3(n−1)個節點,多隐層将指數級的節點O(2(n-1)) 直接下降到了O(3(n-1)) . 同時,需要2(n-1)層網絡層。

下面減少層數,将變量兩兩配對,這樣最少的網絡層數是 2 l o g 2 N 2log_2N 2log2​N(向上取整),節點數的話,就沒啥意思了,n個節點,疊個小山,算一下就行。我算了個這 l o g 2 N ∗ ( l o g 2 N + 1 ) / 2 ∗ 3 log_2N*(log_2N+1)/2*3 log2​N∗(log2​N+1)/2∗3

好的,今天就這樣吧。

繼續閱讀