【446】Deep Learning

ref: 深度學習基礎介紹 機器學習19 神經網絡NN算法python

ref: 深度學習基礎介紹 機器學習11 神經網絡算法應用上算法

ref: 深度學習基礎介紹 機器學習12 神經網絡算法應用下網絡

ref: 神經網絡NN算法(應用篇)機器學習

1. 組成部分:輸入層(input layer),隱藏層(hidden layer),輸出層(output layer)ide

2. 每層由單元(units)組成(圓圈)函數

3. input layer 是由訓練集的實例特徵向量傳入post

4. 通過鏈接結點的權重(weight)傳入下一層,一層的輸出是下一層的輸入學習

5. hidden layer 的個數是任意的,input layer 有一層,output layer 有一層測試

6. 每一個 unit 也能夠被稱做神經結點,根據生物學來源定義優化

7. 以上爲2層的神經網絡(輸入層不算)

8. 一層中加權的求和,而後根據非線性方程轉化輸出

9. 做爲多層向前神經網絡,理論上,若是有足夠多的隱藏層(hidden layers)和足夠大的訓練集,能夠模擬任何方程


 

設計神經網絡結構

1. 使用神經網絡訓練數據以前,必須肯定神經網絡的層數,以及每層單元的個數

2. 特徵向量在被傳入輸入層時一般被先標準化(normalize)到0和1之間(爲了加速學習過程) 

3. 離散型變量能夠被編碼成每個輸入單元對應一個特徵值可能賦的值

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

  • 若是 A=a0,那麼表明 a0 的單元值就取1,其餘取0;
  • 若是 A=a1,那麼表明 a1 的單元值就取1,其餘取0,以此類推

4. 神經網絡既能夠用來作分類(classification)問題,也能夠解決迴歸(regression)問題

  • 對於分類問題,若是是2類,能夠用一個輸出單元表示(0和1分別表明2類)
  • 若是多於2類,每個類別用一個輸出單元表示
  • 因此輸出層的單元數量一般等於類別的數量
  • 沒有明確的規則來設計最好有多少個隱藏層
  • 根據實驗測試和偏差,以及準確度來試驗並改進

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

K-fold cross validation

上圖分紅3分

  • 第一次,後兩個訓練,第一個測試
  • 第二次,兩邊兩個馴良,中間測試
  • 第三次,前兩個訓練,最後一個測試

6. Backpropagation 算法

6.1 經過迭代性的來處理訓練集中的實例

6.2 對比通過神經網絡後輸入層預測值(predicted value)與真實值(target value)之間

6.3 反方向(從 輸出層 => 隱藏層 => 輸入層)來以最小化偏差(error)來更新每一個鏈接的權重(weight)

6.4 算法詳細介紹

  • 輸入:D:數據集,l 學習率(learning rate),一個多層向前神經網絡
  • 輸出:一個訓練好的神經網絡(a trained neural network)
  • 初始化權重(weights)和偏向(bias):隨機初始化在 -1 到 1 之間,或者 -0.5 到 0.5 之間,每一個單元有一個偏向對於每個訓練實例 X,執行如下步驟:

6.4.1 由輸入層向前傳送,計算後面 units 的值

經過下面公式實現:

  \[I_{j}=\sum_{i}\omega_{ij}O_{i}+\Theta_{j}\]

其中: 

$i$ —— 對應前面的單元,$j$ 對應後面的單元

$\omega_{ij}$ —— 爲權重

$O_{i}$ —— 爲前一層的單元值

$\Theta_{j}$ —— 爲偏向 bias

$I_{j}$ —— 爲計算結果

  公式實現以下圖所示:

  

  激活函數

  $$O_{j}=\frac{1}{1+e^{-I_{j}}}$$

Sigmoid 函數,激活函數

其中:

$O_{j}$ —— 爲實際的計算值

6.4.2 根據偏差(error)反向傳送

1) 對於輸出層:(求導實現的)

$$Err_{j}=O_{j}(1-O_{j})(T_{j}-O_{j})$$

其中:

$T_{j}$ —— 爲真實值

2) 對於隱藏層:(求導實現的)

$$Err_{j}=O_{j}(1-O_{j})\sum_{k}Err_k\omega_{jk}$$

其中:

$Err_k$ —— 爲前面一層,至關於後面一層的偏差

$\omega_{jk}$ —— 爲前面一層,至關於後面一層的權重

3) 權重更新:

$$\Delta\omega_{ij}=(l)Err_{j}O_{i}$$

$$\omega_{ij}=\omega_{ij}+\Delta\omega_{ij}$$

其中:

$l$ —— 爲學習率,逐漸減少,比較優化

4) 偏向更新:

$$\Delta\Theta_{j}=(l)Err_{j}$$

$$\Theta_{j}=\Theta_{j}+\Delta\Theta_{j}$$

其中:

$i$ —— 對應前面的單元,$j$ 對應後面的單元

6.4.3 終止條件

  • 權重的更新低於某個閾值
  • 預測的錯誤率低於某個閾值
  • 達到預設必定的循環次數

7. 實例介紹

 

8. 代碼實現 

# Import `Sequential` from `keras.models`
from keras.models import Sequential

# Import `Dense` from `keras.layers`
from keras.layers import Dense

# Initialize the model
model = Sequential()

# Add input layer 
# 輸入層的 units 爲 12
# 隱藏層的 units 爲 64
# 激活函數爲 relu
model.add(Dense(64, input_dim=12, activation='relu'))

# Add output layer 
# 輸出層的 units 爲 1
model.add(Dense(1))

ref: Keras Tutorial: Deep Learning in Python

ref: Getting started with the Keras Sequential model

ref: Keras HelloWorld

對於上面舉例的 NN,能夠經過下面代碼構建結構

model.add(Dense(2, input_dim=3, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

  

model.fit(x_train, y_train, batch_size=100, nb_epoch=20)
  • batch_size:隨機分組(多少組)(mini-batch)
    batch size = 1, Stochastic gradient descent
  • nb_epoch:次數(重複的次數)
相關文章
相關標籤/搜索