6.1神經網路演算法(Neural Networks)(上)
1.背景:
1.1 以人腦中的的神經網路為啟發,歷史上出現過很多不同版本
1.2 最著名的演算法是1980年的backpropagation
2.多層向前神經網路(Multilayer Feed-Forard Neural Network)
2.1 Backpropagation被使用在多層向前神經網路上
2.2 多層向前神經網路由一下部分組成:
輸入層(input layer),隱藏層(hidden layer),輸出層(output layers)
2.3 每層由單元(units)組成
2.4 輸入層(input layer)是由訓練集的例項特徵向量傳入
2.5 經過連線點的權重(weight)傳入下一層,一層的輸出是下一層的輸入
2.6 隱藏層的個數可以是任意的,輸入層有一層,輸出層有一層
2.7 每個單元(unit)也可以被稱為神經結點,這是根據生物學來源定義的
2.8 以上稱為2層的神經網路(輸入層不算)
2.9 一層中加權的求和,然後根據非線性方程轉化輸出
2.10作為多層向前神經網路,理論上,如果有足夠多的隱藏層(hidden layers)和足夠的大訓練集,可以模擬出任何方程
3.設計神經網路結構
3.1 使用神經網路訓練資料之前,必須確定神經網路的層數,以及每層單元的個數
3.2 特徵向量在被傳入輸入層時通常被先標準化(normalize)到0和1之間(為了加速學習過程)
3.3 離散型變數可以被編碼成每一個輸入單元對應一個特徵值可能賦的值
比如:特徵值A可能取三個值(a0,a1,a2),可以使用三個輸入單元來代表A:
如果A=a0,那麼代表a0的單元值就取1,其他取0;
如果A=a1,那麼代表a1的單元值就取1,其他取0;以此類推
3.4 神經網路既可以用來做分類(classification)問題,也可以解決迴歸(regretion)問題
3.4.1 對於分類問題,如果是2類,可以用一個輸出單元來表示(0和1分別代表1類)
如果多於2類,每一個類別用一個輸出單元來表示
所以,輸出層的單元數量通常等於類別的數量
3.4.2 沒有明確的規則來設計最好有多少個隱藏層
3.4.2.1 根據實驗測試和誤差,以及準確度來實驗並改進
4. 交叉驗證方法(Cross-Validation)
K-fold cross validation
5.Backpropagation演算法
5.1 通過迭代性來處理訓練集中的例項
5.2 對比經過神經網路後輸出層預測值(predicted value)與真實值(target value)
5.3 反方向(從輸出層 =》隱藏層 =》輸入層)以最小化誤差(error)來更新每個連線的權重(weight)和偏向
5.4 演算法詳細介紹
輸入:D:資料集;學習率(learning rate); 一個多層向前神經網路
輸出:一個訓練好的神經網路(a trained neural network)
5.4.1 初始化權重(weights)和偏向(bias):隨機初始化在-1到1之間,或者-0.5到0.5之間,每個單元有一個偏向
5.4.2 對於每一個訓練例項X,執行以下步驟:
5.4.2.1:由輸入層向前傳送:
5.4.2.2 根據誤差(error)反向傳送:
對於輸出層:
對於隱藏層:
權重更新:
偏向更新:
5.4.3 終止條件
5.4.3.1 權重的更新低於某個閾值
5.4.3.2 預測的錯誤率低於某個閾值
5.4.3.3 達到預設的迴圈次數
6. Backpropagation 演算法舉例
對於輸出層:
對於隱藏層:
權重更新:
偏向更新:
注:神經網路演算法在九十年代達到了一個瓶頸,表現並不是很好,但這二十幾年裡隨著網際網路和計算能力的提升,在2012年,由著名學者Hinten的一片paper,就是用神經網路演算法來做物體識別,一下突破了所有演算法,所以最近幾年很多學者都將DL作為重點研究方向。