1. 程式人生 > >深度學習介紹(下)【Coursera deeplearning.ai 神經網路與深度學習】

深度學習介紹(下)【Coursera deeplearning.ai 神經網路與深度學習】

1. shallow NN 淺層神經網路




2. 為什麼需要activation function?

如下圖所示,如果不用啟用函式,那麼我們一直都在做線性運算,對於複雜問題沒有意義。linear 其實也算一類啟用函式,但是一般只用在機器學習的迴歸問題,例如預測房價等。



3. activation function啟用函式的選取:

tanh 基本上任何時候都比sigmoid 效果好,因為它使得結果均值趨近於0,便於下一層的計算。除非是binary classification,y是在[0,1]之間,否則永遠不要用sigmoid。因為tanh好得多。


除此之外,還有ReLu, 上一part說過。在別的演算法中,當不知道用什麼啟用函式的時候,吳恩達老師往往會選擇ReLu

. 但是對於NN, sigmoid和tanh往往是更好的選擇,可以讓NN很快跑完。還有Leaky ReLu, 0.01那個值可變。



4. 深度學習中因為可調節的引數太多了,所以往往會造成很多不確定性,除此之外還要結合實際資料型別等等。如果不確定,最好的辦法就是try them all。

5. NN 的 back propagation(啟用函式微分)

sigmoid和tanh的求導:



然後是ReLU和leaky ReLU的:


6. NN的gradient descent:





7. 初始化為0不可行(結果會讓每層unit一樣),需要random initialization

. 因為我們有啟用函式,所以並不希望初始值過大影響結果。對於shallow NN,都乘個0.01什麼的都是可以接受的。但是對於deep NN, 就需要給初始引數乘不同的常數了。

8. 向量


9. 什麼是深度神經網路?

shallow和deep的概念是相對的,指hidden layer較多的神經網路。big 和 small也是相對的,指units較多和較少。

10. matrix dimension是個重點,一定不能弄錯。因為我們要用到for loop做前饋。

11. 為什麼深度NN在影象識別上效果很好呢?

如下圖所示,我們需要識別人臉,deep NN能夠幫我們更好分工。第一層用於鑑別影象的邊緣,第二層用於識別眼睛、鼻子、嘴巴,第三層將識別到的東西組合在一起,最後輸出我們想要的面部。這一過程在CNN中更加有意義。大致過程就是讓前面的層學習比較低階的feature,後面的層進行高階處理。深度神經網路的工作就比較像人腦了,從邊緣開始識別,然後慢慢建立系統檢測更復雜的事物。



12. 除了影象、語音識別,deep NN在電子電路的門運算中也比shallow更有效。

13. 但是deep learning這個概念已經被濫用了,不再單指有許多隱藏層的NN;deep NN也常常被濫用(但我們依然需要很深的NN),隱藏層太多,overfit嚴重。

14. 對於deep NN, 我們需要有block意識來計算forward和back propagation:




15. parameters vs. hyperparameters

parameters: W, b

hyperparameters: learning rate, iteration numbers, hidden layers, hidden units, choices of activation functions

hyperparameters control parameters, so we call them hyper~


python 程式碼:

1. keepdims = True, keepdims主要用於保持矩陣的二維特性

>>> import numpy as np
>>> a = np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> b = np.sum(a, axis = 1, keepdims = True)
>>> c = np.sum(a, axis = 1)
>>> b
array([[3],
       [7]])
>>> c
array([3, 7])

2. 矩陣運算

np.dot()是矩陣乘法

np.multiply()與*同,element-wise 元素相乘