1. 程式人生 > >神經網路的反向傳播公式的推導

神經網路的反向傳播公式的推導

神經網路的反向傳播公式的推導

前言:

早該開始入坑CNN,RNN的博主總覺得要先能用python加numpy手擼一個神經網路,才能更好理解其他神經網路的原理(強迫症)。於是…這一拖就是快兩月(懶),最近填坑的時候才發現以為自己很通透的反向傳播過程,寫起程式碼推起來就…。
光看西瓜書覺得反向傳播就是損失函式反向對每一層引數求偏導的過程。但西瓜書推導僅在三層網路上,各層引數符號定義也不統一(博主太笨)。於是又結合吳恩達《machine learning》課程才算推匯出能夠寫成程式碼迭代形式的公式。同時發現吳恩達老師視訊有關鍵步驟是簡略帶過,讓基礎較差初學者推導起來也很生硬。於是,博主在他網路課基礎上再推導一遍記成筆記。水平有限,有疏漏錯誤歡迎指正。

正文

神經網路的前向傳播和符號

在《machine learning》裡神經網路的前向傳播部分的公式被定義如下:
輸入層是x,中間有兩層隱藏層,輸出層是$ a^{(4)} $。
a ( 1 )

= x z ( 2 ) =
Θ ( 1 ) a ( 1 ) a ( 2 ) = g ( z ( 2 ) ) z ( 3 ) = Θ ( 2 ) a ( 2 ) a ( 3 ) = g ( z ( 3 ) ) z ( 4 ) = Θ ( 3 ) a ( 3 ) a ( 4 ) = h Θ ( x ) = g ( z ( 4 ) ) a^{(1)} = x \newline z^{(2)} = \Theta^{(1)}a^{(1)} \newline a^{(2)} = g(z^{(2)}) \newline z^{(3)} = \Theta^{(2)}a^{(2)} \newline a^{(3)} = g(z^{(3)}) \newline z^{(4)} = \Theta^{(3)}a^{(3)} \newline a^{(4)} = h_\Theta(x) = g(z^{(4)})
在這個神經網路裡面的g(x)是每個神經元的啟用函式,採用sigmoid模型:
g ( x ) = 1 1 + e ( x ) g(x) = \frac{1}{1+e^{(-x)}}
而sigmoid函式有一個在推導過程使用到性質,對它求導有:
g ( x ) = g ( x ) ( 1 g ( x ) ) g'(x) = g(x)*(1-g(x))

吳老師講解神經網路給的損失函式模型是交叉熵:
J ( Θ ) = 1 m i = 1 m k = 1 K [ y k ( i ) log ( ( h Θ ( x ( i ) ) ) k ) + ( 1 y k ( i ) ) log ( 1 ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m l = 1 L 1 i = 1 s l j = 1 s l + 1 ( Θ j , i ( l ) ) 2 J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2
化成矩陣的同時方便下面推導形式有:
J ( Θ ) = 1 m ( y l o g ( a ( 4 ) ) ) + ( 1 y ) l o g ( 1 a ( 4 ) ) ) J(\Theta) = - \frac{1}{m}\sum(y * log(a^{(4)})) + (1-y)*log(1-a^{(4)}))

而在周志華老師西瓜書的推導裡,給出神經網路的損失函式是均方誤差模型:
E k = 1 2 ( h Θ ( x ) y ) 2 Ek=\frac{1}{2}\sum(h_\Theta(x)- y)^2
這裡y是標記的正確輸出結果。

但其無論該神經網路損失函式是什麼,他們反向傳播的原理都是一致的。(埋伏筆,下面有解釋)

我們先和吳恩達視訊裡一樣先定義$ \delta^{(i)} $來表示神經網路裡第i層的誤差。(先不要糾結為什麼這麼定義,繼續看下去)。

同時在吳恩達視訊裡最難理解一步就是誤差 δ ( 4 ) \delta^{(4)} 只給出較為抽象的解釋。
實際上他這裡定義的誤差 δ ( i ) \delta^{(i)} 公式

δ ( i ) = J z ( i ) \delta^{(i)} = \frac{\partial J}{\partial z^{(i)}}

相關推薦

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

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

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

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

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

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,第

超詳細的長短時記憶LSTM和門控迴圈單元GRU的反向傳播公式推導

門控迴圈單元GRU 長短時記憶LSTM LSTM模型是用來解決simpleRNN對於長時期依賴問題(LongTerm Dependency),即通過之前提到的但是時間上較為久遠的內容進行後續的推理和判斷。LSTM的基本思

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

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

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

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

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

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

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

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

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

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

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

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

神經網路-反向傳播

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

感知器和神經網路訓練(公式推導及C++實現)

感知器 感知器是一個二元線性分類器,其目標是找到一個超平面將訓練樣本進行分隔(分類),其表示為 一般使用的啟用函式不是階躍函式,常用的有sigmoid函式(其導數: σ′=σ(1−σ)) 在1個樣本的訓練集上代價函式(最小均方誤差)通常為 C=1

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

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

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

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

神經網路反向傳播公式推導

神經網路的反向傳播公式的推導 前言: 早該開始入坑CNN,RNN的博主總覺得要先能用python加numpy手擼一個神經網路,才能更好理解其他神經網路的原理(強迫症)。於是…這一拖就是快兩月(懶),最近填坑的時候才發現以為自己很通透的反向傳播過程,寫起程式碼推起來就…。 光看西瓜

深層神經網路和卷積神經網路反向傳播過程推導

反向傳播過程是深度學習的核心所在,雖然現在很多深度學習架構如Tensorflow等,已經自帶反向傳播過程的功能。我們只需要完成網路結構的正向傳播的搭建,反向傳播過程以及引數更新都是由架構本身來完成的。但為了更好的瞭解深度學習的機理,理解反向傳播過程的原理還是很重要的。 在學

神經網路反向傳播演算法推導

注:由於自己畫圖實在太難畫,本文中基本所有插圖來源於演算法糰子機器學習班,請勿轉載 1.普通的機器學習模型: 其實,基本上所有的基本機器學習模型都可以概括為以下的特徵:根據某個函式,將輸入計算並輸出。圖形化表示為下圖: 當我們的g(h)為sigmoid函式時候,它就是一個

卷積神經網路反向BP演算法公式推導

博文轉載至:http://blog.csdn.net/celerychen2009/article/details/8964753 此篇博文只涉及到公式推導,如果想了解卷積神經網路的具體工作過程,可檢視轉載博文博主其它文件或者百度自己去看。轉載的文章涉及到的角下標大家注意下

神經網絡正向傳播反向傳播公式

src 反向傳播 http 技術分享 img inf 分享圖片 公式 info 神經網絡正向傳播與反向傳播公式