手寫識別就是這樣被弄粗來的
Guido van Rossum
人生苦短,我用Python!
2018 · 8 · 北京
Multilayer Feed-Forward Neural Network多層向前神經網路(Multilayer Feed-Forward Neural Network)
Backpropagation被使用在多層向前神經網路上
多層向前神經網路由以下部分組成:
輸入層(input layer), 隱藏層 (hidden layers), 輸入層 (output layers)
每層由單元(units)組成
輸入層(input layer)是由訓練集的實例特徵向量傳入
經過連接結點的權重(weight)傳入下一層,一層的輸出是下一層的輸入
隱藏層的個數可以是任意的,輸入層有一層,輸出層有一層
每個單元(unit)也可以被稱作神經結點,根據生物學來源定義
以上成為2層的神經網路(輸入層不算)
一層中加權的求和,然後根據非線性方程轉化輸出
作為多層向前神經網路,理論上,如果有足夠多的隱藏層(hidden layers) 和足夠大的訓練集, 可以模擬出任何方程
設計神經網路結構
使用神經網路訓練數據之前,必須確定神經網路的層數,以及每層單元的個數
特徵向量在被傳入輸入層時通常被先標準化(normalize)到0和1之間 (為了加速學習過程)
離散型變數可以被編碼成每一個輸入單元對應一個特徵值可能賦的值
比如:特徵值A可能取三個值(a0, a1, a2), 可以使用3個輸入單元來代表A。
如果A=a0, 那麼代表a0的單元值就取1, 其他取0;
如果A=a1, 那麼代表a1的單元值就取1,其他取0,以此類推
神經網路即可以用來做分類(classification)問題,也可以解決回歸(regression)問題
對於分類問題,如果是2類,可以用一個輸出單元表示(0和1分別代表2類)
如果多餘2類,每一個類別用一個輸出單元表示,所以輸入層的單元數量通常等於類別的數量
沒有明確的規則來設計最好有多少個隱藏層,根據實驗測試和誤差,以及準確度來實驗並改進
交叉驗證方法(Cross-Validation)
K-fold cross validation
Backpropagation演算法
輸入:D:數據集,l 學習率(learning rate), 一個多層前向神經網路
輸入:一個訓練好的神經網路(a trained neural network)
初始化權重(weights)和偏向(bias): 隨機初始化在-1到1之間,或者-0.5到0.5之間,每個單元有 一個偏向
對於每一個訓練實例X,執行以下步驟:
由輸入層向前傳送
根據誤差(error)反向傳送
對於輸出層:
對於隱藏層:
權重更新:(l表示學習率)
偏向更新
終止條件
權重的更新低於某個閾值
預測的錯誤率低於某個閾值
達到預設一定的循環次數
Backpropagation 演算法舉例
對於輸出層
我還是把我的筆記放置於此,上面詳細列出了計算步驟,歡迎熱愛的同胞批評指正!
碼龍社
一個有趣,有料,專註於技術交流,以技術會友的公眾號,入群公眾號後台恢復jq.
GIF
TAG:碼龍社 |