0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

標簽 > BP網(wǎng)絡

BP網(wǎng)絡

+關注 0人關注

BP神經(jīng)網(wǎng)絡是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經(jīng)網(wǎng)絡,是目前應用最廣泛的神經(jīng)網(wǎng)絡。

文章: 5
視頻: 2
瀏覽: 22027
帖子: 0

BP網(wǎng)絡簡介

  BP(back propagation)神經(jīng)網(wǎng)絡是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經(jīng)網(wǎng)絡,是目前應用最廣泛的神經(jīng)網(wǎng)絡。

  基本原理

  人工神經(jīng)網(wǎng)絡無需事先確定輸入輸出之間映射關系的數(shù)學方程,僅通過自身的訓練,學習某種規(guī)則,在給定輸入值時得到最接近期望輸出值的結果。作為一種智能信息處理系統(tǒng),人工神經(jīng)網(wǎng)絡實現(xiàn)其功能的核心是算法。BP神經(jīng)網(wǎng)絡是一種按誤差反向傳播(簡稱誤差反傳)訓練的多層前饋網(wǎng)絡,其算法稱為BP算法,它的基本思想是梯度下降法,利用梯度搜索技術,以期使網(wǎng)絡的實際輸出值和期望輸出值的誤差均方差為最小?;綛P算法包括信號的前向傳播和誤差的反向傳播兩個過程。即計算誤差輸出時按從輸入到輸出的方向進行,而調(diào)整權值和閾值則從輸出到輸入的方向進行。正向傳播時,輸入信號通過隱含層作用于輸出節(jié)點,經(jīng)過非線性變換,產(chǎn)生輸出信號,若實際輸出與期望輸出不相符,則轉(zhuǎn)入誤差的反向傳播過程。誤差反傳是將輸出誤差通過隱含層向輸入層逐層反傳,并將誤差分攤給各層所有單元,以從各層獲得的誤差信號作為調(diào)整各單元權值的依據(jù)。通過調(diào)整輸入節(jié)點與隱層節(jié)點的聯(lián)接強度和隱層節(jié)點與輸出節(jié)點的聯(lián)接強度以及閾值,使誤差沿梯度方向下降,經(jīng)過反復學習訓練,確定與最小誤差相對應的網(wǎng)絡參數(shù)(權值和閾值),訓練即告停止。此時經(jīng)過訓練的神經(jīng)網(wǎng)絡即能對類似樣本的輸入信息,自行處理輸出誤差最小的經(jīng)過非線形轉(zhuǎn)換的信息。

BP網(wǎng)絡百科

  BP(back propagation)神經(jīng)網(wǎng)絡是1986年由Rumelhart和McClelland為首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經(jīng)網(wǎng)絡,是目前應用最廣泛的神經(jīng)網(wǎng)絡。

  基本原理

  人工神經(jīng)網(wǎng)絡無需事先確定輸入輸出之間映射關系的數(shù)學方程,僅通過自身的訓練,學習某種規(guī)則,在給定輸入值時得到最接近期望輸出值的結果。作為一種智能信息處理系統(tǒng),人工神經(jīng)網(wǎng)絡實現(xiàn)其功能的核心是算法。BP神經(jīng)網(wǎng)絡是一種按誤差反向傳播(簡稱誤差反傳)訓練的多層前饋網(wǎng)絡,其算法稱為BP算法,它的基本思想是梯度下降法,利用梯度搜索技術,以期使網(wǎng)絡的實際輸出值和期望輸出值的誤差均方差為最小?;綛P算法包括信號的前向傳播和誤差的反向傳播兩個過程。即計算誤差輸出時按從輸入到輸出的方向進行,而調(diào)整權值和閾值則從輸出到輸入的方向進行。正向傳播時,輸入信號通過隱含層作用于輸出節(jié)點,經(jīng)過非線性變換,產(chǎn)生輸出信號,若實際輸出與期望輸出不相符,則轉(zhuǎn)入誤差的反向傳播過程。誤差反傳是將輸出誤差通過隱含層向輸入層逐層反傳,并將誤差分攤給各層所有單元,以從各層獲得的誤差信號作為調(diào)整各單元權值的依據(jù)。通過調(diào)整輸入節(jié)點與隱層節(jié)點的聯(lián)接強度和隱層節(jié)點與輸出節(jié)點的聯(lián)接強度以及閾值,使誤差沿梯度方向下降,經(jīng)過反復學習訓練,確定與最小誤差相對應的網(wǎng)絡參數(shù)(權值和閾值),訓練即告停止。此時經(jīng)過訓練的神經(jīng)網(wǎng)絡即能對類似樣本的輸入信息,自行處理輸出誤差最小的經(jīng)過非線形轉(zhuǎn)換的信息。[3]

  結構

  BP網(wǎng)絡是在輸入層與輸出層之間增加若干層(一層或多層)神經(jīng)元,這些神經(jīng)元稱為隱單元,它們與外界沒有直接的聯(lián)系,但其狀態(tài)的改變,則能影響輸入與輸出之間的關系,每一層可以有若干個節(jié)點。[4]

  計算過程

  BP神經(jīng)網(wǎng)絡的計算過程由正向計算過程和反向計算過程組成。正向傳播過程,輸入模式從輸入層經(jīng)隱單元層逐層處理,并轉(zhuǎn)向輸出層,每~層神經(jīng)元的狀態(tài)只影響下一層神經(jīng)元的狀態(tài)。如果在輸出層不能得到期望的輸出,則轉(zhuǎn)入反向傳播,將誤差信號沿原來的連接通路返回,通過修改各神經(jīng)元的權值,使得誤差信號最小。1.網(wǎng)絡狀態(tài)初始化2.前向計算過程[4]

  優(yōu)劣勢

  BP神經(jīng)網(wǎng)絡無論在網(wǎng)絡理論還是在性能方面已比較成熟。其突出優(yōu)點就是具有很強的非線性映射能力和柔性的網(wǎng)絡結構。網(wǎng)絡的中間層數(shù)、各層的神經(jīng)元個數(shù)可根據(jù)具體情況任意設定,并且隨著結構的差異其性能也有所不同。但是BP神經(jīng)網(wǎng)絡也存在以下的一些主要缺陷。①學習速度慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。②容易陷入局部極小值。③網(wǎng)絡層數(shù)、神經(jīng)元個數(shù)的選擇沒有相應的理論指導。④網(wǎng)絡推廣能力有限。對于上述問題,目前已經(jīng)有了許多改進措施,研究最多的就是如何加速網(wǎng)絡的收斂速度和盡量避免陷入局部極小值的問題。[5]

  應用

  目前,在人工神經(jīng)網(wǎng)絡的實際應用中,絕大部分的神經(jīng)網(wǎng)絡模型都采用BP網(wǎng)絡及其變化形式。它也是前向網(wǎng)絡的核心部分,體現(xiàn)了人工神經(jīng)網(wǎng)絡的精華。BP網(wǎng)絡主要用于以下四個方面。1)函數(shù)逼近:用輸入向量和相應的輸出向量訓練一個網(wǎng)絡逼近一個函數(shù)。2)模式識別:用一個待定的輸出向量將它與輸入向量聯(lián)系起來。3)分類:把輸入向量所定義的合適方式進行分類。4)數(shù)據(jù)壓縮:減少輸出向量維數(shù)以便于傳輸或存儲。

  BP算法的基本思想

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

  正向傳播時,輸入樣本從輸入層傳入,經(jīng)各隱層逐層處理后,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉(zhuǎn)入誤差的反向傳播階段。

  反向傳播時,將輸出以某種形式通過隱層向輸入層逐層反傳,并將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據(jù)。

  這兩個過程的具體流程會在后文介紹。

  BP算法的信號流向圖如下圖所示

  這里寫圖片描述

  BP網(wǎng)絡特性分析——BP三要素

  我們分析一個ANN時,通常都是從它的三要素入手,即

  1)網(wǎng)絡拓撲結構;

  2)傳遞函數(shù);

  3)學習算法。

  這里寫圖片描述

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

  3.1 BP網(wǎng)絡的拓撲結構

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

  一個最簡單的三層BP:

  這里寫圖片描述

  3.2 BP網(wǎng)絡的傳遞函數(shù)

  BP網(wǎng)絡采用的傳遞函數(shù)是非線性變換函數(shù)——Sigmoid函數(shù)(又稱S函數(shù))。其特點是函數(shù)本身及其導數(shù)都是連續(xù)的,因而在處理上十分方便。為什么要選擇這個函數(shù),等下在介紹BP網(wǎng)絡的學習算法的時候會進行進一步的介紹。

  單極性S型函數(shù)曲線如下圖所示。

  f(x)=11+e−x

  這里寫圖片描述

  雙極性S型函數(shù)曲線如下圖所示。

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

  這里寫圖片描述

  3.3 BP網(wǎng)絡的學習算法

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

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

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

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

  進一步展開至輸入層,有

  E=12∑?κ=1dκ−f[∑mj=0ωjκf(netj)]2=12∑?κ=1dκ−f[∑mj=0ωjκf(∑nj=0υijχi)]2

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

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

  Δυij=−η∂E∂υiji=0,1,2,…,n;j=1,2,…,m

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

  輸出層

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

  第 h 隱層

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

  按以上規(guī)律逐層類推,則第一隱層權值調(diào)整公式

  Δω1pq=ηδ1qχp=η(∑m2r=1δ……2——rω2qr)y1q(1−y1q)χp(p=0,1,2,…,n;j=1,2,…,m1)

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

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

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

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

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

  這里寫圖片描述

  下面我們會介紹BP網(wǎng)絡的學習訓練的具體過程。

  BP網(wǎng)絡的訓練分解

  訓練一個BP神經(jīng)網(wǎng)絡,實際上就是調(diào)整網(wǎng)絡的權重和偏置這兩個參數(shù),BP神經(jīng)網(wǎng)絡的訓練過程分兩部分:

  前向傳輸,逐層波浪式的傳遞輸出值;

  逆向反饋,反向逐層調(diào)整權重和偏置;

  我們先來看前向傳輸。

  前向傳輸(Feed-Forward前向反饋)

  在訓練網(wǎng)絡之前,我們需要隨機初始化權重和偏置,對每一個權重?。?minus;1,1]的一個隨機實數(shù),每一個偏置取[0,1]的一個隨機實數(shù),之后就開始進行前向傳輸。

  神經(jīng)網(wǎng)絡的訓練是由多趟迭代完成的,每一趟迭代都使用訓練集的所有記錄,而每一次訓練網(wǎng)絡只使用一條記錄,抽象的描述如下:

  while 終止條件未滿足:

  for record:dataset:

  trainModel(record)123

  首先設置輸入層的輸出值,假設屬性的個數(shù)為100,那我們就設置輸入層的神經(jīng)單元個數(shù)為100,輸入層的結點Ni為記錄第i維上的屬性值xi。對輸入層的操作就這么簡單,之后的每層就要復雜一些了,除輸入層外,其他各層的輸入值是上一層輸入值按權重累加的結果值加上偏置,每個結點的輸出值等該結點的輸入值作變換

  這里寫圖片描述

  前向傳輸?shù)妮敵鰧拥挠嬎氵^程公式如下:

  Ij=∑i=1ωijoi+θj

  oj=f(Ij)=11+eIj

  對隱藏層和輸出層的每一個結點都按照如上圖的方式計算輸出值,就完成前向傳播的過程,緊接著是進行逆向反饋。

  逆向反饋(Backpropagation)

  逆向反饋從最后一層即輸出層開始,我們訓練神經(jīng)網(wǎng)絡作分類的目的往往是希望最后一層的輸出能夠描述數(shù)據(jù)記錄的類別,比如對于一個二分類的問題,我們常常用兩個神經(jīng)單元作為輸出層,如果輸出層的第一個神經(jīng)單元的輸出值比第二個神經(jīng)單元大,我們認為這個數(shù)據(jù)記錄屬于第一類,否則屬于第二類。

  還記得我們第一次前向反饋時,整個網(wǎng)絡的權重和偏置都是我們隨機取,因此網(wǎng)絡的輸出肯定還不能描述記錄的類別,因此需要調(diào)整網(wǎng)絡的參數(shù),即權重值和偏置值,而調(diào)整的依據(jù)就是網(wǎng)絡的輸出層的輸出值與類別之間的差異,通過調(diào)整參數(shù)來縮小這個差異,這就是神經(jīng)網(wǎng)絡的優(yōu)化目標。對于輸出層:

  Ej=Oj(1−Oj)(Tj−Oj)

  其中Ej表示第j個結點的誤差值,Oj表示第j個結點的輸出值,Tj記錄輸出值,比如對于2分類問題,我們用01表示類標1,10表示類別2,如果一個記錄屬于類別1,那么其T1=0,T2=1。

  中間的隱藏層并不直接與數(shù)據(jù)記錄的類別打交道,而是通過下一層的所有結點誤差按權重累加,計算公式如下:

  Ej=Oj(1−Oj)∑kEkWjk

  其中Wjk表示當前層的結點j到下一層的結點k的權重值,Ek下一層的結點k的誤差率。

  計算完誤差率后,就可以利用誤差率對權重和偏置進行更新,首先看權重的更新:

  這里寫圖片描述

  其中λ表示表示學習速率,取值為0到1,學習速率設置得大,訓練收斂更快,但容易陷入局部最優(yōu)解,學習速率設置得比較小的話,收斂速度較慢,但能一步步逼近全局最優(yōu)解。

  更新完權重后,還有最后一項參數(shù)需要更新,即偏置:

  這里寫圖片描述

  至此,我們完成了一次神經(jīng)網(wǎng)絡的訓練過程,通過不斷的使用所有數(shù)據(jù)記錄進行訓練,從而得到一個分類模型。不斷地迭代,不可能無休止的下去,總歸有個終止條件

  訓練終止條件

  每一輪訓練都使用數(shù)據(jù)集的所有記錄,但什么時候停止,停止條件有下面兩種:

  設置最大迭代次數(shù),比如使用數(shù)據(jù)集迭代100次后停止訓練

  計算訓練集在網(wǎng)絡上的預測準確率,達到一定門限值后停止訓練

  BP網(wǎng)絡運行的具體流程

  網(wǎng)絡結構

  輸入層有n個神經(jīng)元,隱含層有p個神經(jīng)元,輸出層有q個神經(jīng)元。

  變量定義

  輸入變量:

  x=(x1,x2,…,xn)

  隱含層輸入變量:

  hi=(hi1,hi2,…,hip)

  隱含層輸出變量:

  ho=(ho1,ho2,…,hop)

  輸出層輸入變量:

  yi=(yi1,yi2,…,yiq)

  輸出層輸出變量:

  yo=(yo1,yo2,…,yoq)

  期望輸出向量:

  do=(d1,d2,…,dq)

  輸入層與中間層的連接權值:

  wih

  隱含層與輸出層的連接權值:

  who

  隱含層各神經(jīng)元的閾值:

  bh

  輸出層各神經(jīng)元的閾值:

  bo

  樣本數(shù)據(jù)個數(shù):

  k=1,2,…,m

  激活函數(shù):

  f(⋅)

  誤差函數(shù):

  e=12∑o=1q(do(k)−yoo(k))2

  第一步:網(wǎng)絡初始化

  給各連接權值分別賦一個區(qū)間(−1,1)內(nèi)的隨機數(shù),設定誤差函數(shù)e,給定計算精度值ε和最大學習次數(shù)M。

  第二步:隨機選取

  隨機選取第k個輸入樣本以及對應的期望輸出

  x(k)=(x1(k),x2(k),…,xn(k))do(k)=(d1(k),d2(k),…,dq(k))

  第三部:隱含層計算

  計算隱含層各神經(jīng)元的輸入和輸出

  hih(k)=∑i=1nwihxi(k)−bh(h=1,2,…,p)

  hih(k)=f(hih(k))(h=1,2,…,p)

  yio(k)=∑h=1pwhohoh(k)−bo(o=1,2,…,q)

  yoo(k)=f(yio(k))(o=1,2,…,q)

  第四步:求偏導數(shù)

  利用網(wǎng)絡期望輸出和實際輸出,計算誤差函數(shù)對輸出層的各神經(jīng)元的偏導數(shù)δo(k)

  這里寫圖片描述這里寫圖片描述

  第六步:修正權值

  利用輸出層各神經(jīng)元的δo(k)和隱含層各神經(jīng)元的輸出來修正連接權值who(k)。

  這里寫圖片描述

  第七部:修正權值

  利用隱含層各神經(jīng)元的δh(k)和輸入層各神經(jīng)元的輸入修正連接權值。

  這里寫圖片描述

  第八步:計算全局誤差

  E=12m∑k=1m∑o=1q(do(k)−yo(k))2

  第九步:判斷模型合理性

  判斷網(wǎng)絡誤差是否滿足要求。

  當誤差達到預設精度或者學習次數(shù)大于設計的最大次數(shù),則結束算法。

  否則,選取下一個學習樣本以及對應的輸出期望,返回第三部,進入下一輪學習。

  BP網(wǎng)絡的設計

  在進行BP網(wǎng)絡的設計是,一般應從網(wǎng)絡的層數(shù)、每層中的神經(jīng)元個數(shù)和激活函數(shù)、初始值以及學習速率等幾個方面來進行考慮,下面是一些選取的原則。

  1.網(wǎng)絡的層數(shù)

  理論已經(jīng)證明,具有偏差和至少一個S型隱層加上一個線性輸出層的網(wǎng)絡,能夠逼近任何有理函數(shù),增加層數(shù)可以進一步降低誤差,提高精度,但同時也是網(wǎng)絡 復雜化。另外不能用僅具有非線性激活函數(shù)的單層網(wǎng)絡來解決問題,因為能用單層網(wǎng)絡解決的問題,用自適應線性網(wǎng)絡也一定能解決,而且自適應線性網(wǎng)絡的 運算速度更快,而對于只能用非線性函數(shù)解決的問題,單層精度又不夠高,也只有增加層數(shù)才能達到期望的結果。

  2.隱層神經(jīng)元的個數(shù)

  網(wǎng)絡訓練精度的提高,可以通過采用一個隱含層,而增加其神經(jīng)元個數(shù)的方法來獲得,這在結構實現(xiàn)上要比增加網(wǎng)絡層數(shù)簡單得多。一般而言,我們用精度和 訓練網(wǎng)絡的時間來恒量一個神經(jīng)網(wǎng)絡設計的好壞:

  (1)神經(jīng)元數(shù)太少時,網(wǎng)絡不能很好的學習,訓練迭代的次數(shù)也比較多,訓練精度也不高。

  (2)神經(jīng)元數(shù)太多時,網(wǎng)絡的功能越強大,精確度也更高,訓練迭代的次數(shù)也大,可能會出現(xiàn)過擬合(over fitting)現(xiàn)象。

  由此,我們得到神經(jīng)網(wǎng)絡隱層神經(jīng)元個數(shù)的選取原則是:在能夠解決問題的前提下,再加上一兩個神經(jīng)元,以加快誤差下降速度即可。

  3.初始權值的選取

  一般初始權值是取值在(−1,1)之間的隨機數(shù)。另外威得羅等人在分析了兩層網(wǎng)絡是如何對一個函數(shù)進行訓練后,提出選擇初始權值量級為s√r的策略, 其中r為輸入個數(shù),s為第一層神經(jīng)元個數(shù)。

  4.學習速率

  學習速率一般選取為0.01−0.8,大的學習速率可能導致系統(tǒng)的不穩(wěn)定,但小的學習速率導致收斂太慢,需要較長的訓練時間。對于較復雜的網(wǎng)絡, 在誤差曲面的不同位置可能需要不同的學習速率,為了減少尋找學習速率的訓練次數(shù)及時間,比較合適的方法是采用變化的自適應學習速率,使網(wǎng)絡在 不同的階段設置不同大小的學習速率。

  5.期望誤差的選取

  在設計網(wǎng)絡的過程中,期望誤差值也應當通過對比訓練后確定一個合適的值,這個合適的值是相對于所需要的隱層節(jié)點數(shù)來確定的。一般情況下,可以同時對兩個不同 的期望誤差值的網(wǎng)絡進行訓練,最后通過綜合因素來確定其中一個網(wǎng)絡。

  BP網(wǎng)絡的局限性

  BP網(wǎng)絡具有以下的幾個問題:

  (1)需要較長的訓練時間:這主要是由于學習速率太小所造成的,可采用變化的或自適應的學習速率來加以改進。

 ?。?)完全不能訓練:這主要表現(xiàn)在網(wǎng)絡的麻痹上,通常為了避免這種情況的產(chǎn)生,一是選取較小的初始權值,而是采用較小的學習速率。

 ?。?)局部最小值:這里采用的梯度下降法可能收斂到局部最小值,采用多層網(wǎng)絡或較多的神經(jīng)元,有可能得到更好的結果。

  BP網(wǎng)絡的改進

  P算法改進的主要目標是加快訓練速度,避免陷入局部極小值等,常見的改進方法有帶動量因子算法、自適應學習速率、變化的學習速率以及作用函數(shù)后縮法等。 動量因子法的基本思想是在反向傳播的基礎上,在每一個權值的變化上加上一項正比于前次權值變化的值,并根據(jù)反向傳播法來產(chǎn)生新的權值變化。而自適應學習 速率的方法則是針對一些特定的問題的。改變學習速率的方法的原則是,若連續(xù)幾次迭代中,若目標函數(shù)對某個權倒數(shù)的符號相同,則這個權的學習速率增加, 反之若符號相反則減小它的學習速率。而作用函數(shù)后縮法則是將作用函數(shù)進行平移,即加上一個常數(shù)。

  BP網(wǎng)絡實現(xiàn)

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

  這里寫圖片描述

  % BP網(wǎng)絡函數(shù)逼近實例

  % 1.首先定義正弦函數(shù),采樣率為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網(wǎng)絡。用newff函數(shù)生成前向型BP網(wǎng)絡,設定隱層中神經(jīng)元數(shù)目為10

  % 分別選擇隱層的傳遞函數(shù)為 tansig,輸出層的傳遞函數(shù)為 purelin,

  % 學習算法為trainlm。

  net =

  newff(minmax(p),[10,10,1],{‘tansig’,‘tansig’,‘purelin’},‘trainlm’);

  % 3.對生成的網(wǎng)絡進行仿真并做圖顯示。

  y1 = sim(net,p); plot(p, t, ‘-’, p, y1, ‘--’)

  % 4.訓練。對網(wǎng)絡進行訓練,設定訓練誤差目標為 1e-5,最大迭代次數(shù)為300,

  % 學習速率為0.05。

  net.trainParam.lr=0.05;

  net.trainParam.epochs=1000;

  net.trainParam.goal=1e-5;

 ?。踤et,tr]=train(net,p,t);

  %5.再次對生成的網(wǎng)絡進行仿真并做圖顯示。

  y2 = sim(net,p);

  plot(p, t, ‘-’, p, y2, ‘--’)12345678910111213141516171819202122

  這是用C語言寫的:用BP神經(jīng)網(wǎng)絡擬合函數(shù):Y=sin(X)#include “math.h”

  #include “time.h”

  #include “stdio.h”

  #include “stdlib.h”

  #include “ctype.h”

  #define Ni 1

  #define Nm 4

  #define No 1

  #define L 100

  #define Enom 0.02

  #define loopmax 100000

  #define e 2.71828

  double E;

  double a,u,n;

  double W1[Ni][Nm],D1[Ni][Nm],W2[Nm][No],D2[Nm][No];

  double D22[Nm][No],D11[Ni][No];

  double a1[Ni][Nm],a2[Nm][No];

  double Pi[L][Ni],Pm[L][Nm],Po[L][No],T[L][No];

  double Xm[L][Nm],Xo[L][No];

  double Qm[L][Nm],Qo[L][No];

  void proceed();

  void proceedR();

  void forQ();

  void amend();

  void initiate();

  double newa(double a,double D);

  double cal(double d);

  double vcal(double d);

  main()

  {

  long int i;

  int flag;

  char choice;

  for(;;)

  {

  flag=0;

  initiate();

  for(i=0;;i++)

  {

  proceed();

  if( E 《 Enom )

  {

  flag=1;

  break;

  }

  if( i 》= loopmax)

  {

  flag = -1;

  break;

  }

  if(i%2500==0)

  printf(“第%10d輪誤差:%20f,學習速率:%10f\n”,i,E,a1[0][0]);

  forQ();

  amend();

  }

  if(flag》0)proceedR();

  else printf(“訓練失?。n”);

  for(;;)

  {

  choice=getchar();

  printf(“是否繼續(xù)?(Y/N)\n”);

  choice=getchar();

  choice=toupper(choice);

  if(choice==‘Y’)break;

  if(choice==‘N’)exit(0);

  }

  }

  }

  void initiate()

  {

  int i,j;

  int random;

  double x;

  double step;

  int stime;

  long ltime;

  ltime=time(NULL);

  stime=(unsigned)ltime/2;

  srand(stime);

  a=0.02;

  u=1;

  n=1;

  printf(“本程序?qū)⒂肂P神經(jīng)網(wǎng)絡擬合函數(shù):Y=sin(X)\n\n”);

  for( i=0; i《Nm; i++)

  {

  for( j=0; j《Ni; j++)

  {

  random=rand()%100-50;

  x=random;

  x=x/100;

  W1[j][i]=x;

  D11[j][i]=0;

  D1[j][i]=0;

  a1[j][i]=0.01;

  }

  for( j=0; j《No; j++)

  {

  random=rand()%100-50;

  x=random;

  x=x/100;

  W2[i][j]=x;

  D22[i][j]=0;

  D2[i][j]=0;

  a2[i][j]=0.01;

  }

  }

  step=1.0/L;

  for(i=0;i《L;i++)

  {

  x=i;

  Pi[i][0]=x*step;

  T[i][0]=sin(Pi[i][0]);

  }

  printf(“初始化成功!\n\n下面將對神經(jīng)網(wǎng)絡進行訓練請稍候。\n”);

  }

  void proceed()

  {

  int i, j, k;

  E=0 ;

  for( i=0; i《L; i++ )

  {

  for( j=0; j《Nm; j++ )

  {

  Pm[i][j] = 0;

  for( k=0; k《Ni; k++ )

  {

  Pm[i][j] = Pi[i][k] * W1[k][j] + Pm[i][j];

  }

  Xm[i][j] = cal( Pm[i][j] );

  }

  for( j=0; j《No; j++)

  {

  Po[i][j] = 0;

  for( k=0; k《Nm; k++)

  {

  Po[i][j] = Xm[i][k] * W2[k][j] + Po[i][j];

  }

  Xo[i][j] = cal( Po[i][j] );

  E = E + ( Xo[i][j] - T[i][j] ) * ( Xo[i][j] - T[i][j] ) / 2;

  }

  }

  }

  void forQ()

  {

  int i,j,k;

  for( i=0; i《L; i++ )

  {

  for( j=0; j《No; j++)

  {

  Qo[i][j] = ( T[i][j] - Xo[i][j] )* vcal( Xo[i][j] );

  }

  for(j=0; j《Nm; j++)

  {

  Qm[i][j]=0;

  for( k=0; k《No; k++)

  {

  Qm[i][j] = Qo[i][k] * W2[j][k] + Qm[i][j];

  }

  Qm[i][j] = Qm[i][j] * vcal( Xm[i][j] );

  }

  }

  }

  void amend()

  {

  int i,j,k;

  double D;

  for( i=0; i《Nm; i++)

  {

  for( j=0; j《Ni; j++)

  {

  D1[j][i]=0;

  }

  for( j=0; j《No; j++)

  {

  D2[i][j]=0;

  }

  }

  for( i=0; i《Ni; i++)

  {

  for( j=0; j《Nm; j++)

  {

  for( k=0; k《L; k++)

  {

  D1[i][j] = Qm[k][j] * Pi[k][i] + D1[i][j];

  }

  D = D1[i][j] * D11[i][j] ;//為D11付初值

  a1[i][j] = newa( a1[i][j] , D ); // a 付初值

  W1[i][j] = W1[i][j] + a1[i][j] * ( n * D1[i][j] + ( 1 - n ) * D11[i][j] );

  D11[i][j] = D1[i][j];

  }

  }

  for( i=0; i《Nm; i++)

  {

  for( j=0; j《No; j++)

  {

  for( k=0; k《L; k++)

  {

  D2[i][j] = Qo[k][j] * Xm[k][i] + D2[i][j];

  }

  D = D2[i][j] * D22[i][j] ;//為D11付初值

  a2[i][j] = newa( a2[i][j] , D );

  W2[i][j] = W2[i][j] + a2[i][j] * ( n * D2[i][j] + ( 1 - n ) * D22[i][j] );

  D22[i][j] = D2[i][j];

  }

  }

  }

  void proceedR()

  {

  int i, j;

  float x;

  double input,output;

  char choice;

  for(;;)

  {

  for(;;)

  {

  printf(“在此輸入需要計算的值(0,1):\n”);

  scanf(“%f”,&x);

  input=(double)x;

  if((input》=0)&(input《=1))break;

  printf(“注意輸入值應介于0、1之間!\n”);

  for(;;)

  {

  choice=getchar();

  printf(“是否繼續(xù)?(Y/N)\n”);

  choice=getchar();

  choice=toupper(choice);

  if(choice==‘Y’)break;

  if(choice==‘N’)exit(0);

  }

  }

  for(i=0;i《Nm;i++)

  {

  Pm[0][i]=0;

  for( j=0; j《Ni; j++ )

  {

  Pm[0][i] = input* W1[j][i]+Pm[0][i] ;

  }

  Xm[0][i] = cal( Pm[0][i] );

  }

  for( i=0; i《No; i++)

  {

  Po[0][i] = 0;

  for( j=0; j《Nm; j++)

  {

  Po[0][i] = Xm[0][j] * W2[j][i]+Po[0][i];

  }

  }

  output=cal( Po[0][0] );

  printf(“輸入值為%20f對應的結果為%f\n”,input,output);

  printf(“輸入值為%20f對應的正常結果為%f\n”,input,sin(input));

  for(;;)

  {

  choice=getchar();

  printf(“是否繼續(xù)?(Y/N)\n”);

  choice=getchar();

  choice=toupper(choice);

  if(choice==‘Y’)break;

  if(choice==‘N’)exit(0);

  }

  }

  }

  double newa(double a, double D)

  {

  if( D 》 0 )

  {

  {

  if(a《=0.04)

  a = a * 2;

  else a=0.08;

  }

  }

  else

  if ( D 《 0)

  {

  if(a》=0.02)

  {

  a = a / 2;

  }

  else a=0.01;

  }

  return a;

  }

  double cal(double d)

  {

  d = - (d * u); // chushihua

  d = exp( d );

  d = 1 / ( 1 + d );

  return d;

  }

  double vcal(double d)

  {

  return u * d * ( 1 - d );

  }

查看詳情

bp網(wǎng)絡知識

展開查看更多

bp網(wǎng)絡技術

BP網(wǎng)絡的基本概念和訓練原理

BP網(wǎng)絡 ,全稱為 反向傳播神經(jīng)網(wǎng)絡(Backpropagation Neural Network) ,是一種基于誤差反向傳播算法(Error Back...

2024-07-19 標簽:神經(jīng)網(wǎng)絡BP網(wǎng)絡機器學習 1628 0

用TensorFlow2.0框架實現(xiàn)BP網(wǎng)絡

用TensorFlow2.0框架實現(xiàn)BP網(wǎng)絡

首先是為什么要使用激活函數(shù)?這要回顧一下我們在學習BP之前學習的感知器模型。它模仿的是人類體內(nèi)的信號傳導的過程,當信號達到一定的閾值時,就可以繼續(xù)向后傳播。

2023-03-01 標簽:信號閾值函數(shù) 2366 0

BP網(wǎng)絡在蓄電池電壓監(jiān)測模塊設計與應用

BP網(wǎng)絡在蓄電池電壓監(jiān)測模塊設計與應用

浮充電壓對蓄電池的容量及壽命有直接影響。高于推薦的極限浮充電壓會降低電池使用壽命及容量。低于推薦的浮充電壓會導致電池容量不足。蓄電池容量的減少將導致UP...

2017-12-01 標簽:蓄電池bp網(wǎng)絡 1566 0

基于BP網(wǎng)絡的結冰傳感器非線性校正方法

基于BP網(wǎng)絡的結冰傳感器非線性校正方法

  0引言   結冰傳感器是用于探測結冰厚度的設備。它是基于振動原理設計的,振動體采用振管形式。當振管垂直立于環(huán)境中時,激振電路為振管提供交變磁場,振管在

2010-12-20 標簽:傳感器非線性bp網(wǎng)絡 953 0

查看更多>>

bp網(wǎng)絡帖子

查看更多>>

bp網(wǎng)絡資料下載

查看更多>>

bp網(wǎng)絡資訊

基于BP網(wǎng)絡的字母識別

基于BP網(wǎng)絡的字母識別

基于BP網(wǎng)絡的字母識別 摘  要: 介紹了用BP神經(jīng)網(wǎng)絡方法對英文字母進行識別,并在識別過程中考慮了噪聲干擾及非線性因素的存在,使網(wǎng)絡具有一定的容

2009-11-07 標簽:BP網(wǎng)絡 1540 0

查看更多>>

bp網(wǎng)絡數(shù)據(jù)手冊

相關標簽

相關話題

換一批
  • 加速度傳感器
    加速度傳感器
    +關注
    加速度傳感器是一種能夠測量加速度的傳感器。通常由質(zhì)量塊、阻尼器、彈性元件、敏感元件和適調(diào)電路等部分組成。
  • OBD
    OBD
    +關注
    OBD是英文On-Board Diagnostic的縮寫,中文翻譯為“車載診斷系統(tǒng)”。這個系統(tǒng)隨時監(jiān)控發(fā)動機的運行狀況和尾氣后處理系統(tǒng)的工作狀態(tài),一旦發(fā)現(xiàn)有可能引起排放超標的情況,會馬上發(fā)出警示。
  • 傅里葉變換
    傅里葉變換
    +關注
    盡管最初傅里葉分析是作為熱過程的解析分析的工具,但是其思想方法仍然具有典型的還原論和分析主義的特征?!叭我狻钡暮瘮?shù)通過一定的分解,都能夠表示為正弦函數(shù)的線性組合的形式,而正弦函數(shù)在物理上是被充分研究而相對簡單的函數(shù)類,這一想法跟化學上的原子論想法何其相似!
  • TOF
    TOF
    +關注
  • 角度傳感器
    角度傳感器
    +關注
    角度傳感器,顧名思義,是用來檢測角度的。它的身體中有一個孔,可以配合樂高的軸。當連結到RCX上時,軸每轉(zhuǎn)過1/16圈,角度傳感器就會計數(shù)一次。
  • L298
    L298
    +關注
  • DMD
    DMD
    +關注
    DMD是一種整合的微機電上層結構電路單元,利用COMS SRAM記憶晶胞所制成。DMD上層結構的制造是從完整CMOS內(nèi)存電路開始,再透過光罩層的使用,制造出鋁金屬層和硬化光阻層交替的上層結構
  • OV7620
    OV7620
    +關注
    ov7620是一款CMOS攝像頭器件,是彩色CMOS型圖像采集集成芯片,提供高性能的單一小體積封裝,該器件分辨率可以達到640X480,傳輸速率可以達到30幀。
  • MC9S12XS128
    MC9S12XS128
    +關注
    HCS12X系列單片機簡介 Freescale 公司的16位單片機主要分為HC12 、HCS12、HCS12X三個系列。HC12核心是16位高速CPU12核,總線速度8MHZ;HCS12系列單片機以速度更快的CPU12內(nèi)核為核心,簡稱S12系列,典型的S12總線速度可以達到25MHZ。
  • TDC-GP2
    TDC-GP2
    +關注
  • 干擾器
    干擾器
    +關注
    干擾器有多種類型,如GPS干擾器是適用于長途客車司機以及一些不想被GPS信號追蹤到的人群的一個機器,手機信號干擾器主要針對各類考場、學校、加油站、教堂、法庭、圖書館、會議中心(室)、影劇院、醫(yī)院、政府、金融、監(jiān)獄、公安、軍事重地等禁止使用手機的場所。
  • 重力傳感器
    重力傳感器
    +關注
    采用彈性敏感元件制成懸臂式位移器,與采用彈性敏感元件制成的儲能彈簧來驅(qū)動電觸點,完成從重力變化到電信號的轉(zhuǎn)換,廣泛應用在中高端智能手機和平板電腦內(nèi)。
  • 線束
    線束
    +關注
  • 半導體工藝
    半導體工藝
    +關注
  • 機械臂
    機械臂
    +關注
  • MPSoC
    MPSoC
    +關注
  • Genesys
    Genesys
    +關注
  • 直流無刷電機
    直流無刷電機
    +關注
    無刷直流電機由電動機主體和驅(qū)動器組成,是一種典型的機電一體化產(chǎn)品。 無刷電機是指無電刷和換向器(或集電環(huán))的電機,又稱無換向器電機。早在十九紀誕生電機的時候,產(chǎn)生的實用性電機就是無刷形式,即交流鼠籠式異步電動機,這種電動機得到了廣泛的應用。
  • 半導體制冷片
    半導體制冷片
    +關注
  • 聲紋識別
    聲紋識別
    +關注
    聲紋識別,生物識別技術的一種,也稱為說話人識別,包括說話人辨認和說話人確認。聲紋識別就是把聲信號轉(zhuǎn)換成電信號,再用計算機進行識別。不同的任務和應用會使用不同的聲紋識別技術,如縮小刑偵范圍時可能需要辨認技術,而銀行交易時則需要確認技術。
  • 零序
    零序
    +關注
  • ATmega16單片機
    ATmega16單片機
    +關注
  • 直流電壓
    直流電壓
    +關注
    凡是電流方向不隨時間變化的電流稱為直流電壓。電流值可以全為正值,也可以全為負值。在直流電流中又可分為兩種:穩(wěn)恒直流和脈動直流。直流輸電技術已經(jīng)由簡單的端對端工程朝著大規(guī)模多端輸電的方向發(fā)展,這些工程將是未來直流電網(wǎng)的組成部分,將相同電壓等級的直流工程連接成網(wǎng)遠比不同電壓等級下的獨立工程更經(jīng)濟、便捷。
  • LPC2368
    LPC2368
    +關注
  • 緩沖電路
    緩沖電路
    +關注
  • Buck-Boost
    Buck-Boost
    +關注
    buck是降壓型電路,boost是升壓型電路,可以分開單獨使用,buck-boost電路就是把2種電路合在一起,可升可降。buck-boost拓撲電路可以實現(xiàn)升降壓功能,常見的buck-boost電路有兩種,第一種是輸入與輸出電壓極性相反,只需采用一個開關管和二極管。另外一種是采用兩個開關管和兩個二極管,可實現(xiàn)同極性電壓升降壓功能。
  • 識別技術
    識別技術
    +關注
    所謂識別技術,也稱為自動識別技術,通過被識別物體與識別裝置之間的交互自動獲取被識別物體的相關信息,并提供給計算機系統(tǒng)供進一步處理。
  • 電磁繼電器
    電磁繼電器
    +關注
    電磁繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應用于自動控制電路中,它實際上是用較小的電流、較低的電壓去控制較大電流、較高的電壓的一種“自動開關”。故在電路中起著自動調(diào)節(jié)、安全保護、轉(zhuǎn)換電路等作用。
  • 制冷片
    制冷片
    +關注
  • VCM
    VCM
    +關注

關注此標簽的用戶(0人)

編輯推薦廠商產(chǎn)品技術軟件/工具OS/語言教程專題