Python实战RBF神经网络
程序員A:哥們兒,最近手頭緊,借點(diǎn)錢(qián)? 程序員B:成啊,要多少? A:1000行不? B:咱倆誰(shuí)跟誰(shuí)!給你湊個(gè)整,這1024,拿去吧。
之前我們講了神經(jīng)網(wǎng)絡(luò),人工神經(jīng)網(wǎng)絡(luò)是受到人類(lèi)大腦結(jié)構(gòu)的啟發(fā)而創(chuàng)造出來(lái)的,這也是它能擁有真智能的根本原因。在我們的大腦中,有數(shù)十億個(gè)稱(chēng)為神經(jīng)元的細(xì)胞,它們連接成了一個(gè)神經(jīng)網(wǎng)絡(luò)。
人工神經(jīng)網(wǎng)絡(luò)正是模仿了上面的網(wǎng)絡(luò)結(jié)構(gòu)。下面是一個(gè)人工神經(jīng)網(wǎng)絡(luò)的構(gòu)造圖。每一個(gè)圓代表著一個(gè)神經(jīng)元,他們連接起來(lái)構(gòu)成了一個(gè)網(wǎng)絡(luò)。
人類(lèi)大腦神經(jīng)元細(xì)胞的樹(shù)突接收來(lái)自外部的多個(gè)強(qiáng)度不同的刺激,并在神經(jīng)元細(xì)胞體內(nèi)進(jìn)行處理,然后將其轉(zhuǎn)化為一個(gè)輸出結(jié)果。人工神經(jīng)元也有相似的工作原理。
上面的x是神經(jīng)元的輸入,相當(dāng)于樹(shù)突接收的多個(gè)外部刺激。w是每個(gè)輸入對(duì)應(yīng)的權(quán)重,它影響著每個(gè)輸入x的刺激強(qiáng)度。
大腦的結(jié)構(gòu)越簡(jiǎn)單,那么智商就越低。單細(xì)胞生物是智商最低的了。人工神經(jīng)網(wǎng)絡(luò)也是一樣的,網(wǎng)絡(luò)越復(fù)雜它就越強(qiáng)大,所以我們需要深度神經(jīng)網(wǎng)絡(luò)。這里的深度是指層數(shù)多,層數(shù)越多那么構(gòu)造的神經(jīng)網(wǎng)絡(luò)就越復(fù)雜。
訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的過(guò)程就叫做深度學(xué)習(xí)。網(wǎng)絡(luò)構(gòu)建好了后,我們只需要負(fù)責(zé)不停地將訓(xùn)練數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)中,它內(nèi)部就會(huì)自己不停地發(fā)生變化不停地學(xué)習(xí)。打比方說(shuō)我們想要訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別貓。我們只需要不停地將貓的圖片輸入到神經(jīng)網(wǎng)絡(luò)中去。訓(xùn)練成功后,我們?nèi)我饽脕?lái)一張新的圖片,它都能判斷出里面是否有貓。但我們并不知道他的分析過(guò)程是怎樣的,它是如何判斷里面是否有貓的。就像當(dāng)我們教小孩子認(rèn)識(shí)貓時(shí),我們拿來(lái)一些白貓,告訴他這是貓,拿來(lái)一些黑貓,告訴他這也是貓,他腦子里會(huì)自己不停地學(xué)習(xí)貓的特征。最后我們拿來(lái)一些花貓,問(wèn)他,他會(huì)告訴你這也是貓。但他是怎么知道的?他腦子里的分析過(guò)程是怎么樣的?我們無(wú)從知道~~
只要模型是一層一層的,并使用AD/BP算法,就能稱(chēng)作 BP神經(jīng)網(wǎng)絡(luò)。RBF 神經(jīng)網(wǎng)絡(luò)是其中一個(gè)特例。本文主要包括以下內(nèi)容:
什么是徑向基函數(shù)
RBF神經(jīng)網(wǎng)絡(luò)
RBF神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)問(wèn)題
RBF神經(jīng)網(wǎng)絡(luò)與BP神經(jīng)網(wǎng)絡(luò)的區(qū)別
RBF神經(jīng)網(wǎng)絡(luò)與SVM的區(qū)別
為什么高斯核函數(shù)就是映射到高維區(qū)間
前饋網(wǎng)絡(luò)、遞歸網(wǎng)絡(luò)和反饋網(wǎng)絡(luò)
完全內(nèi)插法
一、什么是徑向基函數(shù)
1985年,Powell提出了多變量插值的徑向基函數(shù)(RBF)方法。徑向基函數(shù)是一個(gè)取值僅僅依賴(lài)于離原點(diǎn)距離的實(shí)值函數(shù),也就是Φ(x)=Φ(‖x‖),或者還可以是到任意一點(diǎn)c的距離,c點(diǎn)稱(chēng)為中心點(diǎn),也就是Φ(x,c)=Φ(‖x-c‖)。任意一個(gè)滿(mǎn)足Φ(x)=Φ(‖x‖)特性的函數(shù)Φ都叫做徑向基函數(shù),標(biāo)準(zhǔn)的一般使用歐氏距離(也叫做歐式徑向基函數(shù)),盡管其他距離函數(shù)也是可以的。
RBF網(wǎng)絡(luò)能夠逼近任意非線性的函數(shù)。可以處理系統(tǒng)內(nèi)難以解析的規(guī)律性,具有很好的泛化能力,并且具有較快的學(xué)習(xí)速度。當(dāng)網(wǎng)絡(luò)的一個(gè)或多個(gè)可調(diào)參數(shù)(權(quán)值或閾值)對(duì)任何一個(gè)輸出都有影響時(shí),這樣的網(wǎng)絡(luò)稱(chēng)為全局逼近網(wǎng)絡(luò)。
由于對(duì)于每次輸入,網(wǎng)絡(luò)上的每一個(gè)權(quán)值都要調(diào)整,從而導(dǎo)致全局逼近網(wǎng)絡(luò)的學(xué)習(xí)速度很慢,比如BP網(wǎng)絡(luò)。如果對(duì)于輸入空間的某個(gè)局部區(qū)域只有少數(shù)幾個(gè)連接權(quán)值影響輸出,則該網(wǎng)絡(luò)稱(chēng)為局部逼近網(wǎng)絡(luò),比如RBF網(wǎng)絡(luò)。接下來(lái)重點(diǎn)先介紹RBF網(wǎng)絡(luò)的原理,然后給出其實(shí)現(xiàn)。先看如下圖
最常用的徑向基函數(shù)是高斯核函數(shù) ,形式為 k(||x-xc||)=exp{- ||x-xc||2/(2*σ)2) } 其中x_c為核函數(shù)中心,σ為函數(shù)的寬度參數(shù) , 控制了函數(shù)的徑向作用范圍。
二、RBF神經(jīng)網(wǎng)絡(luò)
RBF神將網(wǎng)絡(luò)是一種三層神經(jīng)網(wǎng)絡(luò),其包括輸入層、隱層、輸出層。從輸入空間到隱層空間的變換是非線性的,而從隱層空間到輸出層空間變換是線性的。流圖如下:
RBF網(wǎng)絡(luò)的基本思想是:用RBF作為隱單元的“基”構(gòu)成隱含層空間,這樣就可以將輸入矢量直接映射到隱空間,而不需要通過(guò)權(quán)連接。當(dāng)RBF的中心點(diǎn)確定以后,這種映射關(guān)系也就確定了。而隱含層空間到輸出空間的映射是線性的,即網(wǎng)絡(luò)的輸出是隱單元輸出的線性加權(quán)和,此處的權(quán)即為網(wǎng)絡(luò)可調(diào)參數(shù)。其中,隱含層的作用是把向量從低維度的p映射到高維度的h,這樣低維度線性不可分的情況到高維度就可以變得線性可分了,主要就是核函數(shù)的思想。這樣,網(wǎng)絡(luò)由輸入到輸出的映射是非線性的,而網(wǎng)絡(luò)輸出對(duì)可調(diào)參數(shù)而言卻又是線性的。網(wǎng)絡(luò)的權(quán)就可由線性方程組直接解出,從而大大加快學(xué)習(xí)速度并避免局部極小問(wèn)題。
徑向基神經(jīng)網(wǎng)絡(luò)的激活函數(shù)可表示為:
其中xp
徑向基神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)可得到網(wǎng)絡(luò)的輸出為:
當(dāng)然,采用最小二乘的損失函數(shù)表示:
三、RBF神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)問(wèn)題
求解的參數(shù)有3個(gè):基函數(shù)的中心、方差以及隱含層到輸出層的權(quán)值。
(1)自組織選取中心學(xué)習(xí)方法:
第一步:無(wú)監(jiān)督學(xué)習(xí)過(guò)程,求解隱含層基函數(shù)的中心與方差
第二步:有監(jiān)督學(xué)習(xí)過(guò)程,求解隱含層到輸出層之間的權(quán)值
首先,選取h個(gè)中心做k-means聚類(lèi),對(duì)于高斯核函數(shù)的徑向基,方差由公式求解:
cmax為所選取中心點(diǎn)之間的最大距離。
隱含層至輸出層之間的神經(jīng)元的連接權(quán)值可以用最小二乘法直接計(jì)算得到,即對(duì)損失函數(shù)求解關(guān)于w的偏導(dǎo)數(shù),使其等于0,可以化簡(jiǎn)得到計(jì)算公式為:
(2)直接計(jì)算法:
隱含層神經(jīng)元的中心是隨機(jī)地在輸入樣本中選取,且中心固定。一旦中心固定下來(lái),隱含層神經(jīng)元的輸出便是已知的,這樣的神經(jīng)網(wǎng)絡(luò)的連接權(quán)就可以通過(guò)求解線性方程組來(lái)確定。適用于樣本數(shù)據(jù)的分布具有明顯代表性。
(3)有監(jiān)督學(xué)習(xí)算法:
通過(guò)訓(xùn)練樣本集來(lái)獲得滿(mǎn)足監(jiān)督要求的網(wǎng)絡(luò)中心和其他權(quán)重參數(shù),經(jīng)歷一個(gè)誤差修正學(xué)習(xí)的過(guò)程,與BP網(wǎng)絡(luò)的學(xué)習(xí)原理一樣,同樣采用梯度下降法。因此RBF同樣可以被當(dāng)作BP神經(jīng)網(wǎng)絡(luò)的一種。
四、RBF神經(jīng)網(wǎng)絡(luò)與BP神經(jīng)網(wǎng)絡(luò)之間的區(qū)別
1、局部逼近與全局逼近:
BP神經(jīng)網(wǎng)絡(luò)的隱節(jié)點(diǎn)采用輸入模式與權(quán)向量的內(nèi)積作為激活函數(shù)的自變量,而激活函數(shù)采用Sigmoid函數(shù)。各調(diào)參數(shù)對(duì)BP網(wǎng)絡(luò)的輸出具有同等地位的影響,因此BP神經(jīng)網(wǎng)絡(luò)是對(duì)非線性映射的全局逼近。RBF神經(jīng)網(wǎng)絡(luò)的隱節(jié)點(diǎn)采用輸入模式與中心向量的距離(如歐式距離)作為函數(shù)的自變量,并使用徑向基函數(shù)(如Gaussian函數(shù))作為激活函數(shù)。神經(jīng)元的輸入離徑向基函數(shù)中心越遠(yuǎn),神經(jīng)元的激活程度就越低(高斯函數(shù))。RBF網(wǎng)絡(luò)的輸出與部分調(diào)參數(shù)有關(guān),譬如,一個(gè)wij值只影響一個(gè)yi的輸出(參考上面第二章網(wǎng)絡(luò)輸出),RBF神經(jīng)網(wǎng)絡(luò)因此具有“局部映射”特性。
所謂局部逼近是指目標(biāo)函數(shù)的逼近僅僅根據(jù)查詢(xún)點(diǎn)附近的數(shù)據(jù)。而事實(shí)上,對(duì)于徑向基網(wǎng)絡(luò),通常使用的是高斯徑向基函數(shù),函數(shù)圖象是兩邊衰減且徑向?qū)ΨQ(chēng)的,當(dāng)選取的中心與查詢(xún)點(diǎn)(即輸入數(shù)據(jù))很接近的時(shí)候才對(duì)輸入有真正的映射作用,若中心與查詢(xún)點(diǎn)很遠(yuǎn)的時(shí)候,歐式距離太大的情況下,輸出的結(jié)果趨于0,所以真正起作用的點(diǎn)還是與查詢(xún)點(diǎn)很近的點(diǎn),所以是局部逼近;而B(niǎo)P網(wǎng)絡(luò)對(duì)目標(biāo)函數(shù)的逼近跟所有數(shù)據(jù)都相關(guān),而不僅僅來(lái)自查詢(xún)點(diǎn)附近的數(shù)據(jù)。
2、中間層數(shù)的區(qū)別
BP神經(jīng)網(wǎng)絡(luò)可以有多個(gè)隱含層,但是RBF只有一個(gè)隱含層。
3、訓(xùn)練速度的區(qū)別
使用RBF的訓(xùn)練速度快,一方面是因?yàn)殡[含層較少,另一方面,局部逼近可以簡(jiǎn)化計(jì)算量。對(duì)于一個(gè)輸入x,只有部分神經(jīng)元會(huì)有響應(yīng),其他的都近似為0,對(duì)應(yīng)的w就不用調(diào)參了。
4、Poggio和Girosi已經(jīng)證明,RBF網(wǎng)絡(luò)是連續(xù)函數(shù)的最佳逼近,而B(niǎo)P網(wǎng)絡(luò)不是。
五、RBF神經(jīng)網(wǎng)絡(luò)與SVM的區(qū)別
SVM等如果使用核函數(shù)的技巧的話(huà),不太適應(yīng)于大樣本和大的特征數(shù)的情況,因此提出了RBF。另外,SVM中的高斯核函數(shù)可以看作與每一個(gè)輸入點(diǎn)的距離,而RBF神經(jīng)網(wǎng)絡(luò)對(duì)輸入點(diǎn)做了一個(gè)聚類(lèi)。RBF神經(jīng)網(wǎng)絡(luò)用高斯核函數(shù)時(shí),其數(shù)據(jù)中心C可以是訓(xùn)練樣本中的抽樣,此時(shí)與svm的高斯核函數(shù)是完全等價(jià)的,也可以是訓(xùn)練樣本集的多個(gè)聚類(lèi)中心,所以他們都是需要選擇數(shù)據(jù)中心的,只不過(guò)SVM使用高斯核函數(shù)時(shí),這里的數(shù)據(jù)中心都是訓(xùn)練樣本本身而已。
最后上python代碼實(shí)現(xiàn):
總結(jié)
以上是生活随笔為你收集整理的Python实战RBF神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 物联网单片机毕业设计实现
- 下一篇: python灰色预测模型步骤人口预测_人