神經網絡和深度學習(二)淺層神經網絡


1、計算神經網絡的輸出(正向傳播):

 

矩陣表示:

 向量化:

 

2、多個樣本的向量化(正向傳播):

 

3、激活函數:

(1)sigmoid函數僅用於二分分類的情況,較少使用;

a = 1 / (1 + e-z)

 g'(z) = g(z) * (1 - g(z))

 (2)tanh函數絕大多數情況下優於sigmoid函數;

a = (ez - e-z) / (ez + e-z)

 g'(z) = 1 - g(z)²

(3)ReLU函數是默認的常用激活函數;

a = max(0, z)

g'(z) = 0   if z < 0

g'(z) = 1   if z ≥ 0

(4)leaking ReLU 帶泄露的ReLU函數;

a = max(0.01z, z)

g'(z) = 0.01   if z < 0

g'(z) = 1        if z ≥ 0

 

4、神經網絡為什么需要非線性激活函數?

假設使用線性激活函數,即a[1] = z[1]

a[1] = z[1] = w[1]x + b[1]

a[2] = z[2] = w[2]a[1] + b[2]

  = w[2] * (w[1]x + b[1]) + b[2]

  = (w[1]w[2])x + (w[2]b[1] + b[2])

  = w'x + b'

可見,神經網絡只是把輸入線性組合再輸出.

一般在回歸問題中,可能會使用線性激活函數.

 

5、神經網絡中的梯度下降:

 

 

6、直觀理解反向傳播:

da[2] = dL/da[2] = -y/a[2] + (1-y)/(1-a[2])

dz[2] = dL/dz[2] = dL/da[2] * da[2]/dz[2] = [-y/a[2] + (1-y)/(1-a[2])] * a[2](1-a[2]) = a[2]-y

dw[2] = dL/dw[2] = dL/dz[2] * dz[2]/dw[2]  = dz[1]a[1]T

db[2] = dL/db[2] = dL/dz[2] * dz[2]/db[2] = dz[2]

da[1] = dL/da[1] = dL/dz[2] * dz[2]/da[1] = w[2]Tdz[2]

dz[1] = dL/dz[1] = dL/da[1] * da[1]/dz[1] = w[2]Tdz[2] .* g[1]'(z[1])

dw[1] = dL/dw[1] = dL/dz[1] * dz[1]/dw[1] = dz[1]xT

db[1] = dL/db[1] = dL/dz[1] * dz[1]/db[1] = dz[1]

 

7、隨機初始化:

如果 w 初始值設置為全0,則隱藏單元的每行值都完全相同,即完全對此. 每個隱藏單元的計算完全相同,使得隱藏單元失去作用.

隨機初始化方法:

w[i] = np.random.randn(...) * 0.01

b[i] = np.zero(...)

乘上 0.01 是為了避免 z[i] 太大,導致 a[i] 太大,使得激活函數處於平緩區域(接近飽和),梯度下降速度慢(g'(z)接近0,dz也接近0).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM