浅层神经网络
學習目標
-
目標
- 知道淺層神經網絡的前向計算過程
- 知道選擇激活函數的原因
- 說明淺層網絡的反向傳播推導過程
-
應用
- 應用完成一個淺層神經網絡結構進行分類
1.3.1 淺層神經網絡表示
之前已經說過神經網絡的結構了,在這不重復敘述。假設我們有如下結構的網絡
?
對于這個網絡我們建立一個簡單的圖示?我們對第一個隱藏層記為[1],輸出層為[2]。如下圖
?
計算圖如下
?
- 每個神經元的計算分解步驟如下
?
- 第一層中的第一個神經元
z _1^{[1]} = (W _1^{[1]})^Tx+b _1^{[1]}z?1?[1]??=(W?1?[1]??)?T??x+b?1?[1]??
a _1^{[1]} = \sigma(z _1^{[1]})a?1?[1]??=σ(z?1?[1]??)
- 第一層中的第一個神經元
z _2^{[1]} = (W _2^{[1]})^Tx+b _2^{[1]}z?2?[1]??=(W?2?[1]??)?T??x+b?2?[1]??
a _2^{[1]} = \sigma(z _2^{[1]})a?2?[1]??=σ(z?2?[1]??)
得出第一層的計算:
?
1.3.2 單個樣本的向量化表示
那么現在把上面的第一層的計算過程過程用更簡單的形式表現出來就是這樣的計算
\left(\begin{array}{cccc}\cdots & (W _1^{[1]})^T & \cdots \\ \cdots & (W _2^{[1]})^T & \cdots \\ \cdots & (W _3^{[1]})^T & \cdots \\ \cdots & (W _4^{[1]})^T & \cdots \end{array}\right) * \left( \begin{array}{c}x_{1} \\ x_{2} \\ x_{3}\end{array}\right) + \left( \begin{array}{c}b_{1}^{[1]} \\ b_{2}^{[1]} \\ b_{3}^{[1]} \\ b_{4}^{[1]} \end{array}\right)???????????????????????(W?1?[1]??)?T???(W?2?[1]??)?T???(W?3?[1]??)?T???(W?4?[1]??)?T??????????????????????????????????x?1???x?2???x?3??????????+?????????????b?1?[1]???b?2?[1]???b?3?[1]???b?4?[1]????????????????
那么對于剛才我們所舉的例子,將所有層通過向量把整個前向過程表示出來,并且確定每一個組成部分的形狀
前向過程計算:
z^{[1]} = W^{[1]}x+b^{[1]}z?[1]??=W?[1]??x+b?[1]???形狀:(4,1) = (4,3) * (3,1) + (4,1)
a^{[1]}=\sigma(z^{[1]})a?[1]??=σ(z?[1]??)?形狀:(4,1)
z^{[2]} = W^{[2]}a^{[1]}+b^{[2]}z?[2]??=W?[2]??a?[1]??+b?[2]???形狀:(1,1) = (1,4) * (4,1)+(1,1)
a^{[2]}=\sigma(z^{[2]})a?[2]??=σ(z?[2]??)?形狀:(1,1)
那么如果有多個樣本,需要這樣去做
?
- 多個樣本的向量化表示
假設一樣含有M個樣本,那么上述過程變成
Z^{[1]} = W^{[1]}X+b^{[1]}Z?[1]??=W?[1]??X+b?[1]???形狀:(4,m) = (4,3) * (3,m) + (4,1)
{A}^{[1]}=\sigma(Z^{[1]})A?[1]??=σ(Z?[1]??)?形狀:(4,m)
Z^{[2]} = W^{[2]}A^{[1]}+b^{[2]}Z?[2]??=W?[2]??A?[1]??+b?[2]???形狀:(1,m) = (1,4) * (4,m)+(1,1)
A^{[2]}=\sigma(Z^{[2]})A?[2]??=σ(Z?[2]??)?形狀:(1,m)
1.3.4 激活函數的選擇
涉及到網絡的優化時候,會有不同的激活函數選擇有一個問題是神經網絡的隱藏層和輸出單元用什么激活函數。之前我們都是選用 sigmoid 函數,但有時其他函數的效果會好得多,大多數通過實踐得來,沒有很好的解釋性。
可供選用的激活函數有:
- tanh 函數(the hyperbolic tangent function,雙曲正切函數):
?
效果比 sigmoid 函數好,因為函數輸出介于 -1 和 1 之間。
注 :tanh 函數存在和 sigmoid 函數一樣的缺點:當 z 趨緊無窮大(或無窮小),導數的梯度(即函數的斜率)就趨緊于 0,這使得梯度算法的速度會減慢。
- ReLU 函數(the rectified linear unit,修正線性單元)
?
當 z > 0 時,梯度始終為 1,從而提高神經網絡基于梯度算法的運算速度,收斂速度遠大于 sigmoid 和 tanh。然而當 z < 0 時,梯度一直為 0,但是實際的運用中,該缺陷的影響不是很大。
-
Leaky ReLU(帶泄漏的 ReLU):
-
?
Leaky ReLU 保證在 z < 0 的時候,梯度仍然不為 0。理論上來說,Leaky ReLU 有 ReLU 的所有優點,但在實際操作中沒有證明總是好于 ReLU,因此不常用。
1.3.4.1 為什么需要非線性的激活函數
使用線性激活函數和不使用激活函數、直接使用 Logistic 回歸沒有區別,那么無論神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,就成了最原始的感知器了。
a^{[1]} = z^{[1]} = W^{[1]}x+b^{[1]}a?[1]??=z?[1]??=W?[1]??x+b?[1]??
{a}^{[2]}=z^{[2]} = W^{[2]}a^{[1]}+b^{[2]}a?[2]??=z?[2]??=W?[2]??a?[1]??+b?[2]??
那么這樣的話相當于
{a}^{[2]}=z^{[2]} = W^{[2]}(W^{[1]}x+b^{[1]})+b^{[2]}=(W^{[2]}W^{[1]})x+(W^{[2]}b^{[1]}+b^{[2]})=wx+ba?[2]??=z?[2]??=W?[2]??(W?[1]??x+b?[1]??)+b?[2]??=(W?[2]??W?[1]??)x+(W?[2]??b?[1]??+b?[2]??)=wx+b
1.3.5 修改激活函數的前向傳播和反向傳播
將上述網絡的隱層激活函數修改為tanh,最后一層同樣還是二分類,所以激活函數選擇依然是sigmoid函數
- 前向傳播
Z^{[1]} = W^{[1]}X+b^{[1]}Z?[1]??=W?[1]??X+b?[1]??
{A}^{[1]}=tanh(Z^{[1]})A?[1]??=tanh(Z?[1]??)
Z^{[2]} = W^{[2]}A^{[1]}+b^{[2]}Z?[2]??=W?[2]??A?[1]??+b?[2]??
A^{[2]}=\sigma(Z^{[2]})A?[2]??=σ(Z?[2]??)
- 反向梯度下降
那么通過這個計算圖來理解這個過程,單個樣本的導數推導過程:
?
由于網絡已經存在兩層,所以我們需要從后往前得到導數結果,并且多個樣本的情況下改寫成
最后一個輸出層的參數的導數:
dZ^{[2]} = A^{[2]} - YdZ?[2]??=A?[2]???Y
dW^{[2]}=\frac{1}{m}dZ^{[2]}{A^{[1]}}^{T}dW?[2]??=?m??1??dZ?[2]??A?[1]???T??
db^{[2]}=\frac{1}{m}np.sum(dZ^{[2]}, axis=1)db?[2]??=?m??1??np.sum(dZ?[2]??,axis=1)
隱藏層的導數計算:
dZ^{[1]} = {W^{[2]}}^{T}dZ^{[2]}*{(1-g(Z^{[1]})}^{2}={W^{[2]}}^{T}dZ^{[2]}*{(1-A^{[1]})}^{2}dZ?[1]??=W?[2]???T??dZ?[2]???(1?g(Z?[1]??)?2??=W?[2]???T??dZ?[2]???(1?A?[1]??)?2??
dW^{[1]}=\frac{1}{m}dZ^{[1]}X^{T}dW?[1]??=?m??1??dZ?[1]??X?T??
總結
- 上一篇: 如何写出安全的API接口(参数加密+超时
- 下一篇: 人工智能:深层神经网络