1. 程式人生 > >人工神經網路——反向傳播演算法(BP)以及Python實現

人工神經網路——反向傳播演算法(BP)以及Python實現

人工神經網路是模擬生物神經系統的。神經元之間是通過軸突、樹突互相連線的,神經元收到刺激時,神經脈衝在神經元之間傳播,同時反覆的脈衝刺激,使得神經元之間的聯絡加強。受此啟發,人工神經網路中神經元之間的聯絡(權值)也是通過反覆的資料資訊"刺激"而得到調整的。而反向傳播(back propagation)演算法就是用來調整權值的。

核心思想

訓練誤差逐層反向傳播,每層神經元與下層神經元間權重通過誤差最速梯度下降的方法調整。

演算法簡介

人工神經網路簡介

通常人工神經網路分為輸入層、隱藏層和輸出層。隱藏層和輸出層都有相應的激勵函式(模擬神經脈衝的激勵方式)。隱藏層可以為多層,但實際上不超過三層為好。如圖:network


常用的激勵函式有sigmoid和linear函式。如果使用神經網路來做分類的工作,那麼輸出層激勵函式通常採用sigmoid, 若做迴歸工作,就採用linear函式。輸入層和輸出層神經元數目由訓練資料集而定,而隱藏層神經元數目的設定帶有很大的經驗性,對經驗公式ninput+noutput+2\sqrt {n_{input}+n_{output}} + 2(ninput,noutputn_{input},n_{output}為輸入層、輸出層神經元數目)向上取整的數值可作為隱藏層神經元數目。

人工神經網路的前向傳播

訓練資料包含的資訊逐層從輸入層傳播到輸出層的方式是以感知機為基礎的。即X

hidden_in=Winput_hiddenXinputXhidden_out=fhidden(Xhidden_in)Xoutput_in=Whidden_outputXhidden_outXoutput_out=foutput(Xoutput_in)X_{hidden\_in} = W_{input\_hidden}X_{input}\\X_{hidden\_out}=f_{hidden}(X_{hidden\_in})\\X_{output\_in} = W_{hidden\_output}X_{hidden\_out}\\X_{output\_out=f_{output}}(X_{output\_in})

誤差反向傳播

與前向傳播正好相反,訓練誤差都是從輸出層開始反向傳播到每個隱藏層。有了每一層的誤差就好辦了,訓練的目的就是減小誤差,即最小化期望風險,通常採用平方誤差損失函式E=12(ypredytrue)2E = \frac{1}{2}(y_{pred}-y_{true})^2,採用最速梯度下降法更新權值。
根據鏈式法則計算每層權值調整梯度:
--------------------------------------------------------------------------------------
舉例如下:
eg
EWinput_hidden=EXoutput_outXoutput_outXoutput_inXoutput_inXhidden_outXhidden_outXhidden_inXhidden_inWinput_hidden\frac{\partial E}{\partial W_{input\_hidden}} = \frac{\partial E}{\partial X_{output\_out}}\frac{\partial X_{output\_out}}{\partial X_{output\_in}}\frac{\partial X_{output\_in}}{\partial X_{hidden\_out}}\frac{\partial X_{hidden\_out}}{\partial X_{hidden\_in}}\frac{\partial X_{hidden\_in}}{\partial W_{input\_hidden}} --------------------------------------------------------------------------------------

輸出層梯度:EXoutput_out=Gout=Xoutput_outytrue\frac{\partial E}{\partial X_{output\_out}}=G_{out} = X_{output\_out}-y_{true}即輸出層的誤差。

隱藏層到輸出層權值梯度:Ghidden_out=Xhidden_outδhidden_outputδhidden_output=Goutfoutput(Xoutput_in)Xoutput_outXoutput_in=foutput(Xoutput_in)G_{hidden\_out}=X_{hidden\_out}\delta_{hidden\_output}\\ \delta_{hidden\_output} = - G_{out} *f_{output}^{'}(X_{output\_in}) \\ 其中,\frac{\partial X_{output\_out}}{\partial X_{output\_in}} = f_{output}^{'}(X_{output\_in})
輸入層到隱藏層權值梯度:Ginput_hidden=Xinputδinput_hiddenδinput_hidden=δhidden_outputWhidden_outputfhidden(Xhidden_in)Xoutput_inXhidden_out=Whidden_output,Xhidden_outXhidden_in=fhidden(Xhidden_in)G_{input\_hidden}=X_{input}\delta_{input\_hidden}\\\delta_{input\_hidden} = \delta_{hidden\_output} W_{hidden\_output}*f_{hidden}^{'}(X_{hidden\_in}) \\ 其中,\frac{\partial X_{output\_in}}{\partial X_{hidden\_out}}=W_{hidden\_output},\frac{\partial X_{hidden\_out}}{\partial X_{hidden\_in}} = f_{hidden}^{'}(X_{hidden\_in})

相關推薦

人工神經網路——反向傳播演算法(BP)以及Python實現

人工神經網路是模擬生物神經系統的。神經元之間是通過軸突、樹突互相連線的,神經元收到刺激時,神經脈衝在神經元之間傳播,同時反覆的脈衝刺激,使得神經元之間的聯絡加強。受此啟發,人工神經網路中神經元之間的聯絡(權值)也是通過反覆的資料資訊"刺激"而得到調整的。而反向傳

BP神經網路反向傳播演算法一步一步例項推導(Backpropagation Example)

1. loss 函式的優化 籠統來講: 設計loss函式是為了衡量網路輸出值和理想值之間的差距,儘管網路的直接輸出並不顯式的包含權重因子,但是輸出是同權重因子直接相關的,因此仍然可以將loss函式視作在權重因子空間中的一個函式。 可以將loss 記為E(w),這裡為

神經網路反向傳播BP演算法原理

一.BP演算法簡介 BP演算法的學習過程由正(前)向傳播過程和反向傳播過程組成。 1.正向傳播 將訓練集資料輸入到ANN的輸入層,經過隱藏層,最後達到輸出層並輸出結果; 2.反向傳播 由於ANN的輸出結果與實際結果有誤差,則計算估計值與

卷積神經網路——反向傳播演算法

卷積神經網路(CNN)的結構可閱讀上一篇博文。CNN的基本層包括卷積層和池化層,二者通常一起使用,一個池化層緊跟一個卷積層之後。這兩層包括三個級聯的函式:卷積,求sigmoid函式(或使用其他激勵函式),池化。其前向傳播和後向傳播的示意圖如下: 

卷積神經網路反向傳播演算法

神經網路的訓練過程,就是通過已有的樣本,求取使代價函式最小化時所對應的引數。代價函式測量的是模型對樣本的預測值與其真實值之間的誤差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他與梯度有關的方法。其中的步驟包括: 初始化引數。求代價函式關

神經網路反向傳播演算法(backpropagation)的pytorch實現,pytorch教程中的程式碼解讀以及其他一些疑問與解答

pytorch的官網上有一段教程,是使用python的numpy工具實現一個簡單的神經網路的bp演算法。下面先貼上自己的程式碼: import numpy as np N,D_in,H,D_out = 4,10,8,5 x = np.random.randn(N,D_i

深度神經網路(DNN)反向傳播演算法(BP)

    在深度神經網路(DNN)模型與前向傳播演算法中,我們對DNN的模型和前向傳播演算法做了總結,這裡我們更進一步,對DNN的反向傳播演算法(Back Propagation,BP)做一個總結。 1. DNN反向傳播演算法要解決的問題     在瞭解DNN的反向傳播演算法前,我們先要知道DNN反向傳播演算法

神經網路反向傳播梯度計算數學原理

[神經網路]反向傳播梯度計算數學原理 1 文章概述 本文通過一段來自於Pytorch官方的warm-up的例子:使用numpy來實現一個簡單的神經網路。使用基本的數學原理,對其計算過程進行理論推導,以揭示這幾句神奇的程式碼後面所包含的原理。 估計對大多數的同學來說,看完這個文章,肯定會是這樣的感覺:字都

反向傳播演算法(BP演算法)

具體實現: https://yongyuan.name/blog/back-propagtion.html 反向傳播演算法(Backpropagation)是目前用來訓練人工神經網路(Artificial Neural Network,ANN)的最常用且最有效的演算法。其主要思想是: (

神經網路反向傳播,通俗理解

LR-----1層神經網路     dL/dz 簡稱dz_,L(a,y)使用交叉熵。       da_ = dL/da =  dz_ = dL/da * da/dz = da_* dw_ = dL/dz *dz/dw = dz

【手撕】神經網路反向傳播

神經網路前向傳播一般用於搭建整個神經網路的結構框架,形成整個網路的邏輯通路。反向傳播用於更新每層之間的權重,減少損失,進而提升預測準確度。 下面是一個神經網路的結構圖: 第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第

深度學習---反向傳播演算法BP

這個BP演算法可以多看幾遍,條理清晰Stanford機器學習---第五講. 神經網路的學習 Neural Networks learning推導過程:重點參考必看:https://blog.csdn.net/fendouaini/article/details/7978944

BP人工神經網路識別手寫數字——《Python也可以》之三

這是我讀工程碩士的時候完成課程作業時做的,放在 dropbox 的角落中生塵已經有若干年頭了,最近 @shugelee 同學突然來了興致搞驗證碼識別,問到我的時候我記起自己做過一點點東西,特發上來給他參考,並趁機補充了一下《Python也可以》系列。影象預處理使用下圖(後方稱

神經網路二之神經網路反向傳播原理與python程式設計實現

技術交流qq群: 659201069 誤差   樣本資料的真實值與神經網路的輸出值之間的差值稱為誤差,當然一般不會直接使用直接的差值,常用的有迴歸演算法的均方差、分類的交叉熵,這方面不影響我們來討論神經網路的反向傳播原理與過程,所以不做過多討論。

神經網路反向傳播時的梯度到底怎麼求?

相信每一個剛剛入門神經網路(現在叫深度學習)的同學都一定在反向傳播的梯度推導那裡被折磨了半天。在各種機器學習的課上明明聽得非常明白,神經網路無非就是正向算一遍Loss,反向算一下每個引數的梯度,然後大家按照梯度更新就好了。問題是梯度到底怎麼求呢?課上往往舉的是標量的例子,

CNN卷積神經網路--反向傳播(2,前向傳播

 卷積層:卷積層的輸入要麼來源於輸入層,要麼來源於取樣層,如上圖紅色部分。卷積層的每一個map都有一個大小相同的卷積核,Toolbox裡面是5*5的卷積核。下面是一個示例,為了簡單起見,卷積核大小為2*2,上一層的特徵map大小為4*4,用這個卷積在圖片上滾一遍,得到一個一個(4-2+1)*(4-2+1)=3

神經網路反向傳導演算法

假設我們有一個固定樣本集 ,它包含  個樣例。我們可以用批量梯度下降法來求解神經網路。具體來講,對於單個樣例 ,其代價函式為: 這是一個(二分之一的)方差代價函式。給定一個包含  個樣例的資料集,我們可以定義整體代價函式為: 以上公式中的第一項  是一個均方差項。第二

基於BP人工神經網路的數字字元識別及MATLAB實現

應用背景:在模式識別中,有一種高實用性的分類方法,就是人工神經網路,它被成功應用於智慧機器人、自動控制、語音識別、預測估計、生物、醫學、經濟等領域,解決了許多其他分類方法難以解決的實際問題。這得益於神經網路的模型比較多,可針對不同的問題使用相應的神經網路模型,這裡使用BP神

神經網路-反向傳播

  最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,後來發現有些地方總是不是很明確,又去看英文版,然後又找了些資料看,才發現,中文版的譯者在翻譯的時候會對省略的公式推導過程進行補充,但是補充的又是錯的,難怪覺得有問題。反向傳播法其實是神經網路的基礎了,但是很多人在學的時候總是會遇

用張量廣播機制實現神經網路反向傳播

### 正向傳播 要想了解反向傳播,先要了解正向傳播:正向傳播的每一步是,用一個或很多輸入生成一個輸出。 ### 反向傳播 反向傳播的作用是計算模型引數的偏導數。再具體一點,反向傳播的每一個step就是:已知正向傳播的輸入本身,和輸出的偏導數,求出每個輸入的偏導數的過程。 反向傳播既簡單,又複雜: * 它