DeepLearning.AI 學習筆記(一)

第一門課 神經網路和深度學習

學習的目標: 最小化代價函數 min J(W,b)

J(W,b) = 1/m * sum(L(a,y))

其中L(a,y)為損失函數(0-1損失函數、cross-entropy、square-loss 等)

Logistic Regression 可以看成一層的神經網路,激活函數是sigmoid

激活函數: sigmoid , tanh , relu , LeakyRelu

sigmoid 可以將網路的輸入壓縮到0-1之間,但其在輸入過大或過小時函數的梯度趨近於0,不利於參數的更新;另外sigmoid的輸出不是0均值的,後續文章會提到經過標準化的有利於提高網路的訓練速度。

tanh = 2 sigmoid(2x) - 1 使得輸出的均值為0。

Relu = max(0 , x) 可以加快收斂速度,因為在輸入大於0的部分時是線性的導數恆等於1,relu的計算複雜度也遠低於sigmoid和tanh。relu的主要缺點是容易產生dead的神經元。

LeakyRelu 主要為了解決dead神經元的問題。

激活函數需要使用非線性函數,如果使用線性函數作為激活函數,那麼無論經過多少層都相當於對輸入做線性變換,訓練出的仍然是一個簡單的線性模型,不會擬合出複雜的分布。

Train 基本過程:

init_parameters()while iter <= iter_num : front_propagation()compute_cost()back_propagation()update_parameters()return parameters

Front propagation :

X ---> Z = W^{T}*X ---> A = g(Z) .

第l層的權重: W[l].shape = (n[l-1],n[l])

第l層偏置:b[l].shape = (n[l-1],1)

n[l]為第l層的神經元數量

Compute Cost :

cross entropy : L(a,y) =-(ylog(a) +(1-y)log(1-a))

為什麼不使用 平方誤差 ?

因為在距離目標值較遠的地方,平方誤差的偏導數也很小,更新容易卡住。

(From : 視頻 李宏毅ML2017)

Back propagation :

鏈式法則求每一層W,b的偏導數


推薦閱讀:

TAG:深度學習DeepLearning | 機器學習 |