一個最原始粗暴的擬合任意函數的思路,是將函數切成很多段線性函數,之后用邏輯門控制當x在哪一個區間時,某些邏輯門被激活,對應的線性函數的權重w與偏移量b在邏輯門的包裹下變成非0,計算出y在這一段的輸出值。
需要推導出擬合函數y=f(x)需要哪些邏輯門,以及如何使用神經網絡構建這些邏輯門。
開關函數 s: 當u>0時s(u)=1,否則s(u)=0 。右上標數字代表第幾層開關。
首先最基礎的是大於小於開關門:
${s^{(1)}}(x>0) \ni t{\rm{ = Relu}}({\rm{1 - 1000*Relu}}({\rm{u}}))$
使用Relu激活函數構建的開關門比起使用sigmoid函數構建的開關門
${s^{(1)}}(x>0) \ni t={\rm{\sigma (1000x)}}$
的作用是相同的,都是讓x>0時t=1,否則t=0
通過平移技巧:f(x-p)等價於f(x)平移+p距離,可以指定門的位置。
接下來是將開關門進行與/或組合,得到的門。
假如t1負責激活x>6, t3負責激活x>9,那么定義${s^{(2)}}({s^{(1)}}(x)) \ni$ t2 = (t1 and (not t3)) = $s( t1 - t3)$ ,即可用t2描述 6<x<=9的區間。
類似的,也可以定義 ${s^{(2)}}({s^{(1)}}(x)) \ni$ t4 = ((not t1) or t3) = $s( - t1 + t3 + 1)$ ,即可用t4描述 x<6 or x>=9 的區間。
調用上一層的邏輯組合,即可獲得更復雜表達的門,例如XOR門:
((not t1) and t3) or (t1 and (not t3)) 描述的實數區間其實並不存在
但如果可供描述的區間增多,是允許描述 (6<x<=9) or (14 < x < =17) 這樣的區間的。
可以看出隨着邏輯層數的增加,是允許用一個開關來描述任意復雜的輸入區間的。既當x落在該輸入區間(partition)內的時候,描述它的開關門的值為1,否則為0。
用個人習慣的描述方式來講,就是通過邏輯門組合出的能夠激活某個神經元的區間,叫做該神經元的激活響應區域(partition)。
這里使用了神經網絡以及Relu函數構建了一個基礎大於/小於門。上述描述的所有門都可以通過類似的方法構建。
既然已經構建了描述區間的門,那么就可以開始擬合函數了。
考慮任意函數,都可以被近似為多段線性函數。簡便起見,假設三段線性函數的兩個分割點是x=6以及x=9
b是偏移量,t是激活門,當x落在對應分段區間i內,激活門 t_i=1,否則t_i = 0
y的值可以分拆成ws的值與bt的值。下面畫出了bt與s的值。
只使用“門”結構t 乘以偏移量畢竟只能用水平線來擬合函數,雖然理論上已經可以近似出所有函數了,但是並不夠優雅。
這時候可以讓“坡”結構s登場了,既平移過后的Relu函數。
這里嘗試結合“門”與“坡” ,再添加一些Identity映射,即可完成對任意函數y的近似擬合。
描述y所需的輸入區間(partition)越多,需要的神經元數量越多。或是利用復雜邏輯增加網絡層數來縮減隱層的節點個數。