如何理解神經網路裡面的反向傳播演算法

2022-10-14 11:22:50 字數 5043 閱讀 2072

1樓:合小滿

1.普通的機器學習模型:

其實,基本上所有的基本機器學習模型都可以概括為以下的特徵:根據某個函式,將輸入計算並輸出。圖形化表示為下圖:

當我們的g(h)為sigmoid函式時候,它就是一個邏輯迴歸的分類器。當g(h)是一個只能取0或1值的函式時,它就是一個感知機。那麼問題來了,這一類模型有明顯缺陷:

當模型線性不可分的時候,或者所選取得特徵不完備(或者不夠準確)的時候,上述分類器效果並不是特別喜人。如下例:

我們可以很輕易的用一個感知機模型(感知器演算法)來實現一個邏輯與(and),邏輯或(or)和邏輯或取反的感知器模型,(感知器模型演算法連結),因為上述三種模型是線性可分的。但是,如果我們用感知器模型取實現一個邏輯非異或(相同為1,不同為0),我們的訓練模型的所有輸出都會是錯誤的,該模型線性不可分!

2.神經網路引入:

我們可以構造以下模型:

(其中,a代表邏輯與,b代表邏輯或取反,c代表邏輯或)

上述模型就是一個簡單的神經網路,我們通過構造了三個感知器,並將兩個感知器的輸出作為了另一個感知其的輸入,實現了我們想要的邏輯非異或模型,解決了上述的線性不可分問題。那麼問題是怎麼解決的呢?其實神經網路的實質就是每一層隱藏層(除輸入和輸出的節點,後面介紹)的生成,都生成了新的特徵,新的特徵在此生成新的特徵,知道最新的特徵能很好的表示該模型為止。

這樣就解決了線性不可分或特徵選取不足或不精確等問題的產生。(以前曾介紹過線性不可分的實質就是特徵不夠)

神經網路的模型結構如下:

(藍色,紅色,黃色分別代表輸入層,影藏層,輸出層)

在此我們介紹的神經網路中的每一個訓練模型用的都是邏輯迴歸模型即g(h)是sigmoid函式。

我們可以將神經網路表示如下:

3.神經網路的**結果(hypothesis函式)的計算和costfunction的計算

**結果的計算其實與普通的邏輯迴歸計算沒有多大區別。只是有時候需要將某幾個邏輯迴歸的輸出作為其他邏輯迴歸模型的輸入罷了,比如上例的輸出結果為:

那麼costfunction的計算又和邏輯迴歸的costfunction計算有什麼區別呢?

邏輯迴歸的costfunction如下:

上述式子的本質是將**結果和實際標註的誤差用某一種函式估算,但是我們的神經網路模型有時候輸出不止一個,所以,神經網路的誤差估算需要將輸出層所有的costfunction相加:

k:代表第幾個輸出。

補充:神經網路可以解決幾分類問題?

理論上,當輸出單元只有一個時,可以解決2分類問題,當輸出單元為2時可以解決4分類問題,以此類推...

實質上,我們三個輸出單元時,可以解決三分類問題([1,0,0],[0,1,0],[0,0,1]),為什麼如此設計?暫時留白,以後解決

ps:面試題:一個output機器,15%可能輸出1,85%輸出0,構造一個新的機器,使0,1輸出可能性相同? 答:讓output兩次輸出01代表0,10代表1,其餘丟棄

4.神經網路的訓練

這兒也同於logistic迴歸,所謂的訓練也就是調整w的權值,讓我們再一次把神經網路的costfunction寫出來!

w代表所有層的特徵權值,wij(l)代表第l層的第i個元素與第j個特徵的特徵權值

m代表樣本個數,k代表輸出單元個數

hw(x(i))k代表第i個樣本在輸出層的第k個樣本的輸出 y(i)k代表第i個樣本的第k個輸出

然後同於logistic迴歸,將所有的w更新即可。難處在於此處的偏導數怎麼求?首先得說說鏈式求導法則:

所以我們可以有:

接下來的問題就是有theta了,當我們要求的錯誤變化率是最後一層(最後一層既是輸出層的前一層)且只看一個輸出神經元時則:

多個相加即可

那麼中間層次的神經元變化率如何求得呢?我們需要研究l層和了+1層之間的關係,如下圖:

第l層的第i個z與第l層的第i個a的關係就是取了一個sigmod函式,然而第l層的第i個a與和其對應的w相乘後在加上其他的節點與其權值的乘積構成了第l+1層的z,好拗口,好難理解啊,看下式:

大體也就是這麼個情況,具體的步驟為:

1.利用前向傳播演算法,計算出每個神經元的輸出

2.對於輸出層的每一個輸出,計算出其所對應的誤差

3.計算出每個神經元的錯誤變化率即:

4.計算costfunction的微分,即:

2樓:匿名使用者

你參考下

如何理解神經網路裡面的反向傳播演算法

3樓:爵帝倵士

反向傳播演算法(backpropagation)是目前用來訓練人工神經網路(artificial neural network,ann)的最常用且最有效的演算法。其主要思想是:

(1)將訓練集資料輸入到ann的輸入層,經過隱藏層,最後達到輸出層並輸出結果,這是ann的前向傳播過程;

(2)由於ann的輸出結果與實際結果有誤差,則計算估計值與實際值之間的誤差,並將該誤差從輸出層向隱藏層反向傳播,直至傳播到輸入層;

(3)在反向傳播的過程中,根據誤差調整各種引數的值;不斷迭代上述過程,直至收斂。

反向傳播演算法的思想比較容易理解,但具體的公式則要一步步推導,因此本文著重介紹公式的推導過程。

1. 變數定義

上圖是一個三層人工神經網路,layer1至layer3分別是輸入層、隱藏層和輸出層。如圖,先定義一些變數:

表示第層的第個神經元連線到第層的第個神經元的權重;

表示第層的第個神經元的偏置;

表示第層的第個神經元的輸入,即:

表示第層的第個神經元的輸出,即:

其中表示啟用函式。

如何理解神經網路裡面的反向傳播演算法

4樓:淵源

反向傳播演算法(bp演算法)主要是用於最常見的一類神經網路,叫多層前向神經網路,本質可以看作是一個general nonlinear estimator,即輸入x_1 ... x_n 輸出y,檢視找到一個關係 y=f(x_1 ... x_n) (在這裡f的實現方式就是神經網路)來近似已知資料。

為了得到f中的未知引數的最優估計值,一般會採用最小化誤差的準則,而最通常的做法就是梯度下降,到此為止都沒問題,把大家困住了很多年的就是多層神經網路無法得到顯式表達的梯度下降演算法!

bp演算法實際上是一種近似的最優解決方案,背後的原理仍然是梯度下降,但為了解決上述困難,其方案是將多層轉變為一層接一層的優化:只優化一層的引數是可以得到顯式梯度下降表示式的;而順序呢必須反過來才能保證可工作——由輸出層開始優化前一層的引數,然後優化再前一層……跑一遍下來,那所有的引數都優化過一次了。但是為什麼說是近似最優呢,因為數學上除了很特殊的結構,step-by-step的優化結果並不等於整體優化的結果!

不過,好歹現在能工作了,不是嗎?至於怎麼再改進(已經很多改進成果了),或者採用其他演算法(例如智慧優化演算法等所謂的全域性優化演算法,就算是沒有bp這個近似梯度下降也只是區域性最優的優化演算法)那就是新的研究課題了。

如何理解cnn神經網路裡的反向傳播backpropagation,bp演算法

5樓:撩漢那一抹淺笑

類比來說類似於

幾個人站成一排

第一個人看一幅畫(輸入資料),描述給第二個人(隱層)……依此類推,到最後一個人(輸出)的時候,畫出來的畫肯定不能看了(誤差較大)。

反向傳播就是,把畫拿給最後一個人看(求取誤差),然後最後一個人就會告訴前面的人下次描述時需要注意**(權值修正)。

如何理解神經網路的收斂性?

6樓:牙堯穎

收斂和迭代演算法有關。

反向傳播演算法是定義一個誤差er(往往是輸出結果與預想結果之間的某個範數),然後求出滿足誤差極小的權向量。如果把誤差看成一個連續函式(泛函)的話,求對權向量各分量的偏導為0即可,但是實際上它是離散的,所以我們需要用迭代來求最小梯度。

如果是新定義演算法的話理論上的收斂要證明,可以證明它在迭代次數趨近無窮的時候等於某一解,也可以證明它滿足李普希茲條件(就是帶有完備範數和李普希茲常數的那個),這種情形下我們叫做收斂,要是用已有演算法或者乾脆就是bp演算法的時候不需要你證明。理論上不收斂的情況是這樣,當迭代次數趨近無窮的時候,權向量的解不唯一。

實際上的收斂是這樣,給定一個最大迭代次數n,一個誤差限erl,反向傳播演算法應該很容易找,我不往上寫了,每一步權值修正都會使er減小,直觀的看就是權向量的分量沿著梯度減小的方向在前進,雖然理論上樣本足夠大並且n趨於無窮的時候會收斂,但是實際上有可能出現當迭代到第n次,誤差er依然大於誤差限erl的情況,也就是說我們沒有解出來滿足要求的權向量,所以網路訓練失敗,叫做不收斂。當然,也可以使用梯度限來作為迭代終止的條件,這種情況下不收斂就是梯度在迭代了n次以後沒有小於某一值,從而沒有求出滿足要求的權向量;收斂就是求出了滿足梯度限的權向量。

如何理解bp神經網路演算法中,總方差對某個權值的偏導,是某層的誤差?

7樓:匿名使用者

可以把網路的輸bai出誤差(du或者熵)理解成zhi一個隱函式,一個關於權值的dao隱函式error = f(w1, w2, ... , wn)要求內函式f的最小值,通常使用容梯度下降法,那麼就要求梯度,也就是f對每個wi的偏導

bp演算法、bp神經網路、遺傳演算法、神經網路這四者之間的關係

8樓:流星寒冰

這四個都屬於人工智慧演算法的範疇。其中bp演算法、bp神經網路和神經網路屬於神經網路這個大類。遺傳演算法為進化演算法這個大類。

神經網路模擬人類大腦神經計算過程,可以實現高度非線性的**和計算,主要用於非線性擬合,識別,特點是需要「訓練」,給一些輸入,告訴他正確的輸出。若干次後,再給新的輸入,神經網路就能正確的**對於的輸出。神經網路廣泛的運用在模式識別,故障診斷中。

bp演算法和bp神經網路是神經網路的改進版,修正了一些神經網路的缺點。

遺傳演算法屬於進化演算法,模擬大自然生物進化的過程:優勝略汰。個體不斷進化,只有高質量的個體(目標函式最小(大))才能進入下一代的繁殖。

如此往復,最終找到全域性最優值。遺傳演算法能夠很好的解決常規優化演算法無法解決的高度非線性優化問題,廣泛應用在各行各業中。差分進化,蟻群演算法,粒子群演算法等都屬於進化演算法,只是模擬的生物群體物件不一樣而已。

bp神經網路收斂問題,BP神經網路的幾個簡單問題

當然是越慢。因為bai已經接近最低du點,訓練也進入誤 zhi差曲面的平dao坦區,每次搜內索的誤差下降速度是容減慢的。這一點可以在bp神經網路的誤差調整公式上看出。事實上收斂速度逐漸減慢,這是正常的,如果一定要避免這種情況,可以自適應改變學習率。由於傳統bp演算法的學習速率是固定的,因此網路的收斂...

在神經網路中weight decay起到的做用是什麼?mom

weigth decay的作用是用來放在cost function中作為正則項,來防止overfitting的,這樣做的目的是使不重要的特徵項權重變小。momentum是什麼意思及用法 體弱,需要復關心和照顧制.帶著我們的 孩子,去關心照顧我們的老人,是對孩子最好的教育.常回家看看,哪怕是幫媽媽洗個...

怎樣用python構建卷積神經網路

用keras框架較為方便 首先安裝anaconda,然後通過pip安裝keras 以下 wphh的部落格。coding utf 8 gpu run command theano flags mode fast run,device gpu,floatx float32 python cnn.py c...