導航:首頁 > 源碼編譯 > 神經演算法反向傳遞

神經演算法反向傳遞

發布時間:2023-06-28 05:21:27

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

反向傳播演算法(Backpropagation)是目前用來訓練人工神經網路(Artificial Neural Network,ANN)的最常用且最有效的演算法。其主要思想是:
(1)將訓練集數據輸入到ANN的輸入層,經過隱藏層,最後達到輸出層並輸出結果,這是ANN的前向傳播過程;
(2)由於ANN的輸出結果與實際結果有誤差,則計算估計值與實際值之間的誤差,並將該誤差從輸出層向隱藏層反向傳播,直至傳播到輸入層;
(3)在反向傳播的過程中,根據誤差調整各種參數的值;不斷迭代上述過程,直至收斂。

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

1. 變數定義

上圖是一個三層人工神經網路,layer1至layer3分別是輸入層、隱藏層和輸出層。如圖,先定義一些變數:
表示第層的第個神經元連接到第層的第個神經元的權重;
表示第層的第個神經元的偏置;
表示第層的第個神經元的輸入,即:

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

其中表示激活函數。

2. 代價函數
代價函數被用來計算ANN輸出值與實際值之間的誤差。常用的代價函數是二次代價函數(Quadratic cost function):

其中,表示輸入的樣本,表示實際的分類,表示預測的輸出,表示神經網路的最大層數。

3. 公式及其推導
本節將介紹反向傳播演算法用到的4個公式,並進行推導。如果不想了解公式推導過程,請直接看第4節的演算法步驟。
首先,將第層第個神經元中產生的錯誤(即實際值與預測值之間的誤差)定義為:

本文將以一個輸入樣本為例進行說明,此時代價函數表示為:

公式1(計算最後一層神經網路產生的錯誤):

其中,表示Hadamard乘積,用於矩陣或向量之間點對點的乘法運算。公式1的推導過程如下:

公式2(由後往前,計算每一層神經網路產生的錯誤):

推導過程:

公式3(計算權重的梯度):

推導過程:

公式4(計算偏置的梯度):

推導過程:

4. 反向傳播演算法偽代碼

輸入訓練集

對於訓練集中的每個樣本x,設置輸入層(Input layer)對應的激活值:
前向傳播:


計算輸出層產生的錯誤:

反向傳播錯誤:

使用梯度下降(gradient descent),訓練參數:

Ⅱ 如何理解CNN神經網路里的反向傳播backpropagation,bp演算法

見附件,一個基本的用java編寫的BP網路代碼。BP(BackPropagation)神經網路是86年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hiddenlayer)和輸出層(outputlayer)。

Ⅲ 反向傳播演算法是什麼

反向傳播演算法,簡稱BP演算法,適合於多層神經元網路的一種學習演算法。

它建立在梯度下降法的基礎上。BP網路的輸入輸出關系實質上是一種映射關系:一個n輸入m輸出的BP神經網路所完成的功能是從n維歐氏空間向m維歐氏空間中一有限域的連續映射,這一映射具有高度非線性。它的信息處理能力來源於簡單非線性函數的多次復合,因此具有很強的函數復現能力。這是BP演算法得以應用的基礎。

反向傳播演算法動機簡介

反向傳播演算法被設計為減少公共子表達式的數量而不考慮存儲的開銷。反向傳播避免了重復子表達式的指數爆炸。然而,其他演算法可能通過對計算圖進行簡化來避免更多的子表達式,或者也可能通過重新計算而不是存儲這些子表達式來節省內存。

Ⅳ 如何理解CNN神經網路里的反向傳播backpropagation,bp演算法

類比來說類似於
幾個人站成一排
第一個人看一幅畫(輸入數據),描述給第二個人(隱層)……依此類推,到最後一個人(輸出)的時候,畫出來的畫肯定不能看了(誤差較大)。
反向傳播就是,把畫拿給最後一個人看(求取誤差),然後最後一個人就會告訴前面的人下次描述時需要注意哪裡(權值修正)。

Ⅳ 讀懂反向傳播演算法(bp演算法)

反向傳播演算法可以說是神經網路最基礎也是最重要的知識點。基本上所以的優化演算法都是在反向傳播算出梯度之後進行改進的。同時,也因為反向傳播演算法是一個遞歸的形式,一層一層的向後傳播誤差即可,很容易實現(這部分聽不懂沒關系,下面介紹)。不要被反向傳播嚇到,掌握其核心思想就很容易自己手推出來。

我們知道神經網路都是有一個loss函數的。這個函數根據不同的任務有不同的定義方式,但是這個loss函數的目的就是計算出當前神經網路建模出來輸出的數據和理想數據之間的距離。計算出loss之後,根據反向傳播演算法就可以更新網路中的各種參數以此使loss不斷下降,即可使輸出的數據更加理想。
所以,現在的任務是,已知一個網路的loss之後,如何根據loss來更新參數呢?具體點即如何更新網路節點中的權重w和偏差b的值呢?

這粗侍辯里我們採用的是全連接神經網路進行說明。
要想把這個過程說清楚,首先需要將神經網路中各個參數用文字表達清楚。定義的就是w和b在網路中的准確位置。

對於 表示的是神經網路中第 層第k個節點到神經網路中第 層第j個節點之間的權重。注意w的下標是首位表示的是節點後層節點的位置,末尾表談鬧示是前層節點的位置。理解這樣的表達方式在後面的計算中會很好理解。
同理,對於b的表示:

b的表示相比於w要簡單一些,符號 表示第l層網路在第j個節點的偏置。無論w還是b的表示,上標都是表示層數。並且 和 表示都是第l層網路第j個節點的參數。所以該節點的輸出可以表示為:

神經網路輸出之後會經過一個激活函數,這用激活函數用 表示,則經過激活函數輸出為:

至此,根據上面符號 、 、 、 。我們可以對於神經網路裡面每一個數據准確的表示了。

給定一個損失函數之後,用 表示,說白了反向傳播就是求∂C/∂w和∂C/∂b,然後將這個值乘以和對應的w,b進行相減就可以實現一次的參數更新了。為什麼這樣的操作就可以優化網路,減小loss值呢?

來源於導數的概念和速度相關。∂C/∂w和∂C/∂b相當於loss值C相對於w和v變化的速度。如果∂C/∂w是正的,則增大w,C也會增大,如果希望C減小的話,應該減小w;並且∂C/∂w的絕對值越大,表示w對C的值影響越大,w稍微有一點變化,C就會有大幅變化。如果要優化C變小,w應該對應的減少多少呢?也沒有一個確定的答案。這里通過變化的速度和學習率相乘作為一個減小的值。通過多輪迭代。最終是希望c達到最小點。而當函數落入最小值的時候,無論是局部最小還是全局最小,其周圍一定是平滑的。所以此時∂C/∂w和∂C/∂b將會變得很小甚至為0,即參數不在更新了。當函數在局部最小點處參數不在更新出現梯度消失的問題時,目前也有各種trick進行解決。不是這里的重點。

為了好說明,這里定義一個很簡單的損失函數C:

接下來就是有意思的階段了。這里還是利用上一節中∂C/∂w和∂C/∂b的解釋。如果我們想要求出∂C/∂w和∂C/∂b的值,即具體的 、 對C影響速率的值,我們找一個中間變數∂C/∂ 。因為我們知道:

我們定義:

當我們知道了 值之後,我們根據 式子可以很容易求出 。
利用導數的鏈式法則:

很容易推出來不是?同理可以求出:

可以看出通過媒介 很容易求出∂C/∂w和∂C/∂b。那麼我們現在來理解一下 到底是什麼意思,以及如何求出來每一個l層j節點的 值。

根據定義:

可以看出來 就是 對於C的影響大小(聯系之前說的導數和速率的關系)。而 是第 層第 個神經元未進過激活函數之前的輸出。所以我們可以理解 為網路中第 層第 個神經元對loss的影響。所以很直觀的看法就是我們先求出單個神經元對loss值得影響,然後再計算該神經元內部參數對於loss的影響。

ok,如果我們已經理解了為什麼要引入 變數以及如何利用該變數計算具體參數的梯度後,接下來我們就可以看看如何獲得 值。反向傳岩缺播的名字我想也就是通過計算 的方式而來的。是一層一層遞歸而來的。

既然說是遞歸的方式,我們來思考一下 和 之間有什麼關系,如果找到這個關系之後,我們就可以默認我們如果知道最後一層網路節點的 值,我們就可以獲得倒數第二層網路節點的 值,倒數第三層,倒數第四層,……以此推類即可獲得整個網路的每個節點的 值。至此我們的反向傳播也基本完成了。
所以最重要的有兩點:

先看問題1,直接根據求導的鏈式法則就可以找出兩個的關系,具體公式如下,可以多看看手寫一下,思路上也很簡單。

覺得這樣的鏈式公式還是很直觀的,如果不好理解,可以自己畫一個神經網路圖,連上節點與節點之間的線,標上參數,然後推一下應該就能理解了。
這里的 都表示的未經過激活函數的神經元的輸出。 表示激活函數。因為:

所以:

帶入上式就可以得出:

至此就找出了 和 之間的關系了。
(還能簡化,根據最開始我們定義的 )。

理解起來就是網路中前面一層某一個神經元對於loss的影響與該層的後一層所有的神經元對loss的影響、該神經元的輸出大小、該神經元與後一層神經元連接的權重有關系的,並且是一個累加的效應。這樣的理解也是非常直觀合乎常理的。

現在萬事具備,只差問題2了。即假設最後一層網路是L,最後一層 如何計算得出。最後一層的 值就像一個導火索,一旦有了開始,就可以利用我們之前推出來的: 公式進行反向傳播了(反向傳播還是很形象的不是?)。現在解決這個問題。這個問題就是和損失函數具體怎麼定義有關系了。不過我們先不考慮C的具體形式,根據通用的鏈式法則我們可以得到:

這里需要注意的是最後一層激活函數使用的是哪種。最後一層激活函數在計算某一個神經元的輸出時可能會結合其他節點的輸出來計算。比如softmax激活函數,其輸出的是一個概率值【0,1】。輸出大小就是結合輸出所有的值。

現在我們來考慮兩個具體的損失函數,並且採用之前定義的均方誤差損失函數 :

求導為:
因為sigmoid輸出的值僅僅和輸入的x值有關 。所以 當 時值為0.所以:

根據上面,BP推導有三部曲,先求出 ,再根據 分別求出 、 。總結公式如下:

啟動上面反傳的導火索是最後一層的 值,計算公式為:

根據最後一層不同類型的激活函數不同對待。

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

反向傳播演算法(BP演算法)主要是用於最常見的一類神經網路,叫多層前向神經網路,本質可以看作是一個general nonlinear estimator,即輸入x_1 ... x_n 輸出y,視圖找到一個關系 y=f(x_1 ... x_n) (在這里f的實現方式就是神經網路)來近似已知數據。為了得到f中的未知參數的最優估計值,一般會採用最小化誤差的准則,而最通常的做法就是梯度下降,到此為止都沒問題,把大家困住了很多年的就是多層神經網路無法得到顯式表達的梯度下降演算法!

BP演算法實際上是一種近似的最優解決方案,背後的原理仍然是梯度下降,但為了解決上述困難,其方案是將多層轉變為一層接一層的優化:只優化一層的參數是可以得到顯式梯度下降表達式的;而順序呢必須反過來才能保證可工作——由輸出層開始優化前一層的參數,然後優化再前一層……跑一遍下來,那所有的參數都優化過一次了。但是為什麼說是近似最優呢,因為數學上除了很特殊的結構,step-by-step的優化結果並不等於整體優化的結果!不過,好歹現在能工作了,不是嗎?至於怎麼再改進(已經很多改進成果了),或者採用其他演算法(例如智能優化演算法等所謂的全局優化演算法,就算是沒有BP這個近似梯度下降也只是局部最優的優化演算法)那就是新的研究課題了。

閱讀全文

與神經演算法反向傳遞相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163