01. 神經網絡和深度學習
第四周 深層神經網絡
4.1 & 4.2 深層神經網絡
logistic回歸模型可以看作一層網絡,通過增加隱藏層的層數,就可以得到深層網絡了。
4.3 檢查矩陣的維數
確保神經網絡計算正確的有效方法之一就是檢查矩陣的維數,包括數據矩陣、參數矩陣等。注意深度學習或者說編程時所說的矩陣維數往往指的是矩陣的形狀,並不是嚴格的數學概念。
數據矩陣的維數:行數等於特征數,列數等於樣本數;
參數矩陣的維數:行數等於下一層神經元的個數,列數等於當前神經元的個數。
\( Z^{[l]} = W^{[l]}A^{[l-1]} + b^{[l]} \)
\( W^{[l]}:(n^{[l]}, n^{[l-1]}), \qquad Z^{[l]},A^{[l]}:(n^{[l]}, m) \)
反向傳播時,注意梯度矩陣應與對應的參數矩陣維數相同。
4.4 為什么使用深層表示
為什么用這么多層,一種理由是在解決視覺或者語音問題過程中,分層意味着不同層次特征信息的提取;另一種理由來自電路理論,有一些問題使用淺層網絡的復雜度要遠超過深層網絡。
其實我覺得最重要的理由還是:實際效果好。煉丹嘛!
4.5 & 4.6 搭建深層網絡塊、前向和反向傳播
完整的深層網絡由一層層神經元疊加組成,搞清楚了每一層的前向和反向傳播計算原理就搞清楚了整個神經網絡的基本原理。每一層的示意圖如下:
划重點!
前向傳播:
- 輸入:\( a^{[l-1]} \)
- 中間計算:\( z^{[l]} = W^{[l]}a^{[l-1]}+b^{[l]},\quad a^{[l]} = g^{[l]}(z^{[l]}) \)
- 輸出:\( a^{[l]} \),緩存 \( z^{[l]} \)
反向傳播:
- 輸入:\( da^{[l]} \),加上緩存的 \( z^{[l]} \)
- 中間計算:
- \( dz^{[l]} = da^{[l]} * g^{[l]'}(z^{[l]}) \)
- \( da^{[l-1]} = W^{[l]^T} dz^{[l]} \)
- \( dW^{[l]} = dz^{[l]} a^{[l-1]^T} \)
- \( db^{[l]} = dz^{[l]} \)
- 輸出:\( da^{[l-1]} \)
下面是多樣本的向量化實現:
前向傳播:
- 輸入:\( A^{[l-1]} \)
- 中間計算:\( Z^{[l]} = W^{[l]}A^{[l-1]}+b^{[l]},\quad A^{[l]} = g^{[l]}(Z^{[l]}) \)
- 輸出:\( A^{[l]} \),緩存 \( Z^{[l]} \)
反向傳播:
- 輸入:\( dA^{[l]} \),加上緩存的 \( Z^{[l]} \)
- 中間計算:
- \( dZ^{[l]} = dA^{[l]}*g^{[l]'}(Z^{[l]}) \)
- \( dA^{[l-1]} = W^{[l]^T}dZ^{[l]} \)
- \( dW^{[l]} = \frac{1}{m}dZ^{[l]}A^{[l-1]^T} \)
- \( db^{[l]} = \frac{1}{m}np.sum(dZ^{[l]}, axis=1, keepdims=True) \)
- 輸出:\( dA^{[l-1]} \)
多層神經網絡疊加起來的示意圖如下:
看起來很麻煩是吧?吳恩達老師說:你所實現算法的復雜性和有效性都來自於數據,而不是你寫的代碼...
4.7 參數 VS 超參數
我覺得這才是深度學習最重要的一部分吧...
神經網絡的超參數包括:學習率、迭代次數、隱藏層的層數、隱藏層神經元數、激活函數
后面還會有:動量、mini-batch size、正則化項等等
Applied deep learning is a very empirical process.
這句話的意思就是:不要慫,就是試!找對了會所嫩模,找錯了下海干活...
煉金術士的圖騰!
4.8 神經網絡和大腦有什么關系
沒多少關系。
人類還沒有搞清楚神經元的工作原理,這么叫只是為了方便宣傳,忽悠你們來學習哈哈哈哈哈哈哈哈哈