Back Propagation利用loss乘上sigmoid在輸出資料上斜率的數學意義是什麼?
專家你好, 可以煩請解釋在Back_Propagation_Advanced.ipynb中 以下這兩行code嗎?
(1) l1_delta = l1_error * nonlin(l1,True)
想請教利用loss乘上sigmoid在輸出資料上斜率的數學意義是什麼?
我的理解是, 當輸出結果更靠近0或是1時, 等於當下預測是有一個prefer的答案的
nonlin(l1,True)的輸出會較小, 乘上l1_error後不會顯著化這個l1_error
但當輸出結果是在0-1中間附近時, 斜率較大, 代表預測基本上等於是random亂猜
所以特意去顯著化這個l1_error
(2) syn0 += np.dot(l0.T,l1_delta)
想請教為何是利用 input 的資料乘上l1_delta去更新weighting
若按照gradient desent 的公式 w = w - lr * dw
代表np.dot(l0.T, l1_delta) 是 負方向梯度的意思嗎?
謝謝!
回答列表
-
2019/07/13 下午 05:38Jeffrey贊同數:0不贊同數:0留言數:1
(1) l1_delta = l1_error * nonlin(l1,True)
對於每一輸入,可知 l1 都有對應的一個“猜測”結果。那麼通過將真實的結果(y)與猜測結果(l1)作減,就可以對比得到網路預測的效果怎麼樣。 l1_error 是一個有正數和負數組成的向量,它可以反映出網路的誤差有多大
(2)syn0 +=np.dot(l0.T,l1_delta)
•#該神經網路權重矩陣的初始化操作。
•#用 “syn0” 來代指 (即“輸入層-第一層隱層”間權重矩陣)
•首先讓網路基於給定輸入“試著”去預測輸出。
•以至於作出一些調整,使得在每次反覆運算過程中網路能夠表現地更好一點。
•(4 x 3) dot (3 x 1) = (4 x 1)
•本行代碼包含兩個步驟。首先,將 l0 與 syn0 進行矩陣相乘。
•然後,將計算結果傳遞給 sigmoid 函數。具體考慮到各個矩陣的維度:
•(4 x 3) dot (3 x 1) = (4 x 1)
-
2019/07/21 下午 00:09Jeffrey贊同數:0不贊同數:0留言數:0
Hi, 同ˊ學,您好,
問題(一), 說明如下:
1. l0也就是輸入層
2. l0 = X
3. l1 = nonlin(np.dot(l0,syn0)) 所以, 真實的結果(y)與猜測結果(l1)作減的損失 l1_error = y - l1 l1_delta 在l1中的sigmoid的斜率: 微分導數就是函數乘以 l1_error
問題(二)為什麼是這樣更新weight ? 跟Gradient Descent更新參數做法似乎不同?
回答: 這是針對神經網路隱藏層的激活函數輸出的點, 權重更新的變化, 說明, 反向傳回來的誤差;
導入偏置項b,加上學習率 α跟optimizer就是Gradient Descent;
-
2019/08/06 下午 03:24陳明佑 (Ming You Chen)贊同數:0不贊同數:0留言數:0
如同專家 Jeffery 的回答, 這邊做點小補充 :
這邊的計算方式, 是 gradient desent 公式中 dw 的部分
只是對每個不同的權重 wi, 微分細算後有不同的長度
其中同一層連鎖率所產生的微分項, 會有類似/重複的地方
這些地方我們就以一個向量 l1_delta 取代
建議同學畫一個只有兩層隱藏層, 每層兩個神經元的模型
對其中每個權重偏微分細算一次, 應該就能徹底了解了
如果懶得自己算, 可以參考 這個連結 ,計算如下圖
但誠心建議 : 如果要徹底搞懂還是自己算過一次, 會比只看圖好很多