Matlab的神經網絡工具箱實用指南上課講義_第1頁
Matlab的神經網絡工具箱實用指南上課講義_第2頁
Matlab的神經網絡工具箱實用指南上課講義_第3頁
Matlab的神經網絡工具箱實用指南上課講義_第4頁
Matlab的神經網絡工具箱實用指南上課講義_第5頁
已閱讀5頁,還剩44頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Good is good, but better carries it.精益求精,善益求善。Matlab的神經網絡工具箱實用指南-Matlab的神經網絡工具箱實用指南文章摘要:第一章是神經網絡的基本介紹,第二章包括了由工具箱指定的有關網絡結構和符號的基本材料以及建立神經網絡的一些基本函數,例如new、init、adapt和train。第三章以反向傳播網絡為例講解了反向傳播網絡的原理和應用的基本過程。第一章介紹1神經網絡神經網絡是單個并行處理元素的集合,我們從生物學神經系統得到啟發。在自然界,網絡功能主要由神經節決定,我們可以通過改變連接點的權重來訓練神經網絡完成特定的功能。一般的神經網絡都是可

2、調節的,或者說可訓練的,這樣一個特定的輸入便可得到要求的輸出。如下圖所示。這里,網絡根據輸出和目標的比較而調整,直到網絡輸出和目標匹配。作為典型,許多輸入/目標對應的方法已被用在有監督模式中來訓練神經網絡。神經網絡已經在各個領域中應用,以實現各種復雜的功能。這些領域包括:模式識別、鑒定、分類、語音、翻譯和控制系統。如今神經網絡能夠用來解決常規計算機和人難以解決的問題。我們主要通過這個工具箱來建立示范的神經網絡系統,并應用到工程、金融和其他實際項目中去。一般普遍使用有監督訓練方法,但是也能夠通過無監督的訓練方法或者直接設計得到其他的神經網絡。無監督網絡可以被應用在數據組的辨別上。一些線形網絡和H

3、opfield網絡是直接設計的。總的來說,有各種各樣的設計和學習方法來增強用戶的選擇。神經網絡領域已經有50年的歷史了,但是實際的應用卻是在最近15年里,如今神經網絡仍快速發展著。因此,它顯然不同與控制系統和最優化系統領域,它們的術語、數學理論和設計過程都已牢固的建立和應用了好多年。我們沒有把神經網絡工具箱僅看作一個能正常運行的建好的處理輪廓。我們寧愿希望它能成為一個有用的工業、教育和研究工具,一個能夠幫助用戶找到什么能夠做什么不能做的工具,一個能夠幫助發展和拓寬神經網絡領域的工具。因為這個領域和它的材料是如此新,這個工具箱將給我們解釋處理過程,講述怎樣運用它們,并且舉例說明它們的成功和失敗。

4、我們相信要成功和滿意的使用這個工具箱,對范例和它們的應用的理解是很重要的,并且如果沒有這些說明那么用戶的埋怨和質詢就會把我們淹沒。所以如果我們包括了大量的說明性材料,請保持耐心。我們希望這些材料能對你有幫助。這個章節在開始使用神經網絡工具箱時包括了一些注釋,它也描述了新的圖形用戶接口和新的運算法則和體系結構,并且它解釋了工具箱為了使用模塊化網絡對象描述而增強的機動性。最后這一章給出了一個神經網絡實際應用的列表并增加了一個新的文本-神經網絡設計。這本書介紹了神經網絡的理論和它們的設計和應用,并給出了相當可觀的MATLAB和神經網絡工具箱的使用。2準備工作基本章節第一章是神經網絡的基本介紹,第二章

5、包括了由工具箱指定的有關網絡結構和符號的基本材料以及建立神經網絡的一些基本函數,例如new、init、adapt和train。第三章以反向傳播網絡為例講解了反向傳播網絡的原理和應用的基本過程。幫助和安裝神經網絡工具箱包含在nnet目錄中,鍵入helpnnet可得到幫助主題。工具箱包含了許多示例。每一個例子講述了一個問題,展示了用來解決問題的網絡并給出了最后的結果。顯示向導要討論的神經網絡例子和應用代碼可以通過鍵入helpnndemos找到。安裝神經網絡工具箱的指令可以在下列兩份MATLAB文檔中找到:theInstallationGuideforMS-WindowsandMacintosh或者

6、theInstallationGuideforUNIX。第二章神經元模型和網絡結構1符號數學符號下面給出等式和數字中用到的基本符號:標量-小寫的斜體字.a,b,c向量-小寫加粗的非斜體字.a,b,c矩陣-大寫加粗的非斜體字.A,B,C向量表示一組數字數學符號和字符的等價從數學符號到字符的轉換或者反過來可以遵循一些規則,為了便于今后引用我們將這些規則列出。為了從數學符號變為MATLAB符號用戶需要:變上標為細胞數組標號例如變下標為圓括號標號例如和變圓括號標號為二維數組標號例如變數學運算符為MATLAB運算符和工具箱函數例如2神經元模型單神經元下圖所示為一個單標量輸入且無偏置的神經元。這個輸入標量

7、通過乘以權重為標量w的連結點得到結果wp,這仍是一個標量。這里,加權的輸入wp僅僅是轉移函數f的參數,函數的輸入是標量a。右邊的神經元有一個標量偏置b,你既可以認為它僅僅是通過求和節點加在結果wp上,也可以認為它把函數f左移了b個單位,偏置除了有一個固定不變的輸入值1以外,其他的很像權重。標量n是加權輸入wp和偏置b的和,它作為轉移函數f的參數。函數f是轉移函數,它可以為階躍函數或者曲線函數,它接收參數n給出輸出a,下一節將給出各種不同的轉移函數。注意神經元中的w和b都是可調整的標量參數。神經網絡的中心思想就是參數的可調整使得網絡展示需要和令人感興趣的行為。這樣,我們就可以通過調整權重和偏置參

8、量訓練神經網絡做一定的工作。或者神經網絡自己調整參數以得到想要的結果。在這個工具箱里所有的神經元都提供偏置,我們的許多例子中都用到了偏置并且假定它在這個工具箱的大多數情況下都要用到。可是,如果你愿意的話,你也可以在一個神經元中省略偏置。正如上面所提到的,在神經元中,標量b是個可調整的參數。它不是一個輸入。可是驅動偏置的常量1卻是一個輸入而且當考慮線性輸入向量時一定要這樣認為。轉移函數在這個工具箱里包括了許多轉移函數。你能在TransferFunctionGraphs中找到它們的完全列表。下面列出了三個最常用的函數。上圖所示的階躍轉移函數限制了輸出,使得輸入參數小于0時輸出為0,大于或等于0時輸

9、出為1,在第三章中我們將用它來進行分類。工具箱中有一個函數hardlim來數學上的階躍,如上圖所示。我們可以輸入以下代碼n=-5:0.1:5;plot(n,hardlim(n),c+:);它產生一張在-5到5之間的階躍函數圖。所有在工具箱中的數學轉移函數都能夠用同名的函數實現。線性轉移函數如下圖所示這種類型的神經元將在第四章的自適應線性濾波中用作線性擬合。下圖顯示的曲線轉移函數的輸入參數是正負區間的任意值,而將輸出值限定于0到1之間。這種傳遞函數通常用于反向傳播(BP)網絡,這得益于函數的可微性。在上面所示的每一個轉移函數圖的右邊方框中的符號代表了對應的函數,這些圖表將替換網絡圖的方框中的f來

10、表示所使用的特定的轉移函數。第13章列出了所有的轉移函數和圖標。你能夠定義自己的傳遞函數,你可以不限于使用第13章所列的轉移函數。你能夠通過運行示例程序nn2n1來試驗一個神經元和各種轉移函數。帶向量輸入的神經元一個有R個元素輸入向量的神經元如下圖所示。這里單個輸入元素乘上權重得到加權值輸入求和節點。它們的和是Wp,單行矩陣W和向量p的點乘。這個神經元有一個偏置b,它加在加權的輸入上得到網絡輸入n,和值n是轉移函數f的參數。表達式自然可用MATLAB代碼表示為:n=W*p+b可是,用戶很少要寫如此底層的代碼,因為這些代碼已經被建立到函數中來定義和模擬整個網絡。上面所示的圖包括了許多細節。當我們

11、考慮有許多神經元和可能是許多神經元組成的多層網絡時,我們可能會漏掉許多細節。因此,作者設計了一個簡潔的符號代表單個神經元。這個符號如下圖中所示,它將會在以后的多重神經元電路中用到。這里輸入向量p用左邊的黑色實心豎條代表,p的維數寫在符號p下面,在圖中是Rx1。(注意我們用的是大寫字母,正如在以前句子里R用來表示向量大小時一樣。)因此,p是一個有R個輸入元素的向量。這個輸入列向量乘上R列單行矩陣W。和以前一樣,常量1作為一個輸入乘上偏置標量b,給轉移函數的網絡輸入是n,它是偏置與乘積Wp的和。這個和值傳給轉移函數f得到網絡輸出a,在這個例子中它是一個標量。注意如果我們有超過一個神經元,網絡輸出就

12、有可能是一個向量。上面圖中定義了神經網絡的一層。一層包括權重的組合,乘法和加法操作(這里就是向量乘積Wp),偏置b和轉移函數f。輸入數組,即向量p不包括在一層中。這個簡潔的網絡符號每一次都會被用到,向量的大小會顯示在矩陣變量名字的下面。我們希望這個符號會讓你理解神經網絡的結構以及與之相關的矩陣數學。正如前面所討論的,當特定的轉移函數在一張圖中被使用時,轉移函數將用上面所示的符號代替。下面是幾個例子:你可以通過運行示例程序nnd2n2來試驗有2個元素的神經元。3網絡結構兩個或更多的上面所示的神經元可以組合成一層,一個典型的網絡可包括一層或者多層。我們首先來研究神經元層。單層神經元網絡有R輸入元素

13、和S個神經元組成的單層網絡如下圖所示:在一個單層網絡中,輸入向量p的每一個元素都通過權重矩陣W和每一個神經元連接起來。第I個神經元通過把所有加權的輸入和偏置加起來得到它自己的標量輸出n(i)。不同的n(i)合起來形成了有S個元素的網絡輸入向量n。最后,網絡層輸出一個列向量a,我們在圖的底部顯示了a的表達式。注意輸入元素個數R和神經元個數S通常是不等的,我們也并不需要這兩者相等。你也可以建立一個簡單的復合神經元層,它將上面所示的網絡并行的合在一起,使用不同的轉移函數。所有的網絡都有相同的輸入,而每一個網絡都會產生輸出。輸入向量元素經加權矩陣W作用輸入網絡。W=注意加權矩陣W的行標標記權重的目的神

14、經元,列標標記待加權的輸入標號。因此,的標號表示從輸入信號的第二個元素到第一個神經元的權重是。有S個神經元和R個輸入元素的神經網絡也能夠簡化成以下符號:這里,p是一個有R個元素的輸入向量,W是一個SxR的矩陣,a和b是有S個元素的向量。如前面所定義的,神經元層包括權重矩陣,乘法運算,偏置向量b,求和符和轉移函數框。輸入和層我們將要討論多層網絡,所以我們需要拓展我們的符號來描述這樣的網絡。特別是我們要弄清連接輸入的權重矩陣和連接層的權重矩陣之間的區別。我們也要分清權重矩陣的目的和源。我們將把連接輸入的權重矩陣成為輸入權重,把來自層輸出的權重矩陣稱為層矩陣。進一步說,我們在各個權重和其他網絡元素中

15、將用上標區分源(第二個標號)和目的(第一個標號)。作為示例,我們用簡化的形式重畫了上面所畫的單層多輸入網絡。你可以看到,我們把連接輸入向量p的權重矩陣標記為輸入權重矩陣(IW1,1),第二個標號1是源,第二個標號1是目的。同樣,第一層的元素,比如偏置、網絡輸入和輸出都有上標1來表示它們屬于第一層。在下一章節,我們將用LW表示層權重矩陣,用IW表示輸入權重矩陣。你可以復習以下這一章開始的符號那一節,它把特定的網絡net中用數學符號表示的層權重矩陣轉換成代碼,如下所示:IW1,1net.IW1,1這樣,你就可以寫代碼來得到對轉移函數的網絡輸入了:n1=net.IW1,1*p+net.b1多層神經元

16、網絡一個網絡可以有幾層,每一層都有權重矩陣W,偏置向量b和輸出向量a。為了區分這些權重矩陣、輸出矩陣等等,在圖中的每一層,我們都為感興趣的變量以上標的形式增加了層數。你能夠看到在下面所示的三層網絡圖和等式中使用層符號。上面所示的網絡有R1個輸入,第一層有S1個神經元,第二層有S2個神經元,以次類推。一般不同層有不同數量的神經元。每一個神經元的偏置輸入是常量1。注意中間層的輸出就是下一層的輸入。第二層可看作有S1個輸入,S2個神經元和S1xS2階權重矩陣W2的單層網絡。第二層的輸入是a1,輸出是a2,現在我們已經確定了第二層的所有向量和矩陣,我們就能把它看成一個單層網絡了。其他層也可以照此步驟處

17、理。多層網絡中的層扮演著不同的角色。給出網絡輸出的層叫做輸出層。所有其他的層叫做隱層。上圖所示的三層網絡有一個輸出層(第三層)和兩個隱層(第一和第二層)。有些作者把輸入作為第四層,這里不用這種指定。上面所示的三層網絡的簡潔畫法如下圖所示:多層網絡的功能非常強大。舉個例子,一個兩層的網絡,第一層的轉移函數是曲線函數,第二層的轉移函數是線性函數,通過訓練,它能夠很好的模擬任何有有限斷點的函數。這種兩層網絡集中應用于反向傳播網絡。注意我們把第三層的輸出a3標記為y。我們將使用這種符號來定義這種網絡的輸出。4數據結構這一節將討論影響網絡仿真的輸入數據結構的格式。我們首先討論靜態網絡,在討論動態網絡。我

18、們將關心兩種基本的輸入向量類型:同步(同時或者無時序)向量和異步向量。對異步向量來說,向量的順序是非常重要的。對同步向量來說,順序是不重要的,并且如果我們已經有一定數量的并行網絡我們就能把一個輸入向量輸入到其中的任意網絡。靜態網絡中的同步輸入仿真仿真靜態網絡(沒有反饋或者延遲)是網絡仿真最簡單的一種。在這種情況中,我們不需要關心向量輸入的時間順序,所以我們可以認為它是同時發生的。另外,為了是問題更簡單,我們假定開始網絡僅有一個輸入向量。我們用下面的網絡作為例子。為了建立這個網絡我們可以用以下命令:net=newlin(-11;-11,1);簡單起見我們假定權重矩陣和偏置為W=1,2,b=0其命

19、令行是:net.IW1,1=12;net.b1=0;假定模擬的網絡有四個無序向量,即Q=4:這些同步向量可以用一個矩陣來表示:P=1223;2131;現在我們就可以模擬這個網絡了:A=sim(net,P)A=5485我們向網絡輸入一個簡單的同步向量矩陣,得到了一個簡單的同步向量輸出矩陣。結果不論是由一個網絡串行輸出還是由四個網絡并行輸出得到的都是一樣的。由于輸入并無關聯,輸入向量的順序并不重要。動態網絡中的異步輸入仿真當網絡中存在延遲時,順序發生的輸入向量就要按一定的序列輸入網絡。為了演示這種情況,我們用了一個有延遲的簡單網絡。為了建立這個網絡我們可以用以下命令:net=newlin(-11,

20、1,01);net.biasConnect=0;假定權重矩陣為:W=1,2命令行為:net.IW1,1=12;假定輸入順序為:p(1)=1,p(2)=2,p(3)=3,p(4)=4輸入序列可以用一個細胞數組來表示:P=1234;這樣我們就能模擬這個網絡了:A=sim(net,P)A=14710我們輸入一個包含輸入序列的細胞數組,網絡產生一個包含輸出序列的細胞數組。注意異步輸入中的輸入順序是很重要的。在這個例子中,當前輸出等于當前輸入乘1加上前一個輸入乘2。如果我們改變輸入順序,那么輸出結果也回隨之改變。動態網絡中的同步輸入仿真如果我們在上一個例子中把輸入作為同步而不是異步應用,我們就會得到完全

21、不同的響應。(雖然我們不清楚為什么要在動態網絡中使用這種方式。)這就好象每一個輸入都同時加到一個單獨的并行網絡中。在前一個例子中,如果我們用一組同步輸入,我們有:p1=1,p2=2,p3=3,p4=4這可用下列代碼創建:P=1234;模擬這個網絡,我們得到:A=sim(net,P)A=1234這個結果和我們同時把每一個輸入應用到單獨的網絡中并計算單獨的輸出沒什么兩樣。注意如果我們沒有初始化延遲時間,那么缺省值就是0。在這個例子中,由于當前輸入的權重是1,輸出就是輸入乘1。在某些特定的情況下,我們可能想要在同一時間模擬一些不同序列的網絡響應。這種情況我們就要給網絡輸入一組同步序列。比如說,我們要

22、把下面兩個序列輸入網絡:p(1)=1,p(2)=2,p(3)=3,p(4)=4p(1)=4,p(2)=3,p(3)=2,p(4)=1輸入P應該是一個細胞數組,每一個數組元素都包含了兩個同時發生的序列的元素。P=14233241;現在我們就可以模擬這個網絡了:A=sim(net,P);網絡輸出結果將是:A=1441178105你可以看到,每個矩陣的第一列是由第一組輸入序列產生的輸出序列,每個矩陣的第二列是由第二組輸入序列產生的輸出序列。這兩組序列之間沒有關聯,好象他們是同時應用在單個的并行網絡上的。下面的圖表顯示了當我們有Q個TS長度的序列時,在函數sim中輸入P的一般格式。它函蓋了單輸入向量的

23、所有的情況。每一個細胞數組的元素都是一個同步向量矩陣,它對應于每一個序列的同一時間點。如果有多輸入向量,那么在細胞數組中的矩陣里就有多行。這一節我們我們把同步和異步輸入應用到了動態網絡中。在以前的章節中我們把同步輸入應用到了靜態網絡中。我們也能把異步序列應用到靜態網絡中。這不會改變網絡的輸出響應,但是這會影響訓練過的網絡的形式。在下一節你會更清楚的了解這一點。5訓練方式在這一節中,我們將描述兩種不同的訓練方式。在增加方式中,每提交一次輸入數據,網絡權重和偏置都更新一次。在批處理方式中,僅僅當所有的輸入數據都被提交以后,網絡權重和偏置才被更新。增加方式(應用與自適應網絡和其他網絡)雖然增加方式更

24、普遍的應用于動態網絡,比如自適應濾波,但是在靜態和動態網絡中都可以應用它。在這一節中我們將示范怎樣把增加方式應用到這兩種網絡中去。靜態網絡中的增加方式繼續考慮前面用過的第一個靜態網絡的例子,我們用增加方式來訓練它,這樣每提交一次輸入數據,網絡權重和偏置都更新一次。在這個例子里我們用函數adapt,并給出輸入和目標序列:假定我們要訓練網絡建立以下線性函數:t=2p1+p2我們以前用的輸入是:目標輸出是:t1=4,t2=5,t3=7,t4=7我們首先用0初始化權重和偏置。為了顯示增加方式的效果,我們把學習速度也設為0。net=newlin(-11;-11,1,0,0);net.IW1,1=00;n

25、et.b1=0;為了用增加方式,我們把輸入和目標輸出表示為以下序列:P=1;22;12;33;1;T=4577;前面的討論中,不論是作為一個同步向量矩陣輸入還是作為一個異步向量細胞數組輸入,模擬的輸出值是一樣的。而在訓練網絡時,這是不對的。當我們使用adapt函數時,如果輸入是異步向量細胞數組,那么權重將在每一組輸入提交的時候更新(就是增加方式),我們將在下一節看到,如果輸入是同步向量矩陣,那么權重將只在所有輸入提交的時候更新(就是批處理方式)。我們現在開始用增加方式訓練網絡:net,a,e,pf=adapt(net,P,T);由于學習速度為0,網絡輸出仍然為0,并且權重沒有被更新。錯誤和目標

26、輸出相等。a=0000e=4577如果我們設置學習速度為0.1,我們就能夠看到當每一組輸入提交時,網絡是怎么調整的了。net.inputWeights1,1.learnParam.lr=0.1;net.biases1,1.learnParam.lr=0.1;net,a,e,pf=adapt(net,P,T);a=026.05.8e=431.01.2由于在第一個輸入數據提交前還沒有更新,第一個輸出和學習速率為0時一樣。由于權重已更新,第二個輸出就不一樣了。每計算一次錯誤,權重都不斷的修改。如果網絡可行并且學習速率設置得當,錯誤將不斷的趨向于0。動態網絡中的增加方式我們同樣也能用增加方式訓練動態網

27、絡。實際上,這是最普遍的情況。讓我們用前面用過的那個有輸入延遲的線性網絡作為例子,我們將初始化權重為0,并把學習速率設為0.1。net=newlin(-11,1,01,0.1);net.IW1,1=00;net.biasConnect=0;為了用增加方式,我們把輸入和目標輸出表示為細胞數組的元素:Pi=1;P=234;T=357;這里我們嘗試訓練網絡把當前輸入和前一次輸入加起來作為當前輸出。輸入序列和我們以前使用sim的例子中用過的一樣,除了我們指定了輸入序列的第一組作為延遲的初始狀態。現在我們可以用adapt來訓練網絡了:net,a,e,pf=adapt(net,P,T,Pi);a=02.4

28、7.98e=32.6-1.98由于權重沒有更新,第一個輸出是0。每一個序列步進,權重都改變一次。批處理方式在批處理方式中,僅僅當所有的輸入數據都被提交以后,網絡權重和偏置才被更新,它也可以應用于靜態和動態網絡。我們將在這一節討論這兩種類型。靜態網絡中的批處理方式批處理方式可以用adapt或train函數來實現,雖然由于由于采用了更高效的學習算法,train通常是最好的選擇。增加方式只能用adapt來實現,train函數只能用于批處理方式。讓我們用前面用過的靜態網絡的例子開始,學習速率設置為0.1。net=newlin(-11;-11,1,0,0.1);net.IW1,1=00;net.b1=0

29、;用adapt函數實現靜態網絡的批處理方式,輸入向量必須用同步向量矩陣的方式放置:P=1223;2131;T=4577;當我們調用adapt時將觸發adaptwb函數,這是缺省的線性網絡調整函數。learnwh是缺省的權重和偏置學習函數。因此,Widrow-Hoff學習法將會被使用:net,a,e,pf=adapt(net,P,T);a=0000e=4577注意網絡的輸出全部為0,因為在所有要訓練的數據提交前權重沒有被更新,如果我們顯示權重,我們就會發現:net.IW1,1ans=4.90004.1000net.b1ans=2.3000經過了用adapt函數的批處理方式調整,這就和原來不一樣了

30、。現在用train函數來實現批處理方式。由于Widrow-Hoff規則能夠在增加方式和批處理方式中應用,它可以通過adapt和train觸發。我們有好幾種算法只能用于批處理方式(特別是Levenberg-Marquardt算法),所以這些算法只能用train觸發。網絡用相同的方法建立:net=newlin(-11;-11,1,0,0.1);net.IW1,1=00;net.b1=0;在這種情況下輸入向量即能用同步向量矩陣表示也能用異步向量細胞數組表示。用train函數,任何異步向量細胞數組都會轉換成同步向量矩陣。這是因為網絡是靜態的,并且因為train總是在批處理方式中使用。因為MATLAB實

31、現同步模式效率更高,所以只要可能總是采用同步模式處理。P=1223;2131;T=4577;現在我們開始訓練網絡。由于我們只用了一次adapt,我們這里訓練它一次。缺省的線性網絡訓練函數是trainwb。learnwh是缺省的權重和偏置學習函數。因此,我們應該和前面缺省調整函數是adaptwb的例子得到同樣的結果。net.inputWeights1,1.learnParam.lr=0.1;net.biases1.learnParam.lr=0.1;net.trainParam.epochs=1;net=train(net,P,T);經過一次訓練后,我們顯示權重發現:net.IW1,1ans=4

32、.90004.1000net.b1ans=2.3000這和用adapt訓練出來的結果是一樣的。在靜態網絡中,adapt函數能夠根據輸入數據格式的不同應用于增加方式和批處理方式。如果數據用同步向量矩陣方式輸入就用批處理方式訓練;如果數據用異步方式輸入就用增加方式。但這對于train函數行不通,無論輸入格式如何,它總是采用批處理方式。動態網絡中的增加方式訓練靜態網絡相對要簡單一些。如果我們用train訓練網絡,即使輸入是異步向量細胞數組,它也是轉變成同步向量矩陣而采用批處理方式。如果我們用adapt。輸入格式決定著網絡訓練方式。如果傳遞的是序列,網絡用增加方式,如果傳遞的是同步向量就采用批處理方式

33、。在動態網絡中,批處理方式只能用train完成,特別是當僅有一個訓練序列存在時。為了說明清楚,讓我們重新考慮那個帶延遲的線性網絡。我們把學習速率設為0.02(當我們采用梯度下降算法時,我們要用比增加方式更小的學習速率,應為所有的分立的梯度都要在決定權重改變步進之前求和)net=newlin(-11,1,01,0.02);net.IW1,1=00;net.biasConnect=0;net.trainParam.epochs=1;Pi=1;P=234;T=356;我們用以前增加方式訓練過的那組數據訓練,但是這一次我們希望只有在所有數據都提交后才更新權重(批處理方式)。因為輸入是一個序列,網絡將用

34、異步模式模擬。但是權重將用批處理方式更新。net=train(net,P,T,Pi);經過一次訓練后,權重值為:net.IW1,1ans=0.90000.6200這里的權重值和我們用增加方式得到的不同。在增加方式中,通過訓練設置,一次訓練可以更新權重三次。在批處理方式中,每次訓練只能更新一次。第三章反向傳播網絡(BP網絡)1概述前面介紹了神經網絡的結構和模型,在實際應用中,我們用的最廣泛的是反向傳播網絡(BP網絡)。下面就介紹一下BP網絡的結構和應用。BP網絡是采用Widrow-Hoff學習算法和非線性可微轉移函數的多層網絡。一個典型的BP網絡采用的是梯度下降算法,也就是Widrow-Hoff

35、算法所規定的。backpropagation就是指的為非線性多層網絡計算梯度的方法。現在有許多基本的優化算法,例如變尺度算法和牛頓算法。神經網絡工具箱提供了許多這樣的算法。這一章我們將討論使用這些規則和這些算法的優缺點。一個經過訓練的BP網絡能夠根據輸入給出合適的結果,雖然這個輸入并沒有被訓練過。這個特性使得BP網絡很適合采用輸入/目標對進行訓練,而且并不需要把所有可能的輸入/目標對都訓練過。為了提高網絡的適用性,神經網絡工具箱提供了兩個特性-規則化和早期停止。這兩個特性和用途我們將在這一章的后面討論。這一章還將討論網絡的預處理和后處理技術以提高網絡訓練效率。2基礎網絡結構神經網絡的結構前一章

36、已詳細討論過,前饋型BP網絡的結構結構和它基本相同,這里就不再詳細論述了,這里著重說明以下幾點:1常用的前饋型BP網絡的轉移函數有logsig,tansig,有時也會用到線性函數purelin。當網絡的最后一層采用曲線函數時,輸出被限制在一個很小的范圍內,如果采用線性函數則輸出可為任意值。以上三個函數是BP網絡中最常用到的函數,但是如果需要的話你也可以創建其他可微的轉移函數。2在BP網絡中,轉移函數可求導是非常重要的,tansig、logsig和purelin都有對應的導函數dtansig、dlogsig和dpurelin。為了得到更多轉移函數的導函數,你可以帶字符deriv的轉移函數:tan

37、sig(deriv)ans=dtansig網絡構建和初始化訓練前饋網絡的第一步是建立網絡對象。函數newff建立一個可訓練的前饋網絡。這需要4個輸入參數。第一個參數是一個Rx2的矩陣以定義R個輸入向量的最小值和最大值。第二個參數是一個顢頇每層神經元個數的數組。第三個參數是包含每層用到的轉移函數名稱的細胞數組。最后一個參數是用到的訓練函數的名稱。舉個例子,下面命令將創建一個二層網絡,其網絡模型如下圖所示。它的輸入是兩個元素的向量,第一層有三個神經元,第二層有一個神經元。第一層的轉移函數是tan-sigmoid,輸出層的轉移函數是linear。輸入向量的第一個元素的范圍是-1到2,輸入向量的第二個

38、元素的范圍是0到5,訓練函數是traingd。net=newff(-12;05,3,1,tansig,purelin,traingd);這個命令建立了網絡對象并且初始化了網絡權重和偏置,因此網絡就可以進行訓練了。我們可能要多次重新初始化權重或者進行自定義的初始化。下面就是初始化的詳細步驟。在訓練前饋網絡之前,權重和偏置必須被初始化。初始化權重和偏置的工作用命令init來實現。這個函數接收網絡對象并初始化權重和偏置后返回網絡對象。下面就是網絡如何初始化的:net=init(net);我們可以通過設定網絡參數net.initFcn和net.layeri.initFcn這一技巧來初始化一個給定的網絡

39、。net.initFcn用來決定整個網絡的初始化函數。前饋網絡的缺省值為initlay,它允許每一層用單獨的初始化函數。設定了net.initFcn,那么參數net.layeri.initFcn也要設定用來決定每一層的初始化函數。對前饋網絡來說,有兩種不同的初始化方式經常被用到:initwb和initnw。initwb函數根據每一層自己的初始化參數(net.inputWeightsi,j.initFcn)初始化權重矩陣和偏置。前饋網絡的初始化權重通常設為rands,它使權重在-1到1之間隨機取值。這種方式經常用在轉換函數是線性函數時。initnw通常用于轉換函數是曲線函數。它根據Nguyen和

40、WidrowNgWi90為層產生初始權重和偏置值,使得每層神經元的活動區域能大致平坦的分布在輸入空間。它比起單純的給權重和偏置隨機賦值有以下優點:(1)減少神經元的浪費(因為所有神經元的活動區域都在輸入空間內)。(2)有更快的訓練速度(因為輸入空間的每個區域都在活動的神經元范圍中)。初始化函數被newff所調用。因此當網絡創建時,它根據缺省的參數自動初始化。init不需要單獨的調用。可是我們可能要重新初始化權重和偏置或者進行自定義的初始化。例如,我們用newff創建的網絡,它缺省用initnw來初始化第一層。如果我們想要用rands重新初始化第一層的權重和偏置,我們用以下命令:net.laye

41、rs1.initFcn=initwb;net.inputWeights1,1.initFcn=rands;net.biases1,1.initFcn=rands;net.biases2,1.initFcn=rands;net=init(net);網絡模擬(SIM)函數sim模擬一個網絡。sim接收網絡輸入p,網絡對象net,返回網絡輸出a,這里是simuff用來模擬上面建立的帶一個輸入向量的網絡。p=1;2;a=sim(net,p)a=-0.1011(用這段代碼得到的輸出是不一樣的,這是因為網絡初始化是隨機的。)下面調用sim來計算一個同步輸入3向量網絡的輸出:p=132;241;a=sim(

42、net,p)a=-0.1011-0.23080.4955網絡訓練一旦網絡加權和偏差被初始化,網絡就可以開始訓練了。我們能夠訓練網絡來做函數近似(非線性后退),模式結合,或者模式分類。訓練處理需要一套適當的網絡操作的例子-網絡輸入p和目標輸出t。在訓練期間網絡的加權和偏差不斷的把網絡性能函數net.performFcn減少到最小。前饋網絡的缺省性能函數是均方誤差mse-網絡輸出和目標輸出t之間的均方誤差。這章的余項將描述幾個對前饋網絡來說不同的訓練算法。所有這些算法都用性能函數的梯度來決定怎樣把權重調整到最佳。梯度由叫做反向傳播的技術決定,它要通過網絡實現反向計算。反向傳播計算源自使用微積分的鏈

43、規則。基本的反向傳播算法的權重沿著梯度的負方向移動,這將在下一節講述。以后的章節將講述更復雜的算法以提高收斂速度。反向傳播算法反向傳播算法中有許多變量,這一章將討論其中的一些。反向傳播學習算法最簡單的應用是沿著性能函數最速增加的方向-梯度的負方向更新權重和偏置。這種遞歸算法可以寫成:xk+1=xk-akgk這里xk是當前權重和偏置向量,gk是當前梯度,ak是學習速率。有兩種不同的辦法實現梯度下降算法:增加模式和批處理模式。在增加模式中,網絡輸入每提交一次,梯度計算一次并更新權重。在批處理模式中,當所有的輸入都被提交后網絡才被更新。下面兩節將討論增加模式和批處理模式。增加模式訓練法(ADAPT)

44、函數adapt用來訓練增加模式的網絡,它從訓練設置中接受網絡對象、網絡輸入和目標輸入,返回訓練過的網絡對象、用最后的權重和偏置得到的輸出和誤差。這里有幾個網絡參數必須被設置,第一個是net.adaptFcn,它決定使用哪一種增加模式函數,缺省值為adaptwb,這個值允許每一個權重和偏置都指定它自己的函數,這些單個的學習函數由參數net.biasesi,j.learnFcn、net.inputWeightsi,j.learnFcn、net.layerWeightsi,j.learnFcn和GradientDescent(LEARDGD)來決定。對于基本的梯度最速下降算法,權重和偏置沿著性能函數

45、的梯度的負方向移動。在這種算法中,單個的權重和偏置的學習函數設定為learngd。下面的命令演示了怎樣設置前面建立的前饋函數參數:net.biases1,1.learnFcn=learngd;net.biases2,1.learnFcn=learngd;net.layerWeights2,1.learnFcn=learngd;net.inputWeights1,1.learnFcn=learngd;函數learngd有一個相關的參數-學習速率lr。權重和偏置的變化通過梯度的負數乘上學習速率倍數得到。學習速率越大,步進越大。如果學習速率太大算法就會變得不穩定。如果學習速率太小,算法就需要很長的時

46、間才能收斂。當learnFcn設置為learngd時,就為每一個權重和偏置設置了學習速率參數的缺省值,如上面的代碼所示,當然你也可以自己按照意愿改變它。下面的代碼演示了把層權重的學習速率設置為0.2。我們也可以為權重和偏置單獨的設置學習速率。net.layerWeights2,1.learnParam.lr=0.2;為有序訓練設置的最后一個參數是net.adaptParam.passes,它決定在訓練過程中訓練值重復的次數。這里設置重復次數為200net.adaptParam.passes=200;現在我們就可以開始訓練網絡了。當然我們要指定輸入值和目標值如下所示:p=-1-122;0505;

47、t=-1-111;如果我們要在每一次提交輸入后都更新權重,那么我們需要將輸入矩陣和目標矩陣轉變為細胞數組。每一個細胞都是一個輸入或者目標向量。p=num2cell(p,1);t=num2cell(t,1);現在就可以用adapt來實現增加方式訓練了:net,a,e=adapt(net,p,t);訓練結束以后,我們就可以模擬網絡輸出來檢驗訓練質量了。a=sim(net,p)a=-0.9995-1.00001.00011.0000帶動力的梯度下降法(LEARDGDM)除了learngd以外,還有一種增加方式算法常被用到,它能提供更快的收斂速度-learngdm,帶動量的最速下降法。動力允許網絡不但

48、根據當前梯度而且還能根據誤差曲面最近的趨勢響應。就像一個低通濾波器一樣,動量允許網絡忽略誤差曲面的小特性。沒有動量,網絡又可能在一個局部最小中被卡住。有了動量網絡就能夠平滑這樣的最小。動量能夠通過把權重變得與上次權重變化的部分和由算法規則得到的新變化的和相同而加入到網絡學習中去。上一次權重變化對動量的影響由一個動量常數來決定,它能夠設為0到1之間的任意值。當動量常數為0時,權重變化之根據梯度得到。當動量常數為1時新的權重變化等于上次的權重變化,梯度值被忽略了。Learngdm函數有上面所示的learngd函數觸發,除非mc和lr學習參數都被設置了。由于每一個權重和偏置有它自己的學習參數,每一個

49、權重和偏置都可以用不同的參數。下面的命令將用lerangdm為前面建立的用增加方式訓練的網絡設置缺省的學習參數:net.biases1,1.learnFcn=learngdm;net.biases2,1.learnFcn=learngdm;net.layerWeights2,1.learnFcn=learngdm;net.inputWeights1,1.learnFcn=learngdm;net,a,e=adapt(net,p,t);批處理訓練方式訓練的另一種方式是批處理方式,它由函數train觸發。在批處理方式中,當整個訓練設置被應用到網絡后權重和偏置才被更新。在每一個訓練例子中的計算的梯度

50、加在一起來決定權重和偏置的變化。批處理梯度下降法(TRAINGD)與增加方式的學習函數learngd等價的函數是traingd,它是批處理形式中標準的最速下降學習函數。權重和偏置沿著性能函數的梯度的負方向更新。如果你希望用批處理最速下降法訓練函數,你要設置網絡的trainFcn為traingd,并調用train函數。不像以前章節的學習函數,它們要單獨設置權重矩陣和偏置向量,這一次給定的網絡只有一個學習函數。Traingd有幾個訓練參數:epochs,show,goal,time,min_grad,max_fail和lr。這里的學習速率和lerangd的意義是一樣的。訓練狀態將每隔show次顯示一次。其他參數決定訓練什么時候結束。如果訓練次數超過epochs,性能函數低于goal,梯度值低于mingrad或者訓練時間超過time,訓練就會結束。下面的代碼將重建我們以前的網絡,然后用批處理最速下降法訓練網絡。(注意用批處理方式訓練的話所有的輸入要設置為矩陣方式)net=newff(-12;05,3,1,tans

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論