《百面》-9.前向神經網絡

1.多層感知機與布爾函數

問題1:多層感知機表示異或邏輯時最少需要幾個隱含層(僅考慮二元輸入)?

答:一層

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

答:2^{n-1}

問題3:考慮多隱層的情況,實現包含n元輸入的任意布爾函數最少需要多少個網絡節點和網絡層?

答:

2.深度神經網絡中的激活函數

問題1:寫出常用激活函數及其導數?

答:

(1)sigmoid

f(z)=\frac{1}{1+e^{-z}}  ,{f}'(z)=f(z)(1-f(z))

(2)tanh

f(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}},   {f}'=1-(f(z))^{2}

(3)relu

f(z)=max(0,z) ,   {f}'(z)=\left\{\begin{matrix} 1, z>0\\ 0, z\leq 0 \end{matrix}\right.

問題2:爲什麼Sigmoid和Tanh激活函數會導致梯度消失的現象?

答:

(1)sigmoid函數將輸入z映射到(0,1),當z很大時,f(z)約等於1;當z很小時,f(z)約等於0. 其導數等於0,因爲斜率爲0.導致梯度消失

(2)tanh函數和sigmoid函數差不多。當z很大時,f(z)約等於1;當z很小時,f(z)約等於-1.其導數也是等於0.其實

tanh(x)=2sigmoid(2x)-1

問題3:Relu系列的激活函數相對於Sigmoid和Tanh激活函數的優點是什麼?他們有什麼侷限性以及如何改進?

答:

優點

(1)sigmoid和tanh都需要計算指數,複雜度高

(2)Relu的非飽和性可以有效地解決梯度消失問題,提供相對寬的激活邊界

(3)Relu的單側抑制提供了網絡的稀疏表達能力

侷限性

relu的侷限性在於其訓練過程中會導致神經元死亡

改進方法leaky relu f(z)=\left\{\begin{matrix} z, z>0\\ az, z\leq 0 \end{matrix}\right.

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

問題1:寫出多層感知機的平方誤差和交叉熵損失函數

答:給定包含m個樣本的集合{(x^1,y^1),...,(x^m,y^m)}

平方誤差的整體代價函數爲

J(W,b)=[\frac{1}{m}\sum_{i=1}^{m}J(W,b;x^i,y^i)]+\frac{\lambda }{2}\sum_{l=1}^{N}\sum_{i=1}^{S_{l-1}}\sum_{j=1}^{S_{l}}(W_{ji}^{l})^2

=[\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}|y^i-L_{w,b}(x^{i})|^2]+\frac{\lambda }{2}\sum_{l=1}^{N}\sum_{i=1}^{S_{l-1}}\sum_{j=1}^{S_{l}}(W_{ji}^{l})^2

交叉熵損失函數(二分類)

J(W,b)=[\frac{1}{m}\sum_{i=1}^{m}J(W,b;x^i,y^i)]+\frac{\lambda }{2}\sum_{l=1}^{N}\sum_{i=1}^{S_{l-1}}\sum_{j=1}^{S_{l}}(W_{ji}^{l})^2

=[\frac{1}{m}\sum_{i=1}^{m}(y^ilno^i+(1-y^i)ln(1-o^i))]+\frac{\lambda }{2}\sum_{l=1}^{N}\sum_{i=1}^{S_{l-1}}\sum_{j=1}^{S_{l}}(W_{ji}^{l})^2

第一項衡量了預測o與真實值y之間的交叉熵,當y與o相等時,熵最大,也就是損失函數達到最小。

交叉熵損失函數(多分類)

J(W,b)=-[\frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{n}y_{k}^ilno_{k}^i]+\frac{\lambda }{2}\sum_{l=1}^{N}\sum_{i=1}^{S_{l-1}}\sum_{j=1}^{S_{l}}(W_{ji}^{l})^2

oi 代表第i個樣本的預測屬於類別k的概率,y爲實際的概率。

問題2:根據問題1中定義的損失函數,推導各層參數更新的梯度計算公式

答:

問題3:平方誤差損失函數和交叉熵損失函數分別適合什麼場景?

答:平方損失函數更適合輸出爲連續,並且最後一層不含Sigmoid或Softmax激活函數的神經網絡;交叉熵損失適合二分類或多分類的場景。

平方誤差損失函數的最後一層爲sigmodi的話,梯度會趨於飽和,使得學習速度非常的緩慢。

4.神經網絡訓練技巧

問題1:神經網絡訓練時是否可以將全部參數初始化爲0?

答:如果參數全部初始化爲同樣的值,那麼無論前向傳播還是反向傳播的取值都是完全相同的。學習過程將永遠無法打破這種對稱性,因此需要隨機的初始化神經網絡參數的值,初始化參數的取值範圍(-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}})的均勻分佈,其中d是一個神經元接受的輸入維度。偏執可以設置爲0

問題2:爲什麼Dropout可以抑制過擬合?他的工作原理和實現?

答:Dropout作用於每次小批量訓練數據,由於其隨機丟棄部分神經元的機制,相當於每次迭代都在訓練不同結構的神經網絡。

Dropout的具體實現中,要求某個神經元節點激活值以一定的概率p被丟棄。因此對於包含N個神經元節點的網絡,在Dropout的作用下可看作2^N個模型的集成。

訓練階段,每個神經元節點增加一個概率係數

測試階段,每個神經元參數預先乘以概率p

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

答:神經網絡訓練過程的本質是學習數據分佈,如果訓練數據與測試數據的分佈不同將大大降低網絡的泛化能力,因此需要對所有輸入數據進行歸一化處理。然而隨着訓練的進行,每個隱層的參數變化使得後一層的輸入發生變化,從而每一批訓練數據的分佈也隨之改變,增大訓練的複雜度以及過擬合風險。

批量歸一化,是在網絡的每一層輸入之前增加歸一化處理(均值爲0,標準差爲1),將所有批次數據強制在統一的數據分佈下,對該層的任意神經元(假設爲第k維)

\dot{x}^k=\frac{x^k-E[x^k]}{\sqrt{Var[x^k]}}   其中x^k 維該層第k個神經元的原始輸入數據,

批量歸一化可以看做在每一層輸入和上一層輸出之間加入了一個新的計算層,對數據的分佈進行額外的約束,從而增加模型的泛化能力。但是批量歸一化同時也降低了模型的擬合能力,一sigmoid爲例,批量歸一化的數據分佈在【0,1】之間,只包含中間的線性部分,破花了之前學到的特徵分佈。爲了恢復原始數據分佈,引用了變換重構以及可學習參數

y^k=\gamma ^k\dot{x}^k+\beta ^k ,其中\gamma \beta分別爲輸入數據分佈的方差和偏差。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章