numpy實現神經網路-反向傳播
參考連結:
https://www.jianshu.com/p/964345dddb70
https://www.cnblogs.com/jsfantasy/p/12177216.html
花了一天學習反向傳播,記錄一下,以便後面回顧。
- 反向傳播概念:前向傳遞輸入訊號直至輸出產生誤差,反向傳播誤差資訊更新權重矩陣。類似於反饋系統,通過輸出來影響網路各個層的權值和偏置。
- 數學約定:
按照圖示數學符號網路的對網路進行描述,以便進行公示推到。下圖展示了從輸出層反向傳播推匯出第一層的權值,偏置也是類似的,啟用函式採用sigmoid函式,函式的定義與求導如圖。
單個神經元推到後,我們要進行總結,以便程式設計使用。下圖為總結的公式
BP1:
面向輸出層,C為損失函式,前面部分代表損失函式對輸出層輸出值的求導,後面部分代表輸出層輸入啟用函式的求導,兩者在進行對應元素相乘
BP2:
面向隱藏層,前面部分代表後一層的權值於後一層的後一層的誤差的矩陣乘法,後面部分代表該層輸入啟用函式的求導,兩者在進行對應元素相乘
BP3:
表示第L層偏置的導數等於第L層的誤差
BP4:
表示第L層權值的導數等於前一層輸出值與第L層的矩陣乘法
注意區分矩陣乘法與對應元素相乘的區別
仔細觀察,你會發現BP1與BP2相結合就能發揮出最大功效,可以計算出任意層的誤差,只要首先利用BP1公式計算出輸出層誤差,然後利用BP2層層傳遞,就無敵了,這也正是誤差反向傳播演算法的緣由吧。同時對於權重w以及偏置b我們就可以通過BP3和BP4公式來計算了。
梯度下降公式:
關鍵程式碼賞析(反向傳播部分):
def backpropagation(self, X, y, learning_rate):
# 反向傳播演算法實現
output = self.feed_forward(X)# 向前計算,得到最終輸出值
for i in reversed(range(len(self._layers))): # 反向迴圈
layer = self._layers[i]
if layer == self._layers[-1]: # 如果是輸出層
layer.error = y - output # 這裡直接用真實值減去預測值,沒有求導
#對應公式BP1
layer.delta = layer.error * layer.apply_activation_derivative(output)
else: # 如果是隱藏層
next_layer = self._layers[i + 1]
layer.error = np.dot(next_layer.weights, next_layer.delta)
#對應公式BP2
layer.delta = layer.error * layer.apply_activation_derivative(layer.activation_output)
# 迴圈更新權值
for i in range(len(self._layers)):
layer = self._layers[i]
# o_i 為上一網路層的輸出
o_i = np.atleast_2d(X if i == 0 else self._layers[i - 1].activation_output)
# 梯度下降公式+BP4公式,delta 是公式中的負數,故這裡用加號
layer.weights += layer.delta * o_i.T * learning_rate
相關文章
- 用張量廣播機制實現神經網路反向傳播神經網路反向傳播
- NLP教程(3) | 神經網路與反向傳播神經網路反向傳播
- NLP教程(3) - 神經網路與反向傳播神經網路反向傳播
- 神經網路:numpy實現神經網路框架神經網路框架
- 【DL筆記4】神經網路詳解,正向傳播和反向傳播筆記神經網路反向傳播
- 詳解神經網路中反向傳播和梯度下降神經網路反向傳播梯度
- 卷積神經網路(CNN)反向傳播演算法卷積神經網路CNN反向傳播演算法
- 深度神經網路(DNN)反向傳播演算法(BP)神經網路DNN反向傳播演算法
- 神經網路入門篇之深層神經網路:詳解前向傳播和反向傳播(Forward and backward propagation)神經網路反向傳播Forward
- Tensorflow實現神經網路的前向傳播神經網路
- 關於 RNN 迴圈神經網路的反向傳播求導RNN神經網路反向傳播求導
- 深度學習與CV教程(4) | 神經網路與反向傳播深度學習神經網路反向傳播
- 神經網路之反向傳播訓練(8行程式碼)神經網路反向傳播行程
- 純Python和PyTorch對比實現迴圈神經網路RNNCell及反向傳播PythonPyTorch神經網路RNN反向傳播
- 使用NumPy演示實現神經網路過程神經網路
- 一文弄懂神經網路中的反向傳播法——BackPropagation神經網路反向傳播
- 迴圈神經網路(RNN)模型與前向反向傳播演算法神經網路RNN模型反向傳播演算法
- 【python實現卷積神經網路】卷積層Conv2D反向傳播過程Python卷積神經網路反向傳播
- 卷積神經網路(CNN)反向傳播演算法公式詳細推導卷積神經網路CNN反向傳播演算法公式
- TensorFlow筆記-05-反向傳播,搭建神經網路的八股筆記反向傳播神經網路
- 《神經網路和深度學習》系列文章十五:反向傳播演算法神經網路深度學習反向傳播演算法
- 依賴反向傳播改進神經網路資料處理的精確度反向傳播神經網路
- 吳恩達機器學習筆記 —— 10 神經網路引數的反向傳播演算法吳恩達機器學習筆記神經網路反向傳播演算法
- TensorFlow筆記-04-神經網路的實現過程,前向傳播筆記神經網路
- 神經網路模型與誤差逆傳播演算法神經網路模型演算法
- 卷積神經網路(CNN)前向傳播演算法卷積神經網路CNN演算法
- 語音學習筆記13------談談史丹佛大學卷積神經網路之反向傳播筆記卷積神經網路反向傳播
- 正向傳播和反向傳播反向傳播
- 深度學習基礎-基於Numpy的卷積神經網路(CNN)實現深度學習卷積神經網路CNN
- Tensor:Pytorch神經網路界的NumpyPyTorch神經網路
- 深度神經網路(DNN)模型與前向傳播演算法神經網路DNN模型演算法
- 《神經網路的梯度推導與程式碼驗證》之LSTM的前向傳播和反向梯度推導神經網路梯度
- 《神經網路的梯度推導與程式碼驗證》之CNN的前向傳播和反向梯度推導神經網路梯度CNN
- 神經網路前向和後向傳播推導(一):概覽神經網路
- 基於numpy的前饋神經網路(feedforwardneuralnetwork)神經網路Forward
- 《神經網路的梯度推導與程式碼驗證》之LSTM前向和反向傳播的程式碼驗證神經網路梯度反向傳播
- 《神經網路的梯度推導與程式碼驗證》之FNN(DNN)的前向傳播和反向梯度推導神經網路梯度DNN
- 用筆一步步演示人工神經網路的反向傳播演算法——Jinkey 翻譯神經網路反向傳播演算法