【神經網絡和深度學習】筆記 - 第四章 神經網絡可以實現任意函數的直觀解釋


文章導讀:

1. 兩個前提

2. 單輸入單輸出的情況

3. 一般情形:多輸入多輸出情況 

4. 使用sigmoid以外的神經元

5. 修正階躍函數

6.總結

 

神經網絡最令人激動的一個性質,就是它可以實現任意功能的函數。而且是即使對於只有一個隱藏層的神經網絡,這個結論依然成立。

大部分神經網絡的使用者都知道這個性質,但是並不理解為什么神經網絡會有這樣的性質。而其理論證明對於非數學專業的同學來說並不好理解,所以本章旨在用直觀的方式幫助大家理解這個性質。

 

一. 兩個前提

神經網絡可以計算任意函數其實是有前提的。

首先要明白的是它並不是可以完全准確的計算原函數的值,但是通過增加隱藏層神經元的值我們可以越來越逼近原函數。就是說對於一個需要實現的函數$f(x)$,要求實現精度為$\epsilon > 0$,也就是需要足夠的隱藏層神經元使得神經網絡輸出$g(x)$滿足$|g(x) - f(x)| < \epsilon$對所有輸入$x$。

第二個前提是被模擬的函數是連續函數,不過有的時候對於非連續函數,神經網絡得到的連續近似已經足夠滿足要求了。

 

二. 單輸入單輸出的情況

先考慮最基礎的單輸入單輸出的函數情況。為了理解怎么利用神經網絡去計算給定函數$f$,我們先考慮只有一個隱藏層的情況,其中含有兩個神經元。

考慮隱藏層第一個神經元,其輸出由$\sigma (wx+b)$決定。改變其參數$w$和$b$可以發現如下規律:

  • 改變b不會使函數形狀發生改變,只會使其左右偏移。因為$f(x) = \frac{1}{1+e^{wx+b+b_0}} = \frac{1}{e^{w(x+\frac{b_0}{w}) + b}}$,$b_0>0$時即$b$增大時,相當於圖像向左移動,$b_0<0$時即$b$減小時,相當於圖像向右移動。
  • 改變w則會改變函數的形狀,因為$f(x) = \frac{1}{1+e^{(w+w_0)x+b}} = \frac{1}{1+e^{wx\frac{w+w_0}{w} + b}}$,相當於在橫軸上進行了放縮。當$|w|$($w<0$的時候,函數會在x軸上反轉,不過不影響我們理解)變的越來越大的時候,函數就會變的越來越陡峭。實際中觀察,當$w=100$左右時,函數的陡峭程度已經接近於階躍函數了。

 

繼續增大$w$的值使得其輸出更加接近階躍函數:

當我們對隱藏層的神經元的輸出進行加權求和的時候,分析階躍函數要比分析sigmoid函數容易。我們很容易可以知道兩個階躍函數的和是什么形式,但是對於兩個sigmoid函數就沒有這么容易得到。所以我們先假設這些神經元輸出函數就是階躍函數,當然這也是一種近似,我們隨后再看這和真正的情況相比會有什么影響。

再考慮另外一個問題,我們知道標准的$\sigma (z)$的中點在$z=0$處,當它近似為一個階躍函數的時候,階躍點在哪呢?容易知道就是在$wx+b = 0$處,即$s = -\frac{b}{w}$。於是對於已經近似被認為是階躍函數的神經元就可以只用一個參數$s = -\frac{b}{w}$來代替之前的兩個參數$w$和$b$。

接着再來考慮整個神經網絡的情況。

右邊展示的是加權輸出的結果$w_1 a_1 + w_2 a_2$,其中$a_1$和$a_2$分別是隱藏層兩個神經元的輸出。不過注意到這里神經網絡最終的輸出為$\sigma (w_1 a_1 + w_2 a_2 +b)$。

通過調節這些參數可以觀察到:

  • 調節$s_1$的大小$s_2$分別控制上下兩個神經元的激活前后順序。例如$s_1<s_2$的情況下,右邊函數的第一個階梯由第一個神經元輸出決定,因為它先被激活,第二個階梯才是兩者之和
  • 調節$w_1$和$w_2$分別控制兩個神經元輸出在輸出神經元的權重,當其中一個為0時,只剩下一個輸入,右邊的函數也顯示為只有一個階躍函數。

最后,試着讓$w_1 = 0.8, w_2 = -0.8$,然后$s_1 = 0.4, s_2 = 0.6$就得到一個在(0.4, 0.6)上的門函數:

 如果我們固定$s_1$和$s_2$,然后$w_1 = -w_2$,這樣就可以將門函數看作是只有一個參數$h$的模型,其中$h = w_1$,對應着就是門函數的“門梁”的位置。

通過組合神經元我們就可以輕易得到兩個門函數組合的情況:

同樣的方法,我們可以構造任意數量任意高度的門函數。因為對於[0,1]這個區間的划分是可以有無限多N個的,只要使用N對隱藏層神經元就,然后分別配上對應的$h$就可以達到要求了。

上圖就是一個五個寬度一樣的門函數的情形,高度由各自的參數$h$決定。但是僅僅這樣就能說明神經網絡可以計算任意函數嗎?看下面這個例子:

這個函數來自:

$$f(x)=0.2 + 0.4x^2 + 0.3x sin(15x) + 0.05 cos(50x) \quad (113)$$

看上去這個函數形式和神經網絡完全沒什么聯系,接下來就來看看神經網絡是怎么去近似計算它的。

前面提到過$w_1 a_1 + w_2 a_2 + ...$並不是神經網絡最終輸出,最終輸出為$\sigma (\sum_j w_j a_j + b)$,那么為了讓最終輸出為需要的函數$f(x)$,就要求$\sigma$函數的輸入為$\sigma^{-1} (f(x))$,即隱藏層輸出的加權和為$\sigma^{-1} (f(x))$,其中$\sigma^{-1}$為$\sigma$的反函數。

 

 於是只要有方法可以讓隱藏層輸出和近似等於上面反函數,就相當於神經網絡的最終輸出近似等於$f(x)$了。對於上面五個門函數的情形,通過調節各自的$h$得到符號近似要求的結果:

這雖然只是一個粗略的近似,結果也不唯一,但是只要通過增加門函數的個數,即增加隱藏層神經元的個數,就可以讓結果越來越精確。將這個得到的模型轉換到我們的神經網絡參數上,隱藏層的$w$取了很大的數$w=1000$,由於$s=-\frac{b}{w}=0.2$,得到$b = -1000*0.2=-200$。

輸出層的權重由$h$決定,例如第一個$h=-1.3$,說明它代表的兩個權重分別為-1.3和1.3,以此類推,輸出層的bias這里被設置為0。

這樣就完成了通過構造一個神經網絡來逼近目標函數的目的了,而且通過增加隱藏層神經元的個數可以使得這個近似結果更加准確。事實上,我們的目標函數$f(x)=0.2+0.4x^2+0.3sin(15x)+0.05cos(50x)$的形式無關緊要,本質上我們使用一個單層神經網絡構建了一個lookup表,不同區間對應不同的值,區間分的越細小,就越准確。

 

三. 一般情形:多輸入多輸出情況 

 先考慮兩個輸入的情況:

我們將$x$和$y$看作是變量,其加權輸出和為因變量,這樣就將之前的平面圖像轉變為了3d圖像,不妨先設$w_2 = 0$,這樣圖像為:

可以看到平行於x軸的任意截面都是之前看到的平面上的曲線形式。同樣的原理,改變$w_1$和$b$分別改變曲線的形狀和位置。同樣將$w_1$設定為一個很大的數,曲線轉變為階躍函數,位置為$s_x = -\frac{b}{w_1}$:

這里對應着$w_1 = 1000, w_2 = 0$。同樣可以設定$w_2 = 1000, w_1 = 0$這樣就成了平行於y軸的曲線:

接着通過組合,我們得到了對應門函數的一個3d情況:

注意這里的y並沒有起到作用,和y相連的權重都被設置成了0。類似也有只有y的版本,將和x的相連的權重設置為0:

如果我們將這兩個方向垂直的門函數相加呢:

改變$h$的大小可以改變圖像的高度,很容易可以知道中間最高的地方是邊上的兩倍高。我們於是想到能否用中間的高度作為中間區間上的值,這種方法去將定義域分割成一個個區間呢,然后每個區間對應一個值,區間分的越細就越逼近原函數。類似於之前單輸入的情況,這次是一個二維的lookup表。

但是這就需要我們得到的是一個下圖類似的塔函數:

但是我們得到的情況是除了中間是高的($2h$),邊上並不是平的,也有一定的高度($h$),並不滿足塔函數的條件。怎么將其轉變為塔函數的形狀呢?注意到,這里只是隱藏層的加權輸出和,並不是輸出神經元的輸出,也就是說還有一個$\sigma$函數的作用沒有考慮,就可以嘗試調節輸出神經元的bias$b$來進行調節。

考慮門函數的輸出值由$h$決定,我們可以得到神經網絡的輸出值(不再是隱藏層的輸出了)中間區域的值近似為$f_{max} = \frac{1}{1+e^{-(2h+b)}}$,邊上區域的值近似為$f_{min} = \frac{1}{1+e^{-(h+b)}}$。我們想要$f_{max}$能夠近似等於需要的值$g$,這種情況下得到條件一:$2h+b=c$,其中$c$為一個常數。又為了讓$f_{min} \approx 0$,就需要條件二:$h+b<<0$。這樣就可以通過調節$h$與$b$的值使得這兩個條件都成立,因為只要$h$足夠大,$h+b = c - h$就會足夠小。不妨選擇$h=10, b \approx -\frac{3h}{2}$,得到:

注意到這里的圖像是輸出神經元的輸出,也就是經過$\sigma$函數后的結果。可以看到,這已經得到了一個形式不錯的塔函數了,繼續增加$h$的值,調節$b=-\frac{3h}{2}$,效果會更加明顯。

接着我們將兩個類似這樣的神經網絡組合去得到兩個塔函數:

每個塔函數對應着第二個隱藏層的每個神經元的輸出,調節兩個$w$的值可以分別調節其高度。同樣的方式我們可以得到任意多個自定義高度的塔函數,每個塔函數對應2維平面上的一個區域,通過這樣的2維lookup就可以使得第二個隱藏層的加權輸出可以近似等價於任意關於兩個變量的函數$f(x,y)$。

但是這畢竟不是輸出層的輸出,於是類似的方法我們使用$\sigma$函數的反函數,讓第二個隱藏層加權輸出等價於$\sigma^{-1} (f(x,y))$即可。

如果輸入變量個數多余兩個呢?

先看一下三個變量的情況$x_1, x_2, x_3$。類似於上面的情況,下面這個神經網絡可以得到一個四維空間上的塔函數:

這里$x_1,x_2,x_3$為神經網絡的輸入,$s_1,t_1,s_2,t_2$都是控制門函數的位置,其中第一層隱藏層的權重已經足夠大了使得它們各自的輸出為階躍函數,然后各自的偏差由$b=-sw$得到。然后第二層隱藏層的權重全部為$h$和$-h$,然后不妨令其bias為$-\frac{5h}{2}$,驗證仍然滿足之前構造塔函數的條件$h+b = -\frac{3h}{2} << 0$和$3h+b = \frac{h}{2} = c$(c為一常數)。

隨着增大$h$到一定程度,這個神經網絡於是就相當於對於3維上一塊區域$x_1 \in (s_1,t_1), x_2 \in (s_2, t_2), x_3 \in (s_3, t_3)$,其值為1,其他任意位置為0的塔函數。

通過組合這樣的神經網絡就可以將多個塔函數相組合就可以近似替代任意三個變量的函數。同樣的想法可以拓展到$m$維空間,只要記得將進行組合處的神經元bias設置為$(-m+\frac{1}{2})h$使得函數形式為中間凸起,旁邊為0。

 這樣就得到了使用神經網絡逼近任意輸出為一維的函數的方法了。但是神經網絡的輸出經常是多維的$f(x_1, ..., x_m) \in R^n$,例如前面的MNIST問題時輸出為10維,這種情況怎么處理呢?

這種情況可以看作是$n$個獨立的函數:$f^1 (x_1, ..., x_,m), f^2 (x_1, ..., x_m)$,我們分別設計神經網絡近似表示$f_1, f_2$等等,然后簡單的將它們組合即可。

拓展:

上面介紹了如何用兩個隱藏層的神經網絡去近似表示函數,能否證明只需要一層隱藏層就可以完成這樣的設計?試着在兩個輸入的情況下,依次證明:(a)除了x軸,y軸以外,可以構造任意方向的階躍函數;(b)通過將大量的(a)中的函數疊加,可以得到一個底面形狀不再是長方形而是圓形的塔函數;(c)使用這些圓形的塔函數,可以近似表示任意函數。

(a):

 先看一下之前得到的方向為什么是x軸,y軸,或者說這些方向是由什么決定的。$\frac{1}{1+e^{-(w_1 x+ w_2 y +b)}}$,之前選擇w_2為0時,得到的階躍函數時x軸方向的,可以發現階躍函數的方向是和直線$w_1 x+ w_2 y +b = 0$垂直的方向。所以說只要根據需要的方向構造與該方向垂直的直線$w_1 x + w_2 y + b = 0$中的$w_1$和$w_2$即可,也就是說現在的階躍函數的構造不僅僅依靠一個輸入神經元,而是兩個都需要。

(b):

兩個長方形垂直相交的重疊部分是方形,如果三個,四個呢?這個也許不好想象,但是換一個思路,對一個長方形繞着其中心旋轉,中間不變的部分就是以中心為圓心的內切圓,所以只要組合足夠多不同方向的(a)中階躍函數,就可以得到近似圓形底面的塔函數。

(c):

長方形區域很容易可以拼成一塊大的區域,但是圓形卻不行,它們之間總是有縫隙的。可以通過本文后面部分介紹的方法,將這些未覆蓋的部分當成是“失敗區域”,使用函數近似表示原函數的$\frac{1}{M}$,每次移動$\frac{1}{M}$單位個步長,最后疊加就得到覆蓋滿所有區域的目標函數。

這里按照作者給出的提示解答完了這三步,但是我還是不大清楚這和能用一個隱藏層有什么聯系,因為圓形的塔函數依然面臨之前的一個問題,就是除了中間高的區域外,還存在邊上的不為0的區域,還是要依靠一個神經元將其轉變為真正的塔的形式,中間凸出,邊緣為0。我理解的一個隱藏層可以解決的原因是類似於在進行傅立葉級數展開的時候,我們將函數表示成一組三角函數基函數的線性疊加。其實任意連續函數都可以看作為一組基函數的疊加,然后在一個隱藏層選擇合適的基函數疊加即可。

 四. 使用sigmoid以外的神經元

前面已經證明了以sigmoid神經元為基礎的神經網絡可以計算任意函數。回憶一下sigmoid函數的形式,對於輸入$z=\sum_j w_j x_j +b$,$\sigma(z)$的形式為:

如果將其換成一個不一樣的激活函數$s(z)$:

會出現什么情況呢?

同樣得方法,我們用這個函數也可以得到階躍函數。試着增大$w=100$:

類似於sigmoid函數的情況,新的激活函數一樣會收縮,隨着$w$的繼續增大,它最終也會成為一個階躍函數的近似表示。然后通過改變$b$的值就能實現對該階躍函數的移動。使用之前一樣的方法就可以構造神經網絡近似表示所需的目標函數。

那么是不是所有的激活函數$s(z)$都滿足這樣的要求可以得到階躍函數呢?事實上只需要$s(z)$在$z\rightarrow -\infty$和$z \rightarrow \infty$時極限存在,並且這兩個極限的值不相等即可。相等的話就不是階躍了,而是一個“平”的常量函數了。激活函數滿足這些性質之后,神經網絡就可以逼近任意函數了。

拓展:

拓展一:

證明之前介紹的RELU神經元不滿足上述的條件,但是RELU函數一樣可以構造上述神經網絡近似表示任意函數。

答案:

RELU在$x>0$時是一個線性增長的函數,當$x\rightarrow \infty$時,$RELU(x) \rightarrow \infty$,極限值並不存在,所以不滿足要求。

雖然一個RELU函數按照之前改變參數的方法怎么也變不成階躍函數,但是可以通過兩個RELU函數相疊加得到。對於$y=wx$和$y=-wx+b(k>0)$,后者相對前者向右移動了$\frac{b}{w}$,於是兩者相加得到了一個分段函數

$$s(x) = \left\{\begin{align*} & 0 \quad if x \leqslant 0 \\ & wx \quad if 0<x\leqslant \frac{b}{w} \\ & b \quad if x > \frac{b}{w} \end{align*}\right.$$

通過增大$w$就可以減小$\frac{b}{w}$從而讓這個分段函數中間增長的部分變的更窄,使之近似為階躍函數。

 

拓展二:

考慮激活函數為線性函數$s(z)=z$的神經元,證明該函數不滿足上述條件,也無法構造上述神經網絡近似表示任意函數。

答案:

這個函數在$x\rightarrow \infty$和$x \rightarrow -\infty$處的極限都不存在,顯然不滿足上面的條件。

線性函數自身不具有這樣的性質,線性函數的線性組合還是連續的線性函數,依然是無法滿足階躍函數的要求的。

五. 修正階躍函數

之前已經證明了我們通過對神經元進行組合得到近似的階躍函數,但這始終是近似表示,其中還存在一段函數並非階躍函數的“失敗區域”:

雖然通過增大wegiths,可以使得這塊區域越來越窄,也就是說與階躍函數的差別越來越小。不過還有其他的處理這個問題的方法的話當然就更好了。

事實上,這個問題並不難解決。設想對於一個一維函數$f(x)$,按照之前的方法,我們需要隱藏層的輸出可以表示成:

按照之前的方法,我們使用一系列的門函數去表示這個函數:

可以看到,只要門函數足夠多,門的寬度足夠窄就可以使得對目標函數的近似表示越好,除了在交界處的“失敗區域”。

這次我們不用上面的近似,我們使用目標函數值的一半作為近似對象,$\sigma ^{-1}(\frac{f(x)}{2})$:

接着使用另外一套隱藏層去近似表示這樣的函數:它是上面門函數組成的函數橫向平移半個門寬度得到的:

當我們把這兩個函數疊加到一起的時候就會得到一個$\sigma ^{-1}(f(x))$的近似。這個近似雖然還是會存在“失敗區域”,但是比之前的近似已經好多了。這是因為,對於一個點在一個近似函數的“失敗區域”時,它將不會出現在另一個近似函數的“失敗區域”。

通過減小每次移動的步長為窗口的$\frac{1}{M}$,將M個$\sigma^ {-1}(f(x)/M)$的近似函數疊加,即得到更好的原始函數的近似表示。

六.總結

這一章描述了神經網絡擬合函數的普遍性,但是這當然不是實際中我們使用神經網絡計算的方式。不過它讓我們知道以后在面對一個問題的時候,不是去懷疑神經網絡能不能表示這個函數,而是考慮更重要的事,怎么才能找到一個這個函數的好的近似。

我們的討論用了兩層神經元,不過一層神經元也可以完成這樣的工作。那我們為什么還要去用那些層數更多的深度神經網絡呢?

理論上這是可能的,不過實際上我們有很多理由相信深度網絡更好。在第一章已經討論過,現實中的問題和知識體系往往是由淺入深的層級關系,而深度網絡的層級結構就非常切合這一點。例如對於圖像識別的問題,只是着眼於單個像素點的理解當然是不夠的,我們更希望它能夠識別出更復雜的模式:從簡單的線條到復雜的幾何形狀等等。在隨后的章節也會看到,深度網絡對於這種層級的問題處理結果的確要好於淺層網絡。

總之就是,單層的神經網絡就已經可以計算任何函數,但是經驗告訴我們,在解決現實問題上,深度網絡更加適合。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM