我感覺,神經網路中的反向傳播演算法(bp)在整個神經網路的學習過程中是很重要的內容,是基礎中基礎。學過一段時間後,再回過頭來重新總結,希望自己能有意外的收穫。
反向傳播是通過遞迴應用鏈式規則來計算表示式的梯度的一種方式,它可以非常容易地泛化到任意乙個有向圖的計算上去。其實也就是因為在計算梯度時,由於每個隱層節點與輸出層多個節點之間均有關聯,所以會對其上一層所有的error作累加處理。反向傳播的另乙個優勢是計算同層節點的梯度和權重更新時可以並行進行,因為它們之間不存在關聯關係。
但是根據梯度函式,反向傳播會存在全域性最小和區域性極小的問題。在大多數情況下bp神經網路給出的只是乙個區域性的最優解,而不是全域性的最優解。詳細內容可以檢視《機器學習》(周志華)p106頁。
如何計算複雜函式的梯度,計算圖提供了乙個比較直觀的展示方法,下面是乙個比較簡單的反向傳播計算圖的例子。
假設:f(x,y,z) = (x + y) z ,[初值x=-2,y=5,z=-4,以綠色字型表示],設q = x + y,則 f = q*z,那麼f對於其他各個變數的梯度計算方法如下。
# set some inputs
x =-
2; y =
5; z =-4
# perform the forward pass
q = x + y # q becomes 3
f = q * z # f becomes -12
# perform the backward pass (backpropagation) in reverse order:
# first backprop through f = q * z
**** = q # df/dz = q, so gradient on z becomes 3
dfdq = z # df/dq = z, so gradient on q becomes -4
# now backprop through q = x + y
dfdx =
1.0* dfdq # dq/dx = 1. and the multiplication here is the chain rule!
dfdy =
1.0* dfdq # dq/dy = 1
用計算圖(也可以說是電路圖)表示如下。前向傳播(綠色)完成以後,執行反向傳播,各個點的梯度值勇紅色表示,梯度可以被認為是通過電路的回流。
在反向傳播中,當我們到達每乙個節點時,這個節點都會得到乙個從上游返回的梯度,這個梯度是對這個節點的輸出的求導,也就是上游梯度值*本地梯度值。來得到該節點的輸入梯度值。例如對於節點x的梯度為:
$$\frac = \frac \frac$$
另乙個計算圖的例子如下:
我們使用計算圖時,我們可以以我們想要的任意間隔尺寸來定義/計算節點。還有,神經網路中有最常用的三個門(add,mul,max),在反向傳播過程中它們的行為方式都有非常簡單的解釋。
$$\frac =\sum \frac \frac$$
當將輸入值轉化成向量時,計算反向傳播推導公式如下:
機器學習,深度學習,神經網路,深度神經網路
先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...
神經網路和深度學習(二)淺層神經網路
1 計算神經網路的輸出 正向傳播 矩陣表示 向量化 2 多個樣本的向量化 正向傳播 3 啟用函式 1 sigmoid函式僅用於二分分類的情況,較少使用 2 tanh函式絕大多數情況下優於sigmoid函式 3 relu函式是預設的常用啟用函式 4 leaking relu 帶洩露的relu函式 4 ...
深度學習 深度神經網路
神經網路是由乙個個神經元相互連線並按層次排列構成的,深度神經網路是有任意層的神經網路,這裡的深度是指層次的多,而不是神經元數量的多。有任意層,那麼就要有乙個迴圈來負責遍歷每一層進行計算。所以深度神經網路的計算形式,就必須要適應這個迴圈結構。我們先來說說神經元吧 對於多神經元神經網路,其實也是一樣的。...