1. 程式人生 > >反向傳播算法的理解

反向傳播算法的理解

\n 算法 pre rand class light 2.0 del numpy

反向傳播算法從大體上理解就是通過計算最終誤差與某個權值參數的梯度,來更新權值參數。

梯度就是最終誤差對參數的導數,通過鏈式求導法則求出。

然後通過賦予學習率計算得出,例如:

其中 為學習率。技術分享圖片

Python代碼如下:

import numpy as np

def nonlin(x, deriv = False):
    if(deriv == True):
        return x * (1 - x)
    return 1 / (1 + np.exp(-x))
//計算s函數,以及用於反向傳播的函數 X = np.array([[0.35], [0.9]]) y = np.array([[0.5]]) np.random.seed(1) W0 = np.array([[0.1, 0.8], [0.4, 0.6]]) W1 = np.array([[0.3, 0.9]]) print ‘original ‘, W0, ‘\n‘, W1 for j in xrange(100): l0 = X l1 = nonlin(np.dot(W0, l0)) l2 = nonlin(np.dot(W1, l1)) l2_error = y - l2 Error = 1 / 2.0 * (y-l2)**2 print ‘Error:‘, Error l2_delta = l2_error * nonlin(l2, deriv=True) l1_error = l2_delta * W1 #back propagation,誤差向前傳播 l1_delta = l1_error * nonlin(l1, deriv=True) //類似l2_delta的計算 W1 += l2_delta * l1.T
//采用的是另一種反向傳播算法,與用誤差和參數梯度計算所得結果一樣。通過s函數實現。更新的是輸出層的參數,僅需一次運算 W0 += l0.T.dot(l1_delta) print W0, ‘\n‘, W1

  

反向傳播算法的理解