手把手教你搭建BP神經網路 實踐篇

2021-08-05 21:01:00 字數 1932 閱讀 4615

經過兩個星期的摸索,博主基於數學公式搭建了乙個bp神經網路。目的在於學習基本功。在搭建的過程中,博主發現很多文章對於搭建方面講解的力度不夠或者寫得不太明了。所以特意寫下該文章與大家一起交流。本人才粗淺薄,如有錯誤望高人指點。本文的優點在於搭建了四層神經網路結構,一般的文章只講三層對於多個隱含層的式子未給出,通過本文可以很快的寫出多層隱含層的bp神經網路。(注:還有數學證明還沒post上來,博主打算開一篇專門推導數學公式的,畢竟是數學系的學生。還有**也另外放在一篇部落格中)

1.工具:matlab

2.公式轉換為實戰:

a.前向傳播

假設輸入層i有k個輸入節點;第乙個隱含層hm有m個神經元;第二個隱含層hn有n個神經元;輸出層o有i個輸出層。

輸入層與第一層隱含層的權值矩陣記為wmk;第一層隱含層到第二層隱含層的權值矩陣記為wnm;第二隱含層到輸出層的權值矩陣記為win;偏置值分別為bmk,bnm,bin;

下面以輸入與第一隱含層為例,之後可以方便地推廣到其他不同層

輸入矩陣:

第一隱含層權值:

計算:利用矩陣運算可以得到:

同樣的得到以下公式

b.反向傳播

3.演算法說明:levenberg_marquardt演算法——改進牛頓法

由博主bp神經網路數學公式推導的部落格的內容(準備寫:(),可以知道lm演算法的核心是如何求雅可比矩陣。在很多文章裡面並沒有說明白雅可比矩陣究竟怎麼放置不同的偏導矩陣,下面給出詳細過程。

其中j(w)為雅可比矩陣的分塊矩陣形式

輸出層到第二層隱含層的權值偏導數計算

第二隱含層到第一層隱含層的權值偏導數計算

第一隱含層到輸出層的權值偏導數計算

按照之前的結果我們可以得到

得到全部權值的變化值放置在上述公式的輸出結果中。實踐中我們可以明白這些權值的該變數是按順序排放的,通過整理我們可以得到最後的每一層的權值矩陣。

每迭代一次就使得上一次計算的權值矩陣分別加上權值的改變量。這樣就是權值矩陣不斷修正,逐漸趨向於目標結果。

綜述:流程圖如下,先初始化網路進行資料輸入,結構設計,權值矩陣隨機取數等等。第一步先前向執行計算,算出乙個隨機結果,得到每層的結果。經過判斷後判斷是否更改設計引數,繼續計算。當達到精度要求時輸出並結束。

u是乙個試探引數,當誤差減少就使用減小。當足夠小時就使用牛頓法求解。反過來,如果足夠大時就使用誤差向後傳遞解。

關於u,是乙個我自己實踐上的問題,因為很多**都提到要使得u/beta(beta一般取10)。當u足夠小時,hessian矩陣就會變為不可逆的值,這樣使得計算無法進行。我自己分析的原因是,由於需要對相近數值進行分類,那麼難免會有jacobian矩陣中其中幾列的元素相近,雖然不一定相等可是計算機是有精度的,所以計算的時候很容易導致不可逆的問題出現。所以我沒有使用u/beta,而是使得u=0.01。

手把手教你搭建FastDFS

fastdfs分布式檔案儲存,4 500m檔案都適合,它分為三個部分 第一部分,client,客戶端,即發起訪問者,使用者 第二部分 tracker,追蹤器,可搭建集群,檔案上傳時,tracker會跟蹤檔案資源,記住檔案存在 第三部分 storage,儲存檔案,倉庫,可搭建集群,以分組為單位,每一組...

手把手教你搭建gitlab

sudo yum install y curl policycoreutils pythonopenssh serversudo systemctl start sshdsudo systemctl enable sshdsudo yum install firewalld systemd yser...

手把手教你搭建Hive Web環境

了解hive的都知道hive有三種使用方式 cli命令列,hwi hie web inte ce 瀏覽器 以及 thrift客戶端連線方式。為了體驗下hwi模式,特意查詢了多方的資料,都沒有乙個完整的部署方案,經過一下午的踩坑,這裡特意總結一下,希望為後人節省點時間。先放個圖興奮一下!文件資源 各個...