bp算法的一個簡單例子


《視覺機器學習20講》中簡單講解了一下bp算法的基本原理,公式推導看完后不是特別能理解,在網上找到一個不錯的例子:BP算法淺談(Error Back-propagation),對bp算法的理解非常有幫助。於是為了加強記憶,將文中的示例代碼用Python重新寫了一遍。

 

使用梯度下降算法不斷迭代更新參數w,使得損失函數(例子中選取平方和誤差)最小。參數更新值Δw用鏈式求導法則求出。

 1 # -*- coding: utf-8 -*-
 2 import numpy as np
 3 def sigmoid(x):#激活函數
 4    return 1/(1+np.exp(-x))
 5 input = np.array([[0.35], [0.9]]) #輸入數據
 6 w1 = np.array([[0.1, 0.8], [0.4, 0.6]])#第一層權重參數
 7 w2 = np.array([0.3, 0.9])#第二層權重參數
 8 
 9 real = np.array([[0.5]])#真實值
10 for s in range(0,100,1):
11     pq = sigmoid(np.dot(w1,input))#第一層輸出
12     output = sigmoid(np.dot(w2,pq))#第二層輸出,也即是最終輸出
13     e = output-real #誤差
14     if np.square(e)/2<0.01:
15         break
16     else:
17         #否則,按照梯度下降計算權重參數
18         #其中,應用鏈式法則計算權重參數的更新量
19        w2 = w2 - e*output*(1-output)*pq.T
20        w1 = w1 - e*output*(1-output)*w2*pq.T*(1-pq.T)*input
21 print w1,'\n',w2 #輸出最終結果
22 print output

最終結果:

w1: [[ 0.09606536  0.78371966]
 [ 0.38988235  0.55813627]] 

w2: [[ 0.12472196  0.72965595]]

output: [[ 0.63690405]]

 ###

為什么沿着梯度的反方向函數f(x,y)在點P0(x0,y0)處下降得最快?

 ###

梯度下降是求解機器學習算法模型參數的一種常用方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM