【轉】漫談ANN(2):BP神經網絡

上一次我們講了M-P模型,它實際上就是對單個神經元的一種建模,還不足以模擬人腦神經系統的功能。由這些人工神經元構建出來的網絡,才能夠具有學習、聯想、記憶和模式識別的能力。BP網絡就是一種簡單的人工神經網絡。我們的第二話就從BP神經網絡開始漫談吧。

BP的來源

“時勢造英雄”,一個偉大的人物的登場總是建立在歷史的需求之下,所以我們剖析一個人,得先看看他的出身時代。同樣的道理,在講BP網絡的特性和用途之前,我們需要先了解一下它的來源和誕生原因,以便理解它的重要性。

1.1 最簡單的神經網絡結構——感知器

在1958年,美國心理學家Frank Rosenblatt提出一種具有單層計算單元的神經網絡,稱為感知器(Perceptron)。它其實就是基于M-P模型的結構。我們可以看看它的拓撲結構圖。

這個結構非常簡單,如果你還記得前面所講的M-P神經元的結構的話,這個圖其實就是輸入輸出兩層神經元之間的簡單連接(如果忘了可以看看第一話的模型示意圖)。

由第一話的(2)中我們知道輸入層各節點的輸入加權和

?

netj=i=1nωijxi

?

我們一般采用符號函數來當作單層感知器的傳遞函數,即輸出

?

oj=sgn(netj?Tj)=sgn(i=0nωijxi)=sgn(WTjX)

?

公式(2)可以進一步表達為:

?

oj={1?1,,WTjX>0WTjX<0

?

1.2 風中之燭——單層感知器的局限性

雖然單層感知器簡單而優雅,但它顯然不夠聰明——它僅對線性問題具有分類能力。什么是線性問題呢?簡單來講,就是用一條直線可分的圖形。比如,邏輯“與”和邏輯“或”就是線性問題,我們可以用一條直線來分隔0和1。

1)邏輯“與”的真值表和二維樣本圖如圖2:

2)邏輯“或”的真值表如圖3:

為什么感知器就可以解決線性問題呢?這是由它的傳遞函數決定的。這里以兩個輸入分量?x1?和?x2?組成的二維空間為例,此時節點?j?的輸出為

oj={1?1,,???ω1jx1+ω2jx2?Tj>0???ω1jx1+ω2jx2?Tj<0

?

所以,方程

ω1jx1+ω2jx2?Tj=0

?

確定的直線就是二維輸入樣本空間上的一條分界線。對于三維及更高維數的推導過程可以參考其他的Tutorials。

如果要讓它來處理非線性的問題,單層感知器網就無能為力了。例如下面的“異或”,就無法用一條直線來分割開來,因此單層感知器網就沒辦法實現“異或”的功能。

僅對線性可分問題具有分類能力,這就是單層感知器的局限所在。顯然它能夠解決的實際問題是很有限的。也正因為這樣,單層感知器在解決實際問題時很少被采用。

1.3 心有余而力不足——多層感知器的瓶頸

既然一條直線無法解決分類問題,當然就會有人想到用彎曲的折線來進行樣本分類。我們常常聽到一句批評人笨的話“你這人腦袋就是不會轉彎!”大意就是如此,腦袋會轉彎的人才善于解決問題。所以,人們請來了單層感知器他哥——多層感知器來幫忙。所謂多層感知器,就是在輸入層和輸出層之間加入隱層,,以形成能夠將樣本正確分類的凸域。多層感知器的拓撲結構如圖5所示。

我們可以比較一下單層感知器和多層感知器的分類能力:

由上圖可以看出,隨著隱層層數的增多,凸域將可以形成任意的形狀,因此可以解決任何復雜的分類問題。實際上,Kolmogorov理論指出:雙隱層感知器就足以解決任何復雜的分類問題

多層感知器確實是非常理想的分類器,但問題也隨之而來:隱層的權值怎么訓練?對于各隱層的節點來說,它們并不存在期望輸出,所以也無法通過感知器的學習規則來訓練多層感知器。因此,多層感知器心有余而力不足,雖然武功高強,但卻無力可施。

1.4 山重水復疑無路——ANN的低潮期

1966年,Minisky和Papert在他們的《感知器》一書中提出了上述的感知器的研究瓶頸,指出理論上還不能證明將感知器模型擴展到多層網絡是有意義的。這在人工神經網絡的歷史上書寫了極其灰暗的一章。對ANN的研究,始于1890年開始于美國著名心理學家W.James對于人腦結構與功能的研究,半個世紀后W.S.McCulloch和W.A.Pitts提出了M-P模型,之后的1958年Frank Rosenblatt在這個基礎上又提出了感知器,此時對ANN的研究正處在升溫階段,《感知器》這本書的出現就剛好為這剛剛燃起的人工神經網絡之火潑了一大盆冷水。一時間人們仿佛感覺對以感知器為基礎的ANN的研究突然間走到盡頭,看不到出路了。于是,幾乎所有為ANN提供的研究基金都枯竭了,很多領域的專家紛紛放棄了這方面課題的研究。

1.5 柳暗花明又一村——ANN研究的復蘇和BP神經網絡的誕生

所以說真理的果實總是垂青于能夠忍受寂寞的科學家。盡管ANN的研究陷入了前所未有的低谷, 但仍有為數不多的學者忍受住寂寞,堅持致力于ANN的研究。在長達10年的低潮時期之間,相 繼有一些開創性的研究成果被提出來,但還不足以激起人們對于ANN研究的熱情。一直到上世 紀80年代,兩個璀璨的成果誕生了:1982年美國加州理工學院的物理學家John J.Hopfield博 士的Hopfield網絡和David E.Rumelhart以及James L.McCelland研究小組發表的《并行分布 式處理》。這兩個成果重新激起了人們對ANN的研究興趣,使人們對模仿腦信息處理的智能計 算機的研究重新充滿了希望。

前者暫不討論,后者對具有非線性連續變換函數的多層感知器的誤差反向傳播(Error Back Propagation)算法進行了詳盡的分析,實現了 Minsky 關于多層網絡的設想。Error Back Propagation算法的簡稱就是BP算法,以BP算法實現的多層感知器網絡就是BP網絡。

所以,BP網絡本質上并不是一個新的網絡,而是使用BP學習算法的多層感知器網絡。

BP算法的基本思想

前面我們說到,多層感知器在如何獲取隱層的權值的問題上遇到了瓶頸。既然我們無法直接得到隱層的權值,能否先通過輸出層得到輸出結果和期望輸出的誤差來間接調整隱層的權值呢?BP算法就是采用這樣的思想設計出來的算法,它的基本思想是,學習過程由信號的正向傳播誤差的反向傳播兩個過程組成。

  • 正向傳播時,輸入樣本從輸入層傳入,經各隱層逐層處理后,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉入誤差的反向傳播階段。
  • 反向傳播時,將輸出以某種形式通過隱層向輸入層逐層反傳,并將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據。

圖8就是BP算法的信號流向圖。

BP網絡特性分析——BP三要素

我們分析一個ANN時,通常都是從它的三要素入手,即1)網絡拓撲結構;2)傳遞函數;3)學習算法。如圖9所示。

每一個要素的特性加起來就決定了這個ANN的功能特性。所以,我們也從這三要素入手對BP網絡的研究。

3.1 BP網絡的拓撲結構

前面已經說了,BP網絡實際上就是多層感知器,因此它的拓撲結構和多層感知器的拓撲結構(圖5)相同。由于單隱層(三層)感知器已經能夠解決簡單的非線性問題,因此應用最為普遍。三層感知器的拓撲結構如圖10所示。

3.2 BP網絡的傳遞函數

BP網絡采用的傳遞函數是非線性變換函數——Sigmoid函數(又稱S函數)。其特點是函數本身及其導數都是連續的,因而在處理上十分方便。為什么要選擇這個函數,等下在介紹BP網絡的學習算法的時候會進行進一步的介紹。S函數有單極性S型函數和雙極性S型函數兩種,單極性S型函數定義如下:

f(x)=11+e?x

?

其函數曲線如圖11所示。

雙極性S型函數定義如下:

f(x)=1?e?x1+e?x

?

其函數曲線如圖12所示。

3.3 BP網絡的學習算法

BP網絡的學習算法就是BP算法,又叫?δ?算法(在ANN的學習過程中我們會發現不少具有多個名稱的術語), 以三層感知器為例,當網絡輸出與期望輸出不等時,存在輸出誤差?E?,定義如下

?

E=12(d?O)2=12κ=1?(dk?ok)2

?

將以上誤差定義式展開至隱層,有

E=12κ=1?[dκ?f(netκ)]2=12κ=1?[dκ?f(j=0mωjκyj)]2

?

進一步展開至輸入層,有

E=12κ=1?{dκ?f[j=0mωjκf(netj)]}2=12κ=1?{dκ?f[j=0mωjκf(j=0nυijχi)]}2

?

由上式可以看出,網絡輸入誤差是各層權值ωjκυij的函數,因此調整權值可改變誤差?E。 顯然,調整權值的原則是使誤差不斷減小,因此應使權值與誤差的梯度下降成正比,即

Δωjκ=?η?E?ωjκj=0,1,2,,m;κ=1,2,,?

?

?

Δυij=?η?E?υiji=0,1,2,,n;j=1,2,,m

?

對于一般多層感知器,設共有?h?個隱層,按前向順序各隱層節點數分別記為?m1,m2,,mh,各隱層輸出分別記為?y1,y2,,yh,各層權值矩陣分別記為?W1,W2,,Wh,Wh+1,則各層權值調整公式為

輸出層

?

Δωh+1jκ=ηδh+1κyhj=η(dκ?oκ)oκ(1?oκ)yκjj=0,1,2,,mh;κ=1,2,,?

?

第?h?隱層

?

Δωhij=ηδhjyhi?1=η(lκ=1δoκωh+1jκyκj(1?ykjappa)yhi?1i=0,1,2,,m(h?1);j=1,2,,mh

?

按以上規律逐層類推,則第一隱層權值調整公式

?

Δω1pq=ηδ1qχp=η(m2r=1δ2rω2qr)y1q(1?y1q)χpp=0,1,2,,n;j=1,2,,m1

?

容易看出,BP學習算法中,各層權值調整公式形式上都是一樣的,均由3個因素決定,即:

  • 學習率?η
  • 本層輸出的誤差信號?δ
  • 本層輸入信號?Y(或X

其中輸入層誤差信號與網絡的期望輸出與實際輸出之差有關,直接反應了輸出誤差,而各隱層的誤差信號與前面各層的誤差信號有關,是從輸出層開始逐層反傳過來的

可以看出BP算法屬于δ學習規則類,這類算法常被稱為誤差的梯度下降算法δ學習規則可以看成是Widrow-Hoff(LMS)學習規則的一般化(generalize)情況。LMS學習規則與神經元采用的變換函數無關,因而不需要對變換函數求導,δ學習規則則沒有這個性質,要求變換函數可導。這就是為什么我們前面采用Sigmoid函數的原因

綜上所述,BP三要素如圖13所示。

BP網實例

由于BP網絡具有出色的非線性映射能力、泛化能力和容錯能力,因此BP網絡成了至今為止應用最廣泛的人工神經網絡。圖14是Matlab下用BP網絡做線性擬合的結果,效果很好。

代碼如下:

% BP網絡函數逼近實例
% 1.首先定義正弦函數,采樣率為20Hz,頻率為1Hz
k = 1; % 設定正弦信號頻率
p = [0:0.05:4];
t = cos(k*pi*p) + 3*sin(pi*p);
plot(p, t, '-'), xlabel('時間'); ylabel('輸入信號');
% 2.生成BP網絡。用newff函數生成前向型BP網絡,設定隱層中神經元數目為10
% 分別選擇隱層的傳遞函數為 tansig,輸出層的傳遞函數為 purelin,
% 學習算法為trainlm。
net =
newff(minmax(p),[10,10,1],{'tansig','tansig','purelin'},'trainlm');
% 3.對生成的網絡進行仿真并做圖顯示。
y1 = sim(net,p); plot(p, t, '-', p, y1, '--')
% 4.訓練。對網絡進行訓練,設定訓練誤差目標為 1e-5,最大迭代次數為300,
% 學習速率為0.05。
net.trainParam.lr=0.05;
net.trainParam.epochs=1000;
net.trainParam.goal=1e-5;
[net,tr]=train(net,p,t);
%5.再次對生成的網絡進行仿真并做圖顯示。
y2 = sim(net,p);
plot(p, t, '-', p, y2, '--')

?

?

原文地址:http://hahack.com/reading/ann2/

轉載于:https://www.cnblogs.com/sdlypyzq/p/4775894.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給定一個值S,在有序數組中找出兩個元素A和B,使 A+B = S.

在網上看到過一個面試題&#xff0c;感覺挺有意思&#xff0c;看別人的代碼寫的邏輯不夠謹慎&#xff0c;重寫了一個&#xff0c;較真了又。。。 package com.array7.algorithm;public class AlgorithmTest {public static void main(String[] args) {int[] arr {2 ,4 ,5 ,8 ,…

二叉樹的最小深度

給定一個二叉樹&#xff0c;找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹[3,9,20,null,null,15,7] 3/ \9 20/ \15 7返回它的最小深度 2. c 廣度優先 /*** Definition for a b…

(轉)會議期刊論文發表介紹(計算機科學領域)

轉自&#xff1a;http://blog.csdn.net/babyfacer/archive/2009/07/25/4377552.aspx 一、計算機科學期刊介紹計算機科學的publication最大特點在于&#xff1a;極度重視會議&#xff0c;而期刊則通常只用來做re- publication。大部分期刊文章都是會議論文的擴展版&#xff0c;首…

笑男手札:SharePoint 2013 單一服務器場環境恢復數據庫內容

SharePoint 2013 單一服務器場環境恢復數據庫內容 笑男的公司服務很多客戶&#xff0c;當然&#xff0c;這些客戶都很挑剔&#xff0c;所以一般情況下生產&#xff08;Prod&#xff09;環境的服務是不能停的。 當然&#xff0c;如果你將包含相同網站集的數據庫連接到同一個服務…

數組中數字出現的次數

一個整型數組 nums 里除兩個數字之外&#xff0c;其他數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間復雜度是O(n)&#xff0c;空間復雜度是O(1)。 示例 1&#xff1a; 輸入&#xff1a;nums [4,1,4,6] 輸出&#xff1a;[1,6] 或 [6,1]示例 2&#xff1a;…

【轉】String Date Calendar之間的轉換

1.Calendar 轉化 String Calendar calendat Calendar.getInstance(); SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd"); String dateStr sdf.format(calendar.getTime()); 2.String 轉化Calendar String str"2012-5-27"; SimpleDateFormat sd…

圖解 深入淺出 JavaWeb:Servlet 再說幾句

Writer &#xff1a;BYSocket&#xff08;泥沙磚瓦漿木匠&#xff09; 微 博&#xff1a;BYSocket 豆 瓣&#xff1a;BYSocket FaceBook&#xff1a;BYSocket Twitter &#xff1a;BYSocket 上一篇的《 Servlet必會必知 》受到大家一致好評 — (感謝 讀…

react.js 從零開始(五)React 中事件的用法

事件系統 虛擬事件對象 事件處理器將會傳入虛擬事件對象的實例&#xff0c;一個對瀏覽器本地事件的跨瀏覽器封裝。它有和瀏覽器本地事件相同的屬性和方法&#xff0c;包括 stopPropagation() 和 preventDefault()&#xff0c;但是沒有瀏覽器兼容問題。 如果因為一些因素&#x…

乘積的最大子數組

給你一個整數數組 nums &#xff0c;請你找出數組中乘積最大的連續子數組&#xff08;該子數組中至少包含一個數字&#xff09;&#xff0c;并返回該子數組所對應的乘積。 示例 1: 輸入: [2,3,-2,4] 輸出: 6 解釋: 子數組 [2,3] 有最大乘積 6。示例 2: 輸入: [-2,0,-1] 輸出…

javascript new

1. 僅function可以使用new 2. function使用new時&#xff0c;會拷貝function中this的內容給新對象&#xff0c;并將function的prototype指向新對象&#xff08;如果該function沒有prototype&#xff0c;則指向Object的prototype&#xff09; 注&#xff1a;function本身不是Obj…

!+\v1 用來“判斷瀏覽器類型”還是用來“IE判斷版本”的問題!

這種寫法是利用各瀏覽器對轉義字符"\v"的理解不同來判斷瀏覽器類型。在IE中&#xff0c;"\v"沒有轉義&#xff0c;得到的結果為"v"。而在其他瀏覽器中"\v"表示一個垂直制表符&#xff0c;所以ie解析的"\v1" 為 "v1&quo…

三個數的最大乘積

給定一個整型數組&#xff0c;在數組中找出由三個數組成的最大乘積&#xff0c;并輸出這個乘積。 示例 1: 輸入: [1,2,3] 輸出: 6示例 2: 輸入: [1,2,3,4] 輸出: 24注意: 給定的整型數組長度范圍是[3,104]&#xff0c;數組中所有的元素范圍是[-1000, 1000]。 輸入的數組中任…

VB.NET 數組的定義 動態使用 多維數組

我們都知道在全部程序設計語言中數組都是一個非常重要的概念&#xff0c;數組的作用是同意程序猿用同一個名稱來引用多個變量&#xff0c;因此採用數組索引來區分這些變量。非常多情況下利用數組索引來設置一個循環&#xff0c;這樣就能夠高效地處理復雜的情況&#xff0c;因此…

web.xml 中的listener、 filter、servlet 加載順序

1&#xff1a;首先是context-param節點 2&#xff1a;接著配置和調用listeners 并開始監聽 3&#xff1a;然后配置和調用filters filters開始起作用 4&#xff1a;最后加載和初始化配置在load on startup的servlets轉載于:https://www.cnblogs.com/dwchenxj/p/4787717.html

這么多個月,我頭一次體驗用類的概念來寫驅動

原來感覺一樣是那么爽阿。。。快樂得不得了。。。轉載于:https://www.cnblogs.com/suanguade/p/4038190.html

設置Chrome忽略網站證書錯誤

本人在XP下使用Chrome。總是莫名其妙的提示整數錯誤&#xff0c;一部分https網站無法直接訪問。網上找了下&#xff0c;把解決思路記錄下來。 解決這個問題很簡單,只需要修改你平時用來啟動Chrome的快捷方式就可以忽略掉證書錯誤. 具體的操作方法是這樣的: 找到你的Chrome快捷方…

Android開發之合并文件的幾種方式

以下介紹合并文件的幾種方式&#xff0c;并通過合并amr文件來舉例介紹合并文件的詳細流程。amr格式的文件頭是6字節&#xff0c;所以在進行文件合并的時候要減去除第一個文件以外的其它文件的文件頭。 注意&#xff1a;不同文件的文件頭是不一樣的&#xff0c;所以在合并的時候…

數組中出現次數超過一半的數

數組中有一個數字出現的次數超過數組長度的一半&#xff0c;請找出這個數字。 你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。 示例 1: 輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 輸出: 2限制&#xff1a; 1 < 數組長度 < 50000class Solution { pub…

中國寒龍反網絡病毒聯盟核心小組:官方公告,近期本站將會發布各種編程技術視頻教程,詳情請點擊我們的以下公告!...

大家好&#xff0c;我是中國寒反網絡病毒聯盟官方客服&#xff01; 近期&#xff0c;本站將全面升級&#xff0c;本站發布各種編程視頻教程&#xff0c;包括C,c#以及VB&#xff0c;VB.net&#xff0c;E&#xff0c;等相關編程語言入門視頻教程&#xff0c;每天會定期更新視頻教…

javascript學習-原生javascript的小特效(多個運動效果整理)

以下代碼就不詳細解析了&#xff0c;在我之前的多個運動效果中已經解析好多次了&#xff0c;重復的地方這里就不說明了&#xff0c;有興趣的童鞋可以去看看之前的文章《原生javascript的小特效》 <!DOCTYPE HTML> <html lang"en-US"> <head> <m…