1. 程式人生 > 實用技巧 >葫蘆書筆記----前向神經網路

葫蘆書筆記----前向神經網路

前向神經網路

多層感知機與布林函式

多層感知機表示疑惑邏輯時最少需要幾個隱含層(僅考慮二元輸入)?

速記:一個。

詳細:設具有0個隱藏層的情況(等同於邏輯迴歸)。僅考慮二元輸入的情況,設X的取值為0或1,Y的取值也為0或1,Z為異或運算的輸出。

邏輯迴歸公式如下:
Z = s i g m o i d ( A X + B Y + C ) Z=sigmoid(AX+BY+C) Z=sigmoid(AX+BY+C)
其中Sigmoid啟用函式是單調遞增的:

當AX+BY+C的取值增大時,Z的取值也增 大;當AX+BY+C的取值減少時,Z的取值也減小。而AX+BY+C對於X和Y的變化也 是單調的,

當引數A為正數時,AX+BY+C以及Z的取值隨X單調遞增;

當A取負數 時,AX+BY+C和Z隨X單調遞減;

當引數A為0時,Z的值與X無關。

觀察異或運算的真值表,當Y=0時,將X的取值從0變到1將使輸出Z也從0變為1,說明此時Z的變化 與X是正相關的,需要設定A為正數;

而當Y=1時,將X的取值從0變為1將導致輸出 Z從1變為0,此時Z與X是負相關的,需要設定A為負數,與前面矛盾。因此,採用 邏輯迴歸(即不帶隱藏層的感知機)無法精確學習出一個輸出為異或的模型表示。

加一個隱藏層可以用來判斷XY是否都為0或1。

如果只是用一個隱層,需要多少隱節點能夠實現包含n元輸入的任意布林函式?

速記: 2 n − 1 2^{n-1} 2n1

考慮多隱層的情況,實現包含n元輸入的任意布林函式最少需要多少個網路節點或網路層?

速記:3(n-1)個節點, 2 log ⁡ 2 N 2 \log_2N 2log2N向上取整層

深度神經網路中的啟用函式

常用啟用函式

速記:sigmiod、ReLU

詳細:
s i g m o i d ( z ) = 1 1 + e x p ( − z ) sigmoid(z)=\frac{1}{1+exp(-z)} sigmoid(z)=1+exp(z)1

R e L U ( z ) = m a x ( 0 , z ) ReLU(z)=max(0,z) ReLU(z)=max(0,z)

T a n h ( z ) = t a n h ( z ) = e z − e − z e z + e − z Tanh(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}

Tanh(z)=tanh(z)=ez+ezezez

為什麼Sigmoid和Tanh啟用函式會導致梯度消失的現象?

速記:導數在輸入很大或很小時都會趨於0。

詳細 :
t a n h ( x ) = 2 s i g m o i d ( 2 x ) − 1 tanh(x)=2sigmoid(2x)-1 tanh(x)=2sigmoid(2x)1
如圖可見,在輸入很大或很小時,導數趨於0,因此梯度消失了。
在這裡插入圖片描述

ReLU系列的啟用函式相對於Sigmoid和Tanh啟用函式有什麼優點?它們有什麼侷限性以及如何改進?

速記:計算簡單,解決梯度消失問題,提供網路的稀疏表達能力。侷限:導致神經元死亡問題。

詳細:

優點:

  1. 計算簡單,只需一個閾值即可得到啟用值。
  2. ReLUctant的非把薄荷性可以有效地解決梯度消失的問題,提供相對寬的啟用邊界。
  3. ReLU的單側抑制提供了網路的稀疏表達能力。

侷限性:

ReLU訓練過程中會導致神經元死亡的問題。因為函式 f ( z ) = m a x ( 0 , z ) f(z)=max(0,z) f(z)=max(0,z)導致負梯度在經過該ReLU單元時被置為0,且在之後也不會被任何資料啟用,即流經該神經元的梯度永遠為0.

為解決這一問題,可以使用Leaky ReLU,其形式i表示為:
f ( z ) = { z , z > 0 a z , z ≤ 0 f(z)= \begin{cases} z,z>0\\ az,z\le0 \end{cases} f(z)={z,z>0az,z0
類似的還有PReLU頓號Random ReLU。

多層感知機的反向傳播演算法

速記:核心就是鏈式法則。

寫出多層感知機的平方誤差和交叉熵損失函式。

在這裡插入圖片描述

特別地,平方誤差那的二分之一是為了抵消求導後的2加的。

平方誤差損失函式和交叉熵損失函式分佈適合什麼場景?

速記:平方損失函式更適合輸出是連續的,交叉熵適合分類。

詳細:平方誤差損失函式更適合輸出為連續,且最後一層不含Sigmoid或Softmax啟用函式的神經網路;交叉熵損失則更適合二分零或者多酚類的場景。

在反向傳播時,平方誤差損失函式相對於輸出層的導數:
δ ( L ) = − ( y − a ( L ) ) f ′ ( z ( L ) ) \delta^{(L)}=-(y-a^{(L)})f'(z^{(L)}) δ(L)=(ya(L))f(z(L))
其中 f ′ ( z ( L ) ) f'(z^{(L)}) f(z(L))為啟用函式的導數。當啟用函式為Sigmoid函式時,如果 z ( L ) z^{(L)} z(L)的絕對值較大,函式的梯度會居於飽和,即 f ′ ( z ( L ) ) f'(z^{(L)}) f(z(L))的絕對值非擦汗給你小,導致 δ ( L ) \delta^{(L)} δ(L)也非常小。

神經網路訓練技巧

在訓練神經網路時,經常會出現“過擬合”的問題,解決方法有很多,包括資料集增強 (Data Augmentation)、引數範數懲罰/正則化(Regularization)、模型整合 (Model Ensemble)等;其中Dropout是模型整合方法中最高效與常用的技巧。

神經網路訓練時是否可以將全部引數初始化為0?

速記:雅蠛蝶~~❤

詳細:在全連線的深度神經網路中,同一層中的任意神經元都是同構的,它們擁有相同的輸入和輸出,如果將引數初始化為同樣的值,那麼無論前向傳播還是反向傳播的取值都是完全相同的。最終2同一網路層中的各個引數仍然是相同的。偏置可以全為0.

為什麼dropout可以抑制過擬合?它的工作原理和實現?

速記:Dropout是指在深度網路的訓練中,以一定的概率隨機地 “臨時丟棄”一部分神 經元節點。

詳細:具體來講,Dropout作用於每份小批量訓練資料,由於其隨機丟棄部分 神經元的機制,相當於每次迭代都在訓練不同結構的神經網路。類比於Bagging方 法,Dropout可被認為是一種實用的大規模深度神經網路的模型整合演算法。這是由 於傳統意義上的Bagging涉及多個模型的同時訓練與測試評估,當網路與引數規模 龐大時,這種整合方式需要消耗大量的運算時間與空間。Dropout在小批量級別上 的操作,提供了一種輕量級的Bagging整合近似,能夠實現指數級數量神經網路的 訓練與評測。

批量歸一化的基本動機與原理是什麼?在卷積神經網路中如何使用?

速記:增強泛化能力。

詳細:批量歸一化可以看作在每一層輸入和上一層輸出之間加入了一個新的計算 層,對資料的分佈進行額外的約束,從而增強模型的泛化能力。但是批量歸一化 同時也降低了模型的擬合能力。

批量歸一化在卷積神經網路中應用時,需要注意卷積神經網路的引數共享機 制。每一個卷積核的引數在不同位置的神經元當中是共享的,因此也應該被一起 歸一化。

卷積與殘差看書