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
4. 神經網絡既能夠用來作分類(classification)問題,也能夠解決迴歸(regression)問題
5. 交叉驗證方法(Cross-Validation)
K-fold cross validation
上圖分紅3分
6. Backpropagation 算法
6.1 經過迭代性的來處理訓練集中的實例
6.2 對比通過神經網絡後輸入層預測值(predicted value)與真實值(target value)之間
6.3 反方向(從 輸出層 => 隱藏層 => 輸入層)來以最小化偏差(error)來更新每一個鏈接的權重(weight)
6.4 算法詳細介紹
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)