神經網路NN演算法Nerual Networks

許進進發表於2020-09-30

一. 背景:

    人腦中的神經網路是一個非常複雜的組織,成人的大腦中估計有1000億個神經元之多。以人腦中的神經網路為啟發,歷史上出現過很多不同版本的演算法,最著名的演算法是1980年Rumelhar和Hinton等人提出的反向傳播( Backpropagation ,BP)演算法。
            在這裡插入圖片描述


二. 多層向前神經網路(Multilayer Feed-Forward Neural Network)

            在這裡插入圖片描述

  • 多層向前神經網路由三部分組成:輸入層(input layer), 隱藏層 (hidden layers), 輸入層 (output layers);
  • 以上成為2層的神經網路(不算輸入層);
  • Backpropagation被使用在多層向前神經網路上;
  • 每層由單元(units)組成,每個單元(unit)也可以被稱作神經結點,根據生物學來源定義;
  • 輸入層(input layer)是由訓練集的例項特徵向量傳入;
  • 經過連線結點的權重(weight)傳入下一層,一層的輸出是下一層的輸入;
  • 隱藏層的個數可以是任意的,輸入層有一層,輸出層有一層;
  • 一層中加權的求和,然後根據非線性方程轉化輸出;
  • 事實上,神經網路的本質就是通過引數與啟用函式來擬合特徵與目標之間的真實函式關係。作為多層向前神經網路,與單層神經網路不同,理論證明,兩層神經網路可以無限逼近任意連續函式。
  • 設計神經網路時,輸入層的節點數需要與特徵的維度匹配,輸出層的節點數要與目標的維度匹配。而中間層(隱藏層)的節點數,卻是由設計者指定的。因此,“自由”把握在設計者的手中。但是,節點數設定的多少,卻會影響到整個模型的效果。如何決定這個自由層的節點數呢?目前業界沒有完善的理論來指導這個決策。一般是根據經驗來設定。較好的方法就是預先設定幾個可選值,通過切換這幾個值來看整個模型的預測效果,選擇效果最好的值作為最終選擇。這種方法又叫做Grid Search(網格搜尋)。

三. 設計神經網路結構

3.1 使用神經網路訓練資料之前,必須確定神經網路的層數,以及每層單元的個數

3.2 特徵向量在被傳入輸入層時通常被先標準化(normalize)到0和1之間 (為了加速學習過程)

3.3 離散型變數可以被編碼成每一個輸入單元對應一個特徵值可能賦的值

    比如:特徵值A可能取三個值(a0, a1, a2), 可以使用3個輸入單元來代表A。

    如果A=a0, 那麼代表a0的單元值就取1, 其他取0;

    如果A=a1, 那麼代表a1的單元值就取1,其他取0,以此類推

3.4 神經網路即可以用來做分類(classification)問題,也可以解決迴歸(regression)問題

    3.4.1 對於分類問題,如果是2類,可以用一個輸出單元表示(0和1分別代表2類);

        如果多餘2類,每一個類別用一個輸出單元表示;

        所以輸出層的單元數量通常等於類別的數量

    3.4.2 沒有明確的規則來設計最好有多少個隱藏層,我們需要根據實驗測試和誤差,以及準確度來實驗並改進。


4. 交叉驗證方法(Cross-Validation)

    k折,K-fold cross validation:k折交叉驗證是最基本的cv方法,它將訓練集隨機等分為k份,取其中一份為驗證集評估模型,其餘k-1份為訓練集訓練模型。重複該步驟k次,每次都取一份不同的子集為驗證集,最終得到k個不同的模型(不是對一個模型迭代k次)和k個評分,綜合這k個模型的表現(如平均得分)評估模型在當前問題中的優劣。
            在這裡插入圖片描述
    留一法,Leave one out(LOO)是一種特殊的K折交叉驗證:留一法每次在訓練集的N個樣本中選一個不同的樣本作為驗證集,其餘樣本為訓練集,訓練得到N-1個不同的模型。LOOCV是特殊的K-fold,當K=N時,二者相同。


5. Backpropagation演算法

5.1 原理簡述

    BP演算法迭代性地處理訓練集中的例項,每次迭代過程中,對比經過神經網路後輸入層預測值(predicted value)與真實值(target value)之間的誤差,反方向更新(從輸出層=>隱藏層=>輸入層)更新每個連線的權重(weight)來以最小化誤差(error)。

5.2 演算法詳細介紹:

    輸入:D:資料集,l :學習率(learning rate), 一個多層前向神經網路

    輸出:一個訓練好的神經網路(a trained neural network)

5.2.1 初始化權重(weights)和偏向(bias):

    隨機初始化在-1到1之間,或者-0.5到0.5之間,每個單元有一個偏向

5.2.2 對於每一個訓練例項X,執行以下步驟:
5.2.2.1: 由輸入層向前傳送

        在這裡插入圖片描述
I j = ∑ i w i j o i + θ j I_{j}=\sum^{}_{i} w_{ij}o_{i}+\theta_{j} Ij=iwijoi+θj
        在這裡插入圖片描述
o j = 1 1 + e − I j o_{j}=\frac{1}{1+e^{-I_{j}}} oj=1+eIj1

5.2.2.2: 根據誤差(error)反向傳送

對於輸出層:
E r r j = o j ( 1 − o j ) ( T j − o j ) Err_{j}=o_{j}\left( 1-o_{j}\right) \left( T_{j}-o_{j}\right) Errj=oj(1oj)(Tjoj)

對於隱藏層:
E r r j = o j ( 1 − o j ) ∑ k E r r k w j k Err_{j}=o_{j}\left( 1-o_{j}\right) \sum^{}_{k} Err_{k}w_{jk} Errj=oj(1oj)kErrkwjk Δ w i j = ( l ) E r r j o i \Delta w_{ij}=\left( l\right) Err_{j}o_{i} Δwij=(l)Errjoi

權重更新: w i j = w i j + Δ w i j w_{ij}=w_{ij}+\Delta w_{ij} wij=wij+Δwij

偏向更新: Δ θ = ( l ) E r r j \Delta \theta =\left( l\right) Err_{j} Δθ=(l)Errj θ j = θ j + Δ θ j \theta_{j} =\theta_{j} +\Delta \theta_{j_{}} θj=θj+Δθj

5.2.3 終止條件
  • 權重的更新低於某個閾值

  • 預測的錯誤率低於某個閾值

  • 達到預設一定的迴圈次數


6. Backpropagation 演算法舉例

在這裡插入圖片描述
對於輸出層:
E r r j = o j ( 1 − o j ) ( T j − o j ) Err_{j}=o_{j}\left( 1-o_{j}\right) \left( T_{j}-o_{j}\right) Errj=oj(1oj)(Tjoj)

對於隱藏層:
E r r j = o j ( 1 − o j ) ∑ k E r r k w j k Err_{j}=o_{j}\left( 1-o_{j}\right) \sum^{}_{k} Err_{k}w_{jk} Errj=oj(1oj)kErrkwjk Δ w i j = ( l ) E r r j o i \Delta w_{ij}=\left( l\right) Err_{j}o_{i} Δwij=(l)Errjoi

權重更新: w i j = w i j + Δ w i j w_{ij}=w_{ij}+\Delta w_{ij} wij=wij+Δwij

偏向更新: Δ θ = ( l ) E r r j \Delta \theta =\left( l\right) Err_{j} Δθ=(l)Errj θ j = θ j + Δ θ j \theta_{j} =\theta_{j} +\Delta \theta_{j_{}} θj=θj+Δθj
在這裡插入圖片描述


參考文章:

cross validation - 機器學習中的交叉驗證法探究
神經網路淺講:從神經元到深度學習

相關文章